Prezent55

advertisement
Команды сдвигов
Команды сдвигов и циклических сдвигов перемещают все биты операнда влево или вправо на указанное число,
определяемое вторым операндом.
Формат:
Мнемоника ор1, CNT
, где CNT - либо 1, либо CL, либо 8- битная константа.
Команды сдвигов воздействуют на все флажки ( кроме AF ), а команды циклического сдвига влияют только на
CF и OF. Во всех командах флажок OF содержит полезную информацию: если сдвиг производится на один разряд,
то он устанавливается по правилу: если два старших бита операнда равны, OF = 0, в противном случае OF = 1, т.е.
изменяется знаковый разряд операнда. Во всех командах CF содержит последний выдвинутый разряд.
Мнемоника
Описание
SHL
Сдвиг влево логический, последний выдвинутый разряд сохраняется в CF
SAL
Сдвиг влево арифметический ( аналогично SHL )
SHR
Сдвиг вправо логический
SAR
Сдвиг вправо арифметический, знаковый разряд не меняется
ROL
Сдвиг циклический влево
RCL
Сдвиг циклический влево через перенос ( CF )
RОR
Сдвиг циклический вправо
RCR
Сдвиг циклический вправо через CF
Пример: Подсчитать количество единиц в слове АМР.
……………
MOV AX, AMP
XOR BX, BX
MOV CX, 16
M1: SHL AX, 1 ; СДВИГ
JNC M2
INC BX
M2: LOOP M1
CLC
Команды сдвига двойного слова
SHLD op1, reg2, CNT
; op1 – регистр или память 16/32 бита
Сдвиг двойного слова влево. Содержимое ор1 и регистра объединяются в рабочем регистре двойной длины и
сдвигаются влево на CNT бит. После сдвига в ор1 помещаются соответствующие биты рабочего регистра.
Содержимое reg2 не изменяется.
SHRD op1, reg2, CNT
; op1 – регистр или память 16/32 бита
Сдвиг двойного слова вправо. Содержимое регистра и ор1 объединяются в рабочем регистре двойной длины,
причем ор1 в младших байтах, а reg2 – в старших. После сдвига в ор1 помещаются соответствующие биты рабочего
регистра. Содержимое reg2 не изменяется.
Пример: Пусть в ах хранится 0123H, bx – FFFFh
SHLD AX, BX, 4 ; AX = 123Fh, BX = FFFFh
SHRD AX, BX, 4 ; AX = F012h, BX = FFFFh
Вывод на экран (текстовый режим). Функции 21h прерывания DOS .
02h  AH
; Вывод на экран в текущую позицию курсора символа, код которого в ASCII находится в
регистре DL.
Возвращает в AL код последнего выведенного символа.
Функция обрабатывает при выводе и управляющие символы:
BEL ( 07h ) - звуковой сигнал;
BS ( 08h ) - возврат влево на 1 позицию курсора;
LF ( 0Ah ) - перевод курсора на следующую строку ( вниз на позицию );
CR ( 0Dh ) - перевод курсора на начало текущей строки.
При нажатии при работе этой функции клавиш Ctrl + Break вызывает прерывание 23h, осуществляющее
выход из программы.
Пример:
MOV DL, ‘$’
MOV AH , 02h
INT 21h
; Вывод в текущую позицию курсора символа $
09h  AH ; Вывод строки на экран.
DS:DX  указатель к началу символьной строки, которая должна заканчиваться ‘$’.
Пример:
str db ‘Exempl string’, 10,13.’$’
mov dx, offset str
mov ah, 09h
int 21h
Функции ввода с клавиатуры прерывания 21Н
01H  AH ; Ввод с клавиатуры с эхом. Функция ожидает ввод с клавиатуры. Если
получен символ ASCII, он записывается в AL. Если AL содержит 00H, то получен
расширенный ASCII код, второй байт которого будет прочитан при следующем выполнении
функции (Home, Ins, Alt +(A-Z) и т. п). При выполнении функции проверяется наличие Ctrl
+ Break.
06H  AH ; Прямой ввод-вывод на консоль.(Общее для клавиатуры и экрана имя).
DL  FFh для ввода с клавиатуры;
DL  00h – FEh для вывода на экран символа ASCII из DL.
Если DL =FFh выполняется ввод и AL готов принять символ. Если ZF=1 , нет входного
символа и значение AL несущественно. Если ZF = 0 , имеется символ и он записывается в
AL.
Функция не ожидает появления символа, читает без эхо и не проверяет Ctrl + Break.
07h  AH ; Прямой ввод с клавиатуры без эхо.
Аналогична 01h, но читает без эхо и не проверяет Ctrl + Break.
08h  AH ; Ввод с клавиатуры без эхо.
Аналогична 01h, но читает без эхо. Символ в AL.
Download