Иллюстрированный самоучитель по Assembler


PUSH Занесение операнда в стек - часть 2


Пример


pusha

386+ PUSHAD Сохранение в стеке всех регистров в 32-разрядном режиме


Команда pushad сохраняет в стеке содержимое всех регистров в следующем порядке: EAX, ECX, EDX, ЕВХ, значение указателя стека ESP перед выполнением данной команды, далее EBP, ESI и EDI. Команда не имеет параметров и не воздействует на флаги процессора.

Пример


pushad

386+ PUSHFD Занесение в стек содержимого расширенного регистра флагов


Команда pushfd уменьшает на 4 содержимое указателя стека ESP и заносит на эту новую вершину содержимое расширенного регистра флагов EFALGS. При этом сохраняются все флаги процессора. Команда pushfd не имеет параметров и не воздействует на флаги процессора.

Пример


pushfd ;Содержимое регистра флагов

;сохраняется в стеке

RCL Циклический сдвиг влево через бит переноса


Команда гсl осуществляет сдвиг влево всех битов операнда. Если команда записана в формате

rcl операнд,1

сдвиг осуществляется на 1 бит. В младший бит операнда заносится значение флага CF; старший бит операнда загружается в CF. Если команда записана в формате

rcl операнд,CL

сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда поступают сначала в CF, а оттуда - в младшие биты операнда (рис. П4).

Рис. П4. Действие команды rcl.

В качестве операнда команды rcl можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги OF и CF.

Пример 1


clc ;Сбросим CF

mov AX, 7

rcl АХ,1 ' ;AX=000Eh=14, CF=0

Пример 2


stc ;Установим CF

mov DL,7

rcl DL,1 ;DL=0Fh=15, CF=0

Пример 3


clc ;Сбросим CF

mov BX,0FFFFh

rcl BX,1 ' ;BX=FFFEh, CF=1

Пример 4


clc ;Сбросим CF

mov DH,3

mov CL,4 ;Счетчик сдвигов

rcl DH,CL ;DH=30h=48, CF=0

Допустим сдвиг 32-битовых операндов. Допустимо указание числа битов сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит.

Пример


mov EAX,0С0000003h

clc ;Сбросим CF

rcl EAX,2 ;EAX=0000000Dh, CF=1

 




Начало  Назад  Вперед



Книжный магазин