Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Лекция № 4 Способы адресации данных Структура программы на языке Ассемблер.ppt
Скачиваний:
7
Добавлен:
07.08.2024
Размер:
1.91 Mб
Скачать

Расширение системы команд в процессоре 80386

Расширение системы команд в процессоре 80386

mov bx, 00010110b

 

 

 

bsf cx, bx

; cx

=

1

bsr cx, bx

; cx

=

4

bt dest, src

(Bit Test — проверка бита)

Копирует бит приемника, номер которого указан в источнике, в флаг переноса cf. Каждый из операндов может быть 16- или 32-разрядным регистром; второй операнд может задаваться непосредственным значением. Приемник может быть 16- или 32- разрядной ячейкой памяти, а источник непосредственным значением.

btс dest, src

(Bit Test and Complement — проверка бита с инверсией)

То же самое, что bt, но только бит приемника после копирования в флаг переноса cf меняет значение на противоположное.

Расширение системы команд в процессоре 80386

btr dest, src

(Bit Test and Reset — проверка бита с его сбросом в 0)

То же самое, что bt, но только бит приемника после копирования в флаг переноса cf сбрасывается в 0.

bts dest, src

(Bit Test and Set — проверка бита с его установкой в 1)

То же самое, что bt, но только бит приемника после копирования в флаг переноса cf устанавливается в 1.

mov

dx,01010011b

bt

dx,4

;проверка состояния бита 4 и установка cf в 1

jc

m1

;перейти на m1, если проверяемый бит равен 1

2. Команды конвертирования данных

В дополнение к cbw и cwd можно использовать:

Расширение системы команд в процессоре 80386

cdq

(Convert Double word to Quad word — преобразование двойного слова в учетверенное слово),

для того чтобы конвертировать 32-битовое двойное слово со знаком в eax в 64-битовое четверное слово со знаком в паре регистров edx:eax путем копирования значения старшего бита регистра eax на все биты регистра edx

и

cwde

(Convert Word to Double Word Extended — преобразование слова в двойное слово)

для конвертации слова со знаком в ax в двойное слово со знаком в расширенный аккумулятор еах путем копирования значения старшего бита регистра ax на все биты старшего слова регистра еах.

Эти команды не влияют на флаги.

Расширение системы команд в процессоре 80386

mov

eax,delimoe

 

cdq

 

 

idiv

delitel

;частное в eax, остаток в edx

movsx dest, src

(MOVe and Sign eXtension — пересылка со знаковым расширением) преобразует элемент со знаком меньшей размерности в эквивалентный ему элементы со знаком большей размерности путем распространения значения знакового разряда источника на свободные старшие разряды приемника.

movzx dest, src

(MOVe and Zero eXtension — пересылка с нулевым расширением) то же самое, что и movsx, но для чисел без знака. При этом двоичный нуль распространяется на свободные старшие разряды приемника.

Эти команды также не влияют на флаги.

Расширение системы команд в процессоре 80386

Для обеих команд первый операнд должен быть 16- или 32- битовым расширенным регистром. Второй операнд может быть 8- либо 16-битовым регистром или указателем на память.

mov

al,

0ffh

 

movsx

bx,

al

;bx=0ffffh

3. Команды для загрузки сегментных регистров Позволяют получить логический адрес в виде сегментной

составляющей и смещения.

lfs dest, src

(Load pointer into fs segment register — загрузка сегментного регистра fs указателем из памяти)

Алгоритм работы команды зависит от действующего режима адресации (16- или 32-разрядной):

Расширение системы команд в процессоре 80386

если 16-разрядный, то первые два байта из ячейки памяти источника загружаются в 16-разрядный регистр, указанный операндом приемник. Следующие два байта источника загружаются в регистр fs;

если 32-разрядный, то первые четыре байта из ячейки памяти источника заргужаются в 32-разрядный регистр, указанный операндом приемник. Следующие два байта источника загружаются в регистр fs.

lgs dest, src

(Load pointer into gs segment register — загрузка сегментного регистра gs указателем из памяти)

То же самое, что lfs, только загружается сегментный регистр gs.

Расширение системы команд в процессоре 80386

lss dest, src

(Load pointer into ss segment register — загрузка сегментного регистра ss указателем из памяти)

То же самое, что lfs, только загружается сегментный регистр ss.

Все команды не влияют на флаги.

Третья команда — lss позволяет, как частный случай, инициализировать одновременно ss и sp.

Одним из способов применения lss является подхватывание адреса альтернативного стека, как де­ монстрирует пример.

Расширение системы команд в процессоре 80386

mov oldss, ss

; Сохранение старого стекового сегмента

mov oldsp, sp

; и старого указателя стека

lss sp, newstack

; Загрузка ss:sp

новыми значениями

.

 

 

.

 

 

.

 

 

mov sp, oldsp

; Восстановление

sp

mov ss, oldss

; Восстановление

ss

4. Команды для работы со стеком pushad

(PUSH All general Double word registers onto stack — размещение всех регистров общего назначения в стеке)

Размещает в стеке регистры общего назначения в следующей последовательности: eax, ecx, edx, ebx, esp, ebp, esi, edi. Величина сохраненного esp равна величине­ указателя стека до выполнения

pushad.

Расширение системы команд в процессоре 80386

popad

(POP All general Double word registers from the stack — извлечение всех регистров общего назначения из стека)

Извлекает из стека регистры общего назначения в следующей последовательности: edi, esi, ebp, esp, ebx, edx, ecx, eax. Регистр esp по-прежнему восстанавливается тем же значением, которое он имел до pushad.

Команды не влияют на флаги. pushfd

(PUSH eFlags Double word register onto stack — размещение расширенного регистра флагов в стеке)

Размещает в стеке содержимое регистра флагов eflags.