PASM (Ponos AssemblB) - проектик, суть которого заключается в создании собственного 16-битного ассемблера и виртуальной машины для него PC - Program Counter CB - Compare Byte RW - RAM Writer LM - Last Memory ТАБЛИЦА ИНСТРУКЦИЙ ОПКОД (HEX) | АССЕМБЛЕР | ЗНАЧЕНИЕ 00 | HLT | Выключение 01AB | MOV AX BX | Переместить значение из регистра B в регистр A 0AFFFF | MOV AX 0xFFFF или 65536 | Переместить хексовое FFFF в регистр A 02FFFF | JMP 0xFFFF или 65536 | Переместить PC в определенное значение 030A | JMP AX | Переместить PC в значение регистра A 04AB | CMP AX BX | Сравнение значений регистров A и B 05FFFF | JE 0xFFFF | Переход по адресу, если значение CB = 0 (AX = BX) 06FFFF | JNE 0xFFFF | Переход по адресу, если значение CB != 0 (AX != BX) 07FFFF | JG 0xFFFF | Переход по адресу, если значение CB = 1 (AX > BX) 08FFFF | JL 0xFFFF | Переход по адресу, если значение CB = 2 (AX < BX) 10AB | ADD AX BX | Арифметическое сложение (AX = AX + BX) 11AB | SUB AX BX | Арифметическое вычитание (AX = AX - BX) 120B | INC BX | Инкремент (BX ++) 130B | DEC BX | Декремент (BX ++) 14AB | MUL AX BX | Арифметическое умножение (AX = AX * BX) 15AB | DIV AX BX | Целочисленное деление (AX = AX // BX) 16AB | ROD AX BX | Остаток от деления (AX = AX % BX) 17AB | AND AX BX | Логическое И (AX = AX & BX) 18AB | OR AX BX | Логическое ИЛИ (AX = AX || BX) 19AB | XOR AX BX | Исключающее ИЛИ (AX = AX ^ BX) 1A0B | NOT AX | Логическое НЕ (BX = !BX) 1BAB | SHL AX BX | Сдвиг влево на BX бит (AX = AX << BX) 1CAB | SHR AX BX | Сдвиг вправо на BX бит (AX = AX >> BX) 1DAB | SAVE AX BX | Сохранение значения регистра AX в ОЗУ по адресу BX (занимает 2 байта, BX указывает на первый) 1EAB | LOAD AX BX | Загрузка значения регистра AX из ОЗУ по адресу BX (занимает 2 байта, BX указывает на первый) 30FFFF0A | ADD AX 0xFFFF | Арифметическое сложение (регистр + число) 31FFFF0A | SUB AX 0xFFFF | Арифметическое вычитание (регистр - число) 32FFFF0A | MUL AX 0xFFFF | Арифметическое умножение (регистр * число) 33FFFF0A | DIV AX 0xFFFF | Целочисленное деление (регистр / число) 34FFFF0A | ROD AX 0xFFFF | Остаток от деления 35FFFF0A | SHL AX 0xFFFF | Сдвиг влевоо 36FFFF0A | SHR AX 0xFFFF | Сдвиг вправо 37FFFF0A | SAVE AX 0xFFFF | Сохранение значения регистра в ОЗУ 38FFFF0A | LOAD AX 0xFFFF | Загрузка значения из ОЗУ 20 | RET | Возвращение из подпрограммы (PC = LM) 21FFFF | CALL 0xFFFF | Вызов подпрограммы 40AB | WR AX BX | Подает HIGH / LOW значение на цифровой пин 41AB | RD AX BX | Считывает значение с цифрового пина 42AB | AWR AX BX | Подает аналоговое значение на пин (ШИМ) 43AB | ARD AX, BX | Считывает аналоговое значение с пина 440B | DEL BX | Задержка в BX миллисекунд 450B | UWR BX | Запись в UART 460B | URD BX | Чтение из UART с ожиданием сигнала 470B | NURD BX | Чтение из UART без ожидания сигнала 480B | PIN AX BX | Переводит PIN AX в соответствующий режим работы (0 - INPUT, 1 - OUTPUT, 2 - INPUT_PULLUP) ffFFFF | :0xFFFF: | При считывании программы в ОЗУ перемещает RW в адрес FFFF ОСНОВНЫЕ ПРИНЦИПЫ Есть 6 регистров: AX, BX, CX, DX, EX, FX Максимум ОЗУ - 64кб Программа полностью выгружается в ОЗУ через RW, затем начинается ее выполнение 0x00 - начальный адрес выполнения