Циклический сдвиг вправо (rotate right): ROR op,1
Примеры:
MOV CL,11000011b
ROL CL,1; CF=1; BH=10000111b
MOV BH,11100010b
ROR BH,1; BH=01110001b; CF=0
Например, поменять местами правую и левую половины регистра AL можно циклическим сдвигом этого байта на 4 разряда влево (или вправо):
MOV AL,17h; AL=00010111b
MOV CL,4
ROL AL,CL; AL=01110001b=71h
Циклический сдвиг влево через перенос (rotate left through carry):
RCL op,1
Циклический сдвиг вправо через перенос (rotate right through carry):
RCR op,1
Примеры:
MOV ВL,11110000b; пусть CF=0
RСL ВL,1; CF=1; ВL=11100000b
RСL ВL,1; CF=1; ВL=11000001b
Стек и сегмент стека
Стек – это область оперативной памяти, доступ к которой осуществляется по принципу LIFO (Last In First Out (последним зашел – первым вышел) – элемент, записанный в стек последним, считывается из него первым).
Для стека можно отвести любую область памяти, однако ее размер не должен превышать 64 Кб и ее начальный адрес должен быть кратным 16. Эту область называют сегментом стека (рис. 1).
Рис. 1. Сегмент стека
Описание сегмента стека в программе на языке ассемблера:
|
|
S SEGMENT STACK
DB k DUP (?)
S ENDS
Стековые команды
Запись и чтение слов