Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
21
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать

2.2.3. Команды логических операций и сдвигов

Команды этой группы приведены в табл. 2.18. Установка признаков по результатам их выполнения указана в табл. 2.17.

Логические операции конъюнкции (И), дизъюнкции (ИЛИ), неравнозначности (исклю­чающее ИЛИ) выполняются командами AND, OR, XOR побитно над значениями каждого из разрядов операндов. В этих командах реализуются такие же варианты адресации операн­дов, как и в арифметических командах ADD, SUB. При использовании в качестве операн­дов 16- или 32-разрядного содержимого регистра или ячейки памяти и 8-разрядного непос­редственного операнда im8 последний расширяется знаком до 16 или 32 разрядов. Коман­да NOT производит инвертирование значения каждого бита в адресуемом регистре или ячейке памяти. При этом значения признаков не изменяются.

Команда проверки TEST реализует побитную конъюнкцию операндов без изменения их значений и устанавливает соответствующие признаки в регистре EFLAGS (аналогично арифметической команде СМР).

Процессор выполняет несколько команд, реализующих сдвиги размещенного в регистре или памяти 8-, 16- или 32-разрядного операнда г/т на заданное число разрядов п. Значение п определяется содержимым регистра CL (переменная разрядность) или числом, заданным в виде непосредственного операнда im8 (фиксированная разрядность). Величина п задается пятью млад­шими разрядами содержимого CL или операнда im8 и может принимать значения от 0 до 31. Реализация различных команд сдвигов показана на рис. 2.14.

Команда SHL/SAL осуществляет сдвиг адресуемого операнда, размещенного в регистре или памяти, влево на заданное число разрядов; освобождающиеся младшие разряды запол­няются нулями. Команды SHR, SAR сдвигают адресуемый операнд вправо. При выполнении команды SHR освобождающиеся старшие разряды заполняются нулями. Команда SAR сохраняет знак операнда; для этого освобождающиеся слева разряды заполняются значе­ниями старшего (знакового) разряда. Выполнение команд циклических сдвигов ROL, ROR, RCR, RCL иллюстрируется на рис. 2.14.

Команды SHLD, SHRD используют два операнда, первый из которых г/т может храниться в регистре или памяти, второй г- в регистре. При выполнении команды SHLD первый операнд сдвигается влево на заданное число разрядов, а в его освободившиеся младшие разряды вводится соответствующее число старших разрядов второго операнда. При выполнении ко­манды SHRD первый операнд сдвигается вправо, а в освобождающиеся старшие разряды последовательно вводятся младшие разряды второго операнда. Копия второго операнда г сохраняется в соответствующем регистре в исходном состоянии (без сдвига).

Во всех видах сдвигов признак CF принимает значение последнего выдвигаемого бита (в командах SHLD, SHRD — последнего бита, выдвигаемого из первого операнда). При одноразрядных сдвигах (п = 1) устанавливается значение признака переполнения OF = 1, если изменилось значение знака (старший разряд). При многоразрядных сдвигах (п > 1) значение признака OF оказывается неопределенным. При выполнении команды SAR зна­чение знакового разряда не меняется, поэтому всегда устанавливается значение OF = 0.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]