Фантазии о Вселенной и мой личный сайт
Система команд процессора

Система команд процессора

  • Арифметические инструкции
    • ADD - Сложение
    • OR - Логическое ИЛИ
    • ADC - Сложение с учётом переноса
    • SBB - Вычитание с учётом переноса
    • AND - Логическое И
    • SUB - Вычитание
    • XOR - Логическое Исключающее ИЛИ
    • CMP - Вычитание без записи результата
    • DAA - Десятичная коррекция после сложения
    • DAS - Десятичная коррекция после вычитания
    • AAA - ASCII коррекция после сложения
    • AAS - ASCII коррекция после вычитания
    • AAM - ASCII коррекция после умножения
    • AAD - ASCII коррекция после деления
    • IMUL - Знаковое умножение
    • IDIV - Знаковое деление
    • MUL - Беззнаковое умножение
    • DIV - Беззнаковое деление
    • NEG - Отрицательное значение
    • NOT - Логическое отрицание
    • TEST - Логическое И без сохранения результата
  • Битовые операции
    • BT- Тест бита (и запись в CF)
    • BTC - Тест и комплементация бита
    • BTR - Тест и сброс бита
    • BTS - Тест и установка бита
    • BSR - Поиск бита 1 в обратном порядке
    • BSF - Поиск бита 1 в прямом порядке
  • Работа со стеком
    • PUSH - Помещение данных в стек
    • POP - Извлечение из стека
    • PUSHA - Помещение всех 8 регистров в стек
    • POPA - Извлечение 8 регистров из стека
    • PUSHF - Поместить флаги в стек
    • POPF - Извлечь флаги из стека
    • ENTER - Создать стековый фрейм
    • LEAVE - Удалить стековый фрейм
  • Флаговые
    • CLI - Очистка IF
    • STI - Установка IF
    • CLD - Очистка DF
    • STD - Установка DF
    • CMC - Переброс CF = CF ^ 1
    • CLC - Очистка CF
    • STC - Установка CF
    • SAHF - Сохранить флаги в AH
    • LAHF - Загрузка флагов из AH
  • Условные инструкции
    • JO - Переход если переполнение, OF=1
    • JNO - Переход если нет переполнения, OF=0
    • JB - Переход если перенос, CF=1
    • JNB - Переход если нет переноса, CF=0
    • JZ - Переход если нуль, ZF=1
    • JNZ - Переход если не нуль, ZF=0
    • JBE - Больше или равно, CF=1 или ZF=1 (беззнаковое)
    • JNBE - Меньше, CF=0 и ZF=0 (беззнаковое)
    • JS - Переход если знак, SF=1
    • JNS - Переход если нет знака, SF=0
    • JP - Переход если чётно, PF=1
    • JNP - Переход если не чётно, PF=0
    • JL - Меньше, SF != OF
    • JNL - Больше или равно, SF = OF
    • JLE - Меньше или равно, (ZF=1) или (SF != OF)
    • JG - Больше, (ZF=0) и (SF == OF)
    • SETO - Установить 1 если переполнение, OF=1
    • SETNO - Установить 1 если нет переполнения, OF=0
    • SETB - Установить 1 если перенос, CF=1
    • SETNB - Установить 1 если нет переноса, CF=0
    • SETZ - Установить 1 если нуль, ZF=1
    • SETNZ - Установить 1 если не нуль, ZF=0
    • SETBE - Больше или равно, CF=1 или ZF=1 (беззнаковое)
    • SETNBE - Меньше, CF=0 и ZF=0 (беззнаковое)
    • SETS - Установить 1 если знак, SF=1
    • SETNS - Установить 1 если нет знака, SF=0
    • SETP - Установить 1 если чётно, PF=1
    • SETNP - Установить 1 если не чётно, PF=0
    • SETL - Меньше, SF != OF
    • SETNL - Больше или равно, SF = OF
    • SETLE - Меньше или равно, (ZF=1) или (SF != OF)
    • SETG - Больше, (ZF=0) и (SF == OF)
    • LOOPNZ - Повторять пока CX != 0 и ZF=0
    • LOOPZ - Повторять пока CX != 0 и ZF=1
    • LOOP - Повторять пока CX != 0
    • JCXZ - Перейти если CX = 0
  • Перемещение
    • XCHG - Обмен значений операндов местами
    • MOV - Перемещение из операнда 2 в операнд 1
    • LEA - Помещение эффективного адреса в операнд 1
    • LES - Загрузка ES:Регистр из памяти
    • LDS - Загрузка DS:Регистр из памяти
    • LSS - Загрузка SS:Регистр из памяти
    • LFS - Загрузка FS:Регистр из памяти
    • LGS - Загрузка GS:Регистр из памяти
  • Строковые
    • MOVSx - Копировать DS:SI → ES:DI
    • CMPSx - Сравнить DS:SI → ES:DI
    • STOSx - Записать аккумулятор в ES:DI
    • LODSx - Загрузить из DS:SI в аккумулятор
    • SCASx - Сравнить ES:DI с аккумулятором
  • Процедуры. Переходы
    • CALLF - Дальний вызов процедуры
    • CALL - Ближний вызов процедуры
    • INT - Вызов прерывания (SoftInterrupt)
    • INTO - Прерывание переполнения, если OF=1
    • RET - Возврат из процедуры
    • RETF - Возврат из процедуры с аргументами
    • IRET - Возврат из прерывания
    • JMP - Ближний переход
    • JMPF - Дальний переход
  • Сдвиговые
    • ROL - Вращение битов влево
    • ROR - Вращение битов вправо
    • RCL - Сдвиг влево с учетом CF
    • RCR - Сдвиг вправо с учетом CF
    • SHL - Логический сдвиг влево
    • SHR - Логический сдвиг вправо
    • SAL - Арифметический влево
    • SAR - Арифметический вправо
    • SHLD - Двухоперандный сдвиг влево
    • SHRD - Двухоперандный сдвиг вправо
  • Преобразования
    • CBW - Знаковое расширение из байта в слово
    • CWDE - Знаковое расширение из слова в двойное слово
    • CWD - Знаковое расширение AX на DX
    • CDQ - Знаковое расширение EAX на EDX
    • SALC - Установка AL=FFh, если CF=1
    • XLAT - Трансляция AL из ES:(E)BX + AL
    • MOVZX - Беззнаковое расширение до 16/32 из 8/16
    • MOVSX - Знаковое расширение до 16/32 из 8/16
  • Работа с портами
    • IN - Чтение из порта
    • OUT - Запись в порт
    • INSx - Читать в ES:DI из порта
    • OUTSx - Записать из DS:SI в порт
  • Инкрементные
    • INC - +1 к операнду
    • DEC - -1 к операнду
  • Управление процессором
    • ARPL - Скорректировать RPL сегментного селектора
    • BOUND - Определить, что индекс лежит в необходимых пределах
    • FWAIT - Ожидание разгрузки FPU
    • HLT - Остановка процессора
    • INT1 - Генерация INT 1
    • INT3 - Генерация INT 3
    • LLDT - Загрузка значения LDT в LDTR
    • LTR - Загрузка Task Register
    • LMSW - Загрузка данных в CR0[3:0]
    • SMSW - Загрузка из CR0[15:0] в регистр
    • LAR - Загрузка поля Access Rights из дескриптора
    • LSL - Загрузка лимита дескриптора
    • LIDT - Установить новую IDT
    • LGDT - Установить новую GDT
    • MOVCRx - Перемещение в/из CRx
    • MOVDRx - Перемещение в/из DRx
    • RSM - Вернуться из System Management Mode (SMM)
    • SLDT - Сохранить текущий LDT
    • STR - Сохранить текущий TR
    • SGDT - Сохранить текущий GDT
    • SIDT - Сохранить текущий IDT
    • VERR - Проверить сегмент на возможность чтения
    • VERW - Проверить сегмент на запись