|
Процессор х86: инструкция деления и операции расширения знакового бита.
Команда:
| IDIV источник
| Назначение:
| Целочисленное деление со знаком
| Процессор:
|
| Выполняет целочисленное деление со знаком AL, АХ или ЕАХ (в зависимости от размера источника) на источник (регистр или переменная) и помещает результат в AL, АХ или ЕАХ, а остаток — в АН, DX или EDX соответственно. Результат всегда округляется в сторону нуля, знак остатка всегда совпадает со знаком делимого, абсолютное значение остатка всегда меньше абсолютного значения делителя. Значения флагов CF, OF, SF, ZF, AF и PF после этой команды не определены, а переполнение или деление на ноль вызывает исключение #DE (ошибка при делении) в защищенном режиме и прерывание 0 — в реальном.
Команда:
| DIV источник
| Назначение:
| Целочисленное деление без знака
| Процессор:
|
| Выполняет целочисленное деление без знака AL, АХ или ЕАХ (в зависимости от размера источника) на источник (регистр или переменная) и помещает результат в AL, АХ или ЕАХ, а остаток — в АН, DX или EDX соответственно. Результат всегда округляется в сторону нуля, абсолютное значение остатка всегда меньше абсолютного значения делителя. Значения флагов CF, OF, SF, ZF, AF и PF после этой команды не определены, а переполнение или деление на ноль вызывает исключение #DE (ошибка при делении) в защищенном режиме и прерывание 0 — в реальном.
· Команда:
| CWD
| · Назначение:
| Конвертирование слова в двойное слово
| · Процессор:
|
| · Команда:
| CDQ
| · Назначение:
| Конвертирование двойного слова в учетверенное
| · Процессор:
|
| Команда CWD превращает слово в AХ в двойное слово, младшая половина которого (биты 0 – 15) остается в АХ, а старшая (биты 16 – 31) располагается в DX. Команда CDQ выполняет аналогичное действие по отношению к двойному слову в ЕАХ, расширяя его до учетверенного слова в EDX:EAX. Эти команды всего лишь устанавливают все биты регистра DX или EDX в значение, равное значению старшего бита регистра АХ или ЕАХ, сохраняя таким образом его знак.
· Команда:
| CBW
| · Назначение:
| Конвертирование байта в слово
| · Процессор:
|
| · Команда:
| CWDE
| · Назначение:
| Конвертирование слова в двойное слово
| · Процессор:
|
| CBW расширяет байт, находящийся в регистре AL, до слова в АХ, CWDE расширяет слово в АХ до двойного слова в ЕАХ. CWDE и CWD отличаются тем, что CWDE располагает свой результат в ЕАХ, в то время как CWD, команда, выполняющая точно такое же действие, располагает результат в паре регистров DX:AX. Так же как и команды CWD/CDQ, расширение выполняется путем установки каждого бита старшей половины результата равным старшему биту исходного байта или слова, то есть:
mov al,0F5h ; AL = 0F5h = 245 = -11
cbw ; теперь АХ = 0FFF5h = 65 525 = -11
| | Так же как и в случае с командами PUSHA/PUSHAD, пара команд CWD/CDQ — это одна команда с кодом 99h, и пара команд CBW/CWDE — одна команда с кодом 98h. Интерпретация этих команд зависит от того, в каком (16-битном или в 32-битном) сегменте они исполняются, и точно так же, если указать CDQ или CWDE в 16-битном сегменте, ассемблер поставит префикс изменения разрядности
|
Процессор х86: поразрядные логические инструкции, использование масок.
Не предназначены для оперций булевой логики, а для поразрядных логических операций. Инструкции применяются к каждому отдельному биту операнда.
Логические операции осуществляют поразрядное логическое сложение, умножение, сложение по модулю 2, а также поразрядную инверсию для одно-, двух- и четырехбайтовых операндов. И имеют мнемокоды or, and, xor и not соответственно. Операции логическое сложение, умножение, сложение по модулю 2 - двухоперандные, а операция инверсии – однооперандная. Данные операции необходимы в первую очередь не для выполнения операций булевой алгебры, а для работы с регистрами состояния и управления периферийных устройств. В процессе обмена данными с периферией приходится постоянно опрашивать регистры состояния и проверять состояние отдельных битов, указывающих на готовность к приему или подтверждение приема, а также устанавливать или сбрасывать отдельные биты в регистре управления, например для запроса на передачу и сопровождения данных. При этом важно проверить состояние строго определенного бита, независимо от состояния других, а также установить или сбросить строго определенный бит, не изменяя состояние других битов. Для этих целей совместно с логическими операциями используются маски. Маска – это константа, позволяющая работать только с заданными битами. Остальные биты при этом невидимы, т.е. «замаскированы».
Логические операции
Команда:
| AND приемник, источник
| Назначение:
| Логическое И
| Процессор:
|
| Команда выполняет побитовое «логическое И» над приемником (регистр или переменная) и источником (число, регистр или переменная; источник и приемник не могут быть переменными одновременно) и помещает результат в приемник. Любой бит результата равен 1, только если соответствующие биты обоих операндов были равны 1, и равен 0 в остальных случаях. Наиболее часто AND применяют для выборочного обнуления отдельных бит, например, команда
and al,00001111b
обнулит старшие четыре бита регистра AL, сохранив неизменными четыре младших.
Флаги OF и CF обнуляются, SF, ZF и PF устанавливаются в соответствии с результатом, AF не определен.
Команда:
| OR приемник, источник
| Назначение:
| Логическое ИЛИ
| Процессор:
|
| Выполняет побитовое «логическое ИЛИ» над приемником (регистр или переменная) и источником (число, регистр или переменная; источник и приемник не могут быть переменными одновременно) и помещает результат в приемник. Любой бит результата равен 0, только если соответствующие биты обоих операндов были равны 0, и равен 1 в остальных случаях. Команду OR чаще всего используют для выборочной установки отдельных бит, например, команда
or al,00001111b
приведет к тому, что младшие четыре бита регистра AL будут установлены в 1. Устанавливает строго определенные биты, не затрагивая другие.
При выполнении команды OR флаги OF и CF обнуляются, SF, ZF и PF устанавливаются в соответствии с результатом, AF не определен.
Команда:
| XOR приемник, источник
| Назначение:
| Логическое исключающее ИЛИ
| Процессор:
|
| Выполняет побитовое «логическое исключающее ИЛИ» над приемником (регистр или переменная) и источником (число, регистр или переменная; источник и приемник не могут быть переменными одновременно) и помещает результат в приемник. Любой бит результата равен 1, если соответствующие биты операндов различны, и нулю, если одинаковы. XOR используется для самых разных операций, например:
xor ах,ах ; обнуление регистра АХ
или
xor ах,bх
xor bх,ах
xor ах,bх ; меняет местами содержимое АХ и ВХ
Оба этих примера могут выполняться быстрее, чем соответствующие очевидные команды
mov ax,0
или
xchg ax,bx
Команда:
| NOT приемник
| Назначение:
| Поразрядная Инверсия
| Процессор:
|
| Каждый бит приемника (регистр или переменная), равный нулю, устанавливается в 1, и каждый бит, равный 1, сбрасывается в 0. Флаги не затрагиваются. Необходим для работы с масками, а не для вычисления истинности.
Команда:
| TEST приемник, источник
| Назначение:
| Логическое сравнение
| Процессор:
|
| Вычисляет результат действия побитового «логического И» над приемником (регистр или переменная) и источником (число, регистр или переменная; источник и приемник не могут быть переменными одновременно) и устанавливает флаги SF, ZF и PF в соответствии с полученным результатом, не сохраняя результат (флаги OF и CF обнуляются, значение AF не определено). TEST, так же как и СМР, используется в основном в сочетании с командами условного перехода (Jcc), условной пересылки данных (CMOVcc) и условной установки байт (SETcc).
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|