Фантазии о Вселенной и мой личный сайт
Процессор 8086

Процессор 8086

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

  • Общие понятия о процессоре
  • Байт ModRM
  • Набор инструкции процессора x86
    • Арифметические инструкции
      • 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 - Проверить сегмент на запись