Есть мысль разработать русский ассемблер. Это идея уже выдвигалась Сыем Русский язык программирования - с чего начать? . Я её сходу отверг, однако теперь исправляюсь. Может, Сый тоже найдёт в себе силы что-то исправить
Предлагаю здесь обсудить замены служебных слов ассемблера, которые являются сокращением английских слов. Ниже - предлагаемые замены, в конце - полный справочник с описанием. Часть команд разумно заменить не сокращениями, а специальными символами, например "ADD" - это "+". Это повлечёт за собой изменение способа записи: не "ADD AX,3", а "AX+=3" или "AX+3". Так же необходимо подобрать замены именам регистров и служебным словам типа "DWORD PTR" или "OFFSET".
Предлагайте замены; по мере их появления буду вносить изменения в таблицу замен.
Таблица замен:
-------------------
AAA AAD AAM AAS ADC ADD А + Б или А+= Б (инфиксная) AND С & Д или C &= Д или С и Д (инфиксная) ARPL BOUND BSF BSR BSWAP BT ПР (обычный способ записи) BTC ПРДОП (обычный способ записи) BTR ПР0 (обычный способ записи) BTS ПР1 (обычный способ записи) CALL метка_подпрограммы() (постфиксная) CBW CDQ CLC CLD
CLI CLTS CMC CMP А ? Б (инфиксная) CMPS ?? (инфиксная) или СР_СТРОК (обычный способ записи) CMPXCHG А ?<-> Б (инфиксная) CWD CWDE DAA DAS DEC -- А (префиксная) DIV А / Б или А /= Б (инфиксная) ENTER ESC F... HLT IDIV А // Б или А //= Б (инфиксная) IMUL А ** Б или А **= Б (инфиксная) IN ВВ, ВВОД (обычный способ записи) INC ++ А (префиксная)
INS INT ПРЕР (обычный способ записи) INTO INVD INVLPG IRET JA > метка_перехода (префиксная) JAE >= метка_перехода (префиксная) JB < метка_перехода (префиксная) JBE <= метка_перехода (префиксная) JC JCXZ JE == метка_перехода (префиксная) JECXZ JG > метка_перехода (префиксная) JGE >= метка_перехода (префиксная) JL < метка_перехода (префиксная) JNA !> метка_перехода (префиксная) JNAE !>= метка_перехода (префиксная) JNB !< метка_перехода (префиксная)
JNBE !<= метка_перехода (префиксная) JNC JNE != метка_перехода (префиксная) JNG !> метка_перехода (префиксная) JNGE !>= метка_перехода (префиксная) JNL !< метка_перехода (префиксная) JNLE !<= метка_перехода (префиксная) JNO JNP JNS JNZ JO JP JS JZ JMP --> метка_перехода (префиксная) LAHF LAR LDS LEA А @ Б (инфиксная)
LEAVE LES LFS LGDT LGS LIDT LLDT LMSW LOCK LODS LOOP LOOPE/LOOPZ LOOPNE/LOOPNZ LSL LSS LTR MOV А = Б или А := Б (инфиксная) MOVS MOVSX MOVZX
MUL А * Б или А *= Б (инфиксная) NEG - А (префиксная) NOP NOT ! А (префиксная) OR А | Б или А |= Б или А ИЛИ Б (инфиксная) OUT OUTS POP А { или А,Б {{ или А, Б, С {{{ (постфиксная с переменным числом аргументов) POPA POPF PUSH А } или А,Б }} или А, Б, С }}} (постфиксная с переменным числом аргументов) PUSHA PUSHF RCL RCR REP REPE/REPZ REPNE/REPNZ RET <-- или <-- 8 (без операнда или префиксная) ROL А <<< 3 (инфиксная) ROR А >>> 5 (инфиксная)
SAHF SAL SALC SAR SBB SCAS SET(cond) SGDT SHL А << 2 (инфиксная) SHLD SHR А >> 1 (инфиксная) SHRD SIDT SLDT SMSW STC STD STI STOS STR
SUB А - Б или А -= Б (инфиксная) TEST VERR VERW WAIT WBINVD XADD XCHG А <=> Б (инфиксная) XLAT XOR А ^ Б или А ^= Б (инфиксная)
Полный справочник, взят отсюда: http://looch-disasm.narod.ru/refe19.htm
AAA ASCII-коррекция после сложения (ASCII Adjust after Addition) AAD ASCII-коррекция регистра AX перед делением (ASCII Adjust AX before Division) AAM ASCII-коррекция регистра AX после умножения (ASCII Adjust AX after Multiply) AAS ASCII-коррекция после вычитания (ASCII Adjust after Subtraction) ADC Сложение с переносом (Add with Carry) ADD Сложение (Add) AND Логическое "И" (Logical "AND") ARPL Коррекция поля RPL селектора (Adjust Requested Privilege Level) BOUND Контроль нахождения индекса массива в границах (Check array index against Bound) BSF Сканирование бита вперед (Bit Scan Forward) BSR Сканирование бита назад (Bit Scan Reverse) BSWAP Перестановка байтов (внутри 32-битного регистра) (Byte Swap) BT Проверка бита (Bit Test) BTC Проверка бита и дополнение Bit Test and Complement) BTR Проверка бита и сброс в нуль (Bit Test and Reset) BTS Проверка бита и установка в единицу (Bit Test and Set) CALL Вызов процедуры (Call Procedure) CBW Преобразование байта в слово (Convert Byte to Word) CDQ Преобразование двойного слова в счетверенное слово (Convert Doubleword to Quadword) CLC Сброс флажка переноса (Clear Carry flag) CLD Сброс флажка направления (Clear Direction flag) CLI Сброс флажка прерывания (Clear Interrupt flag) CLTS Сброс флажка переключения задачи (в регистре CR0) (Clear Task Switched flag (in CR0)) CMC Инвертирование флажка переноса (Complement Carry flag) CMP Сравнение двух операндов (Compare two operands) CMPS Сравнение цепочечных операндов (Compare String operands) CMPXCHG Сравнение и обмен (Compare and Exchange) CWD Преобразование слова в двойное слово (Convert Word to Doubleword) CWDE Преобразование слова в двойное слово Convert Word to Doubleword Extended) DAA Десятичная коррекция AL после сложения (Decimal Adjust AL after Addition) DAS Десятичная коррекция AL после вычитания (Decimal Adjust AL after Subtraction) DEC Декремент на 1 (Decrement by 1) DIV Беззнаковое деление (Unsigned Divide) ENTER Образование стекового кадра для параметров процедуры (Make stack frame for procedure parameters) ESC Универсальная единая команда для сопроцессора с плавающей точкой (Escape (for floating-point unit)) F... Команды сопроцессора с плавающей точкой (Floating-point coprocessor instructions) HLT Останов (Halt) IDIV Знаковое деление (Signed Divide) IMUL Знаковое умножение (Signed Multyply) IN Ввод из порта (Input from Port) INC Инкремент на 1 INS Ввод из порта в цепочку (Input from Port to String) INT Вызов процедуры прерывания (Call to Interrupt Procedure) INTO Вызов процедуры прерывания 4, если OF=1 (Interrupt on Overflow) INVD Недостоверность кэш-памяти (Invalidate Cache) INVLPG Недостоверность элемента буфера TLB (Invalidate TLB entry) IRET Возврат из прерывания (Interrupt Return) JA Jump если больше: CF=0 и ZF=0 JAE Jump если больше/равно: CF=0 JB Jump если меньше: CF=1 JBE Jump if меньше/равно: CF=1 или ZF=1 JC Jump если Carry: CF=1 JCXZ Jump если CX=0 CX=0 JE Jump если равно: ZF=1 JECXZ Jump если ECX=0 ECX=0 JG Jump если больше: ZF=0 и SF=OF JGE Jump если больше/равно: SF=OF JL Jump если меньше: SF <> OF JLE Jump если меньше/равно: ZF=1 и SF <> OF JNA Jump если не больше: CF=1 и ZF=1 JNAE Jump если не больше/равно: CF=1 JNB Jump если не меньше: CF=0 JNBE Jump если не меньше/равно: CF=0 и ZF=0 JNC Jump если не Carry: CF=0 JNE Jump если не равно: ZF=0 JNG Jump если не больше: ZF=1 или SF <> OF JNGE Jump если не больше/равно: SF <> OF JNL Jump если не меньше: SF=OF JNLE Jump если не меньше/равно: ZF=0 и SF=OF JNO Jump если не переполнение: OF=0 JNP Jump если нечетный: PF=0 JNS Jump если не знак: SF=0 JNZ Jump если не ноль: ZF=0 JO Jump если переполнение: OF=1 JP Jump если четный: PF=1 JS Jump если знак: SF=1 JZ Jump если ноль: ZF=1 JMP Безусловная передача управления (Jump Unconditionally) LAHF Пересылка из регистра флажков в регистр AH (Load Flags into AH Register) LAR Загрузка байта прав доступа (Load Access Rights byte) LDS Загрузка полного указателя (для DS) (Load Far Pointer (DS)) LEA Загрузка эффективного адреса (Load Effective Address) LEAVE Отмена действия команды ENTER перед выходом из процедуры (High Level Procedure Exit) LES Загрузка полного указателя (для ES) (Load Far Pointer (ES)) LFS Загрузка полного указателя (для FS) (Load Far Pointer (FS)) LGDT Загрузка регистра глобальной дескрипторной таблицы (Load Global Descriptor Table Register) LGS Загрузка полного указателя (для GS) (Load Far Pointer (GS)) LIDT Загрузка регистра дескрипторной таблицы прерываний (Load Interrupt Descriptor Table Register) LLDT Загрузка регистра локальной дескрипторной таблицы (Load Local Descriptor Table Register) LMSW Загрузка слова состояния машины (Load Machine Status Word) LOCK Префикс выдачи сигнала LOCK# (Lock the Bus (prefix)) LODS Загрузка цепочечного операнда в аккумулятор (Load String Operand) LOOP Управление циклом со счетчиком в регистре CX (Loop Control with CX Counter) LOOPE/LOOPZ Управление циклом со счетчиком в регистре CX (Loop Control with CX Counter) LOOPNE/LOOPNZ Управление циклом со счетчиком в регистре CX (Loop Control with CX Counter) LSL Загрузка предела сегмента (Load Segment Limit) LSS Загрузка полного указателя (для SS) (Load Far Pointer (SS)) LTR Загрузка регистра задачи (Load Task Register) MOV Пересылка данных (Move Data) MOVS Пересылка данных из цепочки в цепочку (Move String Data) MOVSX Пересылка со знаковым расширением (Move with Sign-Extend) MOVZX Пересылка с нулевым расширением (Move with Zero-Extend) MUL Беззнаковое умножение (Unsigned Multiply) NEG Получение дополнительного кода (изменение знака) (Two's Complement Negation) NOP Пустая операция (No Operation) NOT Инвертирование (One's Complement Negation) OR Логическое включающее "ИЛИ" (Logical Inclusive "OR") OUT Вывод в порт (Output to Port) OUTS Вывод цепочки в порт (Output String to Port) POP Извлечение слова из стека (Pop Word from Stack) POPA Извлечение из стека всех общих регистров (Pop All) POPF Извлечение из стека в регистр флажков (Pop Flags) PUSH Засылка операнда в стек (Push Operand onto Stack) PUSHA Засылка в стек всех общих регистров (Push All) PUSHF Засылка в стек регистра флажков (Push Flags) RCL Циклический сдвиг влево с участием флажка CF (Rotate Left) RCR Циклический сдвиг вправо с участием флажка CF (Rotate Right) REP Префикс повторения цепочечной операции (Repeat String (prefix)) REPE/REPZ Префикс повторения цепочечной операции (Repeat String (prefix)) REPNE/REPNZ Префикс повторения цепочечной операции (Repeat String (prefix)) RET Возврат из процедуры (Return from Procedure) ROL Циклический сдвиг влево (Rotate Left) ROR Циклический сдвиг вправо (Rotate Right) SAHF Пересылка регистра AH в регистр флажков (Store AH into Flags) SAL Сдвиг влево (умножение на 2) (Shift Left) SALC Установка регистра AL по флажку CF (Set AL by CF flag) SAR Сдвиг вправо (знаковое деление на 2) (Shift Right) SBB Вычитание с заемом (Subtract with Borrow) SCAS Сравнение (сканирование) цепочечных данных (Compare (Scan) String Data) SET(cond) Установка байта по условию (Set Conditionally) SGDT Сохранение регистра глобальной дескрипторной таблицы (Store Global Descriptor Table) SHL Сдвиг влево (умножение на 2) (Shift Left) SHLD Двойной сдвиг влево (Double Precision Shift Left) SHR Сдвиг вправо (беззнаковое деление на 2) (Shift Right) SHRD Двойной сдвиг вправо (Double Precision Shift Right) SIDT Сохранение регистра дескрипторной таблицы прерываний (Store Interrupt Descriptor Table) SLDT Сохранение регистра локальной дескрипторной таблицы (Store Local Descriptor Table) SMSW Сохранение слова состояния машины (Store Machine Status Word) STC Установка флажка переноса (Set Carry Flag) STD Установка флажка направления (Set Direction Flag) STI Установка флажка прерывания (Set Interrupt Flag) STOS Сохранение цепочечных данных (Store String Data) STR Сохранение регистра задачи (Store Task Register) SUB Вычитание (Subtract) TEST Логическое сравнение (Logical Compare) VERR Проверка сегмента на считывание (Verify Segment for Reading) VERW Проверка сегмента на запись (Verify Segment for Writing) WAIT Ожидание (Wait) WBINVD Обратная запись и недостоверность кэш-памяти (Write-Back and invalidate cache) XADD Обмен и сложение (Exchange and Add) XCHG Обмен данными - регистр/регистр или регистр/память (Exchange Data - Register/Register or Register/Memory) XLAT Перекодирование байта по таблице (Translate by Table) XOR Логическое исключающее "ИЛИ" (Logical Exclusive "OR")