XCHG операнд1, операнд2 обмен значений операндов 8086
Обмен значений операндов. Операцию можно выполнять над парой регистров общего назначения или над регистром общего назначения и памятью.
BSWAP 32-разрядный регистр обмен байтов внутри регистра 80486
Обращает байты внутри регистра. Биты 0-7 меняются местами с битами 24-31, а биты 8-15 — с битами 16-23. Например, если в регистре EAX находится число 12345678H, то после выполнения команды
BSWAP EAX
в том же регистре будет находиться число 78563412H.
В процессорах Intel данную команду
можно применять и для 16-разрядных регистров, но в некоторых совместимых
процессорах других фирм такой вариант не реализован. Для обращения байт в
16-разрядном регистре следует использовать команду XCHG
.
Например,
XCHG AH, AL
PUSH источник поместить данные в стек 8086
Помещает содержимое источника в стек.
Источником может быть:
— непосредственный операнд;
— регистр, в том числе сегментный;
— память.
С точки зрения программиста, команда уменьшает значение регистра ESP на размер источника и копирует содержимое источника по адресу SS:[ESP] в защищённом режиме или SS:[SP] — в режиме реальной адресации.
Начиная с процессора 80286 команды
PUSH SP
и
PUSH ESP
помещают в cтек значение регистра SP или ESP до того, как они же уменьшат его значение, а процессор 8086 записывает в стек значение регистра SP, уже уменьшенное на два.
POP приёмник извлечь данные из стека 8086
Помещает значение из стека в приёмник.
Приёмником может быть:
— регистр общего назначения;
— сегментный регистр, кроме CS;
— память.
Если в качестве приёмника выступает операнд, использующий ESP для косвенной адресации, команда POP
вычисляет адрес операнда уже после увеличения ESP.
Примечания
1.
Чтобы загрузить CS из стека, нужно
воспользоваться командой RET
.
2. Чтобы скопировать содержимое одного сегментного регистра в другой, например, CS в DS, можно воспользоваться следующей парой команд:
PUSH CS
POP DS
PUSHA поместить в стек 16-разрядные регистры общ. назначения 80186
PUSHAD поместить в стек 32-разрядные регистры общ. назначения 80386
Команда PUSHA
помещает
в стек регистры в следующем порядке: AX, CX, DX, BX, SP, BP, SI, DI. PUSHAD
помещает в
том же порядке соответственные 32-разрядные регистры. В стек помещается
содержимое регистра SP или ESP, которое находилось в них до начала работы команды.
Примечание. PUSHA
и PUSHAD
— две
мнемоники одной и той же команды с кодом 60H. Её
интерпретация определяется тем, выполняется ли она в 16-разрядном или в
32-разрядном режиме. Если команда PUSHAD
используется в 16-разрядном режиме или PUSHA
— в 32-разрядном, ассемблер записывает перед ней префикс изменения размерности
операнда с кодом 66H. То же самое верно для
нижеследующей пары команд.
POPA загрузить из стека 16-разрядные регистры общ. назначения 80186
POPAD загрузить из стека 32-разрядные регистры общ. назначения 80386
Команды выполняют действия, обратные командам PUSHA
и PUSHAD
с точностью до помещённого в стек значения
регистра SP или ESP, которое игнорируется. POPA
загружает из стека значения DI, SI,
BP, увеличивает значение регистра SP на два, загружает BX, DX, CX, AX. POPAD
выполняет те же операции с соответственными
32-разрядными регистрами, увеличивая ESP не на два, а
на четыре.
Примечание. Пара команд PUSHA
/POPA
или PUSHAD
/POPAD
часто используется в процедурах, которые не должны изменять
значения регистров по окончанию своей работы. В первую очередь, это относится к
обработчикам прерываний. В начале процедуры используют команду PUSHA
или PUSHAD
,
а в конце POPA
или, соответственно, POPAD
.
IN приёмник, источник считать данные из порта 8086
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.