- •Тема 4 Программная модель микропроцессоров архитектуры ia-32
- •1. Особенности архитектуры ia-32
- •2. Структура микропроцессоров ia-32
- •3. Регистры
- •4. Формат команды микропроцессора ia-32
- •5. Типы данных
- •6. Пространство памяти
- •7. Режимы адресации
- •8. Система команд
- •8.1. Инструкции пересылки данных
- •8.2. Инструкции двоичной арифметики
- •8.3. Инструкции десятичной арифметики
- •8.4. Инструкции логических операций
- •8.5. Инструкции сдвигов
- •8.6. Инструкции обработки бит и байт
- •8.7. Инструкции передачи управления
- •8.8. Инструкции строковых операций
- •8.9. Инструкции работы с флагами
- •8.10. Инструкции загрузки указателей
- •8.11. Разные инструкции
8.6. Инструкции обработки бит и байт
Инструкции позволяют проверять (копировать в CF) и устанавливать значение указанного операнда, а также искать установленный бит. Битовые операции выполняются над 16– или 32–битным словом памяти или регистром. Инструкции BSF, BSR и BT не изменяют значения слова; BCT, BTR и BTS воздействуют на указанный бит слова r/m. Операции с байтами обеспечивают условную установку значений 00h или 01h. Инструкции приведены в таблице 8.7.
Таблица 8.7
Команда |
Описание |
BSF reg, reg/mem |
Сканирование бит вперед. В reg загружается индекс (беззнаковое смещение относительно бита 0) самого младшего единичного бита reg/mem. Если в reg/mem только нули, устанавливается ZF |
BSR reg, reg/mem |
Сканирование бит назад. В reg загружается индекс (беззнаковое смещение относительно бита 0) самого старшего единичного бита reg/mem. Если в reg/mem только нули, устанавливается ZF |
BT reg/mem, i8 ~ reg/mem, reg |
Тестирование бита – загрузка в CF бита с номером i8 или reg (по модулю 16 или 32) из reg/mem |
BTC reg/mem, i8 ~ reg/mem, reg |
Тестирование и изменение значения бита |
BTR reg/mem, i8 ~ reg/mem, reg |
Тестирование и сброс бита |
BTS reg/mem, i8 ~ reg/mem, reg |
Тестирование и установка бита |
SALC |
Установка AL = FFh, если CF = 1, иначе AL = 00h |
SETA/SETNBE r/m8 |
Установка байта в 01h, если выше (CF = ZF = 0), иначе в 00h (P6+) |
SETAE/SETNB/SETNC r/m8 |
Установка байта в 01h, если не ниже (CF = 0), иначе в 00h (P6+) |
SETB/SETNAE/SETC r/m8 |
Установка байта в 01h, если ниже (CF = 1), иначе в 00h (P6+) |
SETBE/SETNA r/m8 |
Установка байта в 01h, если не выше (CF ИЛИ ZF = 1), иначе в 00h (P6+) |
SETE/SETZ r/m8 |
Установка байта в 01h, если равно (ZF = 1), иначе в 00h (P6+) |
SETG/SETNLE r/m8 |
Установка байта в 01h, если больше (SF = OF И ZF), иначе в 00h (P6+) |
SETGE/SETNL r/m8 |
Установка байта в 01h, если больше или равно (SF = OF), иначе в 00h (P6+) |
SETL/SETNGE r/m8 |
Установка байта в 01h, если меньше (ZF != OF), иначе в 00h (P6+) |
SETLE/SETNG r/m8 |
Установка байта в 01h, если меньше или равно (SF != OF или ZF = 0), иначе в 00h (P6+) |
SETNE/SETNZ r/m8 |
Установка байта в 01h, если не равно (ZF = 0), иначе в 00h (P6+) |
SETNO r/m8 |
Установка байта в 01h, если нет переполнения (OF = 0), иначе в 00h (P6+) |
SETNS r/m8 |
Установка байта в 01h, если неотрицательно (SF = 0), иначе в 00h (P6+) |
SETO r/m8 |
Установка байта в 01h, если переполнение (OF = 1), иначе в 00h (P6+) |
SETPE/SETP r/m8 |
Установка байта в 01h, если паритет (четность) (PF = 1), иначе в 00h (P6+) |
SETPO/SETNP r/m8 |
Установка байта в 01h, если нет паритета (нечетность) (PF = 0), иначе в 00h (P6+) |
SETS r/m8 |
Установка байта в 01h, если отрицательно (SF = 1), иначе в 00h (P6+) |
SETC r/m8 |
Установка байта в 01h, если перенос (CF = 1), иначе в 00h (P6+) |
SETNC r/m8 |
Установка байта в 01h, если нет переноса (CF = 0), иначе в 00h (P6+) |
TEST r/m, i ~ r/m, r |
Проверка бит (логическое И без записи результата, установка флагов) |