Флаги: OF, SF, ZF, AF, PF, CF — КиберПедия 

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Флаги: OF, SF, ZF, AF, PF, CF

2017-11-17 505
Флаги: OF, SF, ZF, AF, PF, CF 0.00 из 5.00 0 оценок
Заказать работу

16-ричный код (1 байт) MOD Reg/OPC Reg/Mem (2-ой байт) смещение disp_Lo, disp_Hi формат операндов: приемник, источник
F6 MOD 010 Reg/Mem Disp_Lo, Disp_Hi Reg8/Mem8
F7 MOD 010 Reg/Mem Disp_Lo, Disp_Hi Reg16/Mem16

010 - расширение кода операции при работе с непосредственным операндом, размещается в поле Reg/Opc в байте адресации.

 

Например, MOV AX, 0FFFFh

NOT AX; AX=0000h

 

MOV DI, 5551h

NOT DI; DI=AAAEh

 

Например, дополнение до 1 числа F0h будет равняться 0Fh

Mov al, 11110000b

not al; AL = 00001111b

 

  1. Команда NEG операнд

инвертирует знак числа, преобразовывая число в его дополнение до двух. Следующие операнды разрешены:

NEG регистр

NEG память

Подсчет дополнения до двух от числа может быть выполнен путем инверсии всех его битов и суммированием с единицей. После выполнения команды NEG проверьте флаг переполнения OF для определения правильности результата. Например, если поместить в регистр AL отрицательное число -128d, то в результате операции получим -128d (неправильный результат) и OF = 1:

  • mov al, -128; AL = 1000 0000b
  • neg al; AL = 1000 0000b, OF=1

 

С другой стороны, если инвертировать +127, то результат правильный и OF=0:

  • mov al, +127; AL = 0111 1111b
  • neg al; AL = 1000 0001b, OF=0

 

Операторы AND, OR, NOT и XOR выполняют поразрядные операции целых чисел во время трансляции. Операнд может быть целой константой или символом. Например, допустимы следующие выражения:

X = 1101101b

Y = X AND 00001111b

Z = X OR 11110000b

Q = NOT Z

W = Y XOR 0FFFFh

6. В следующем примере значение 0000 1111 является битовой маской:

Mov al, 00111011b

and al, 00001111b; AL = 00001011b

ПРИМЕР задания

1) Определить, является ли целое число степенью 2.

Можно показать, что если ((x — 1) AND x)=0, то х является степенью 2. Двоичные представления числа х, являющегося степенью 2, и соответствующего х-1 приведены на рис.1.18.

 

Двоичное x Десятичное x
   
   
   
   

 

Двоичное x-1 Десятичное x-1
   
   
   
   

Рис. 1.18 Двоичные и десятичные представления чисел

Легко видеть, что для таких х операция AND для х и х-1 дает в результате 0:

 

 

AND  
 
   

 

Теперь напишем фрагмент программы, который определяет, является ли число x степенью 2.

.........

x dd?

........

mov eax,x

dec eax

mov ebx,x

and ebx,eax

jz Power_of_Two

..............

Power_of_Two:

...............

2) Выровнять адрес (число) на границу, кратную 2m, с округлением к младшим адресам.

Предлагается следующее преобразование:

x  x AND NOT (2m -1)

Действительно, число 2m –1 в двоичном представлении — это m единиц (см. предыдущее задание).

Значит, NOT (2m –1) — это m нулей в младших разрядах, а в остальных (старших) разрядах — единицы.

Далее, если мы производим операцию AND для х с числом, у которого в младших разрядах m нулей, а в старших — 1, то это значит, что мы обнуляем младшие m разрядов. А это и есть выравнивание на границу, кратную 2^m.

Например,

x=1010111011110011 — двоичное число.

Пусть необходимо выровнять это число на границу, кратную 24, то есть до 3его двоичного разряда включительно.

m=4

2m-1 = 24-1 = 0000000000001111

NOT (24-1) = 1111111111110000

Теперь:

AND  
 
   

Напишем такой фрагмент программы для выравнивания адреса, записанного в переменной х длиной в слово, на границу параграфа с округлением к младшим адресам. Вспомним, что длина параграфа равна 16, то есть 24.

.........

x dw?

........

mov ax,x

and ax,not(16-1)

..................

Получаем в ax число, округленное на границу параграфа с округлением к младшим адресам.

Обратите внимание на команду AND, а в ее операнде — операцию NOT.

3) Выравнивание адреса на границу, кратную 2m, с округлением к старшим адресам.

Предлагается следующее преобразование:

x  (x +(2m-1) AND NOT (2m-1))

Это аналогично предыдущему, только предварительно к х прибавляется число с единицами в младших m разрядах, чтобы увеличить m+1-ый разряд на 1.

Соответствующий фрагмент программы для выравнивания на границу параграфа с округлением к старшим адресам выглядит следующим образом:

........

x dw?

........

mov ax,x

add ax,(16-1)

and ax,not(16-1)

................

 

Команды сдвига

При сдвиге биты операнда передвигаются влево или вправо в зависимости от команды.

Существуют три типа команд сдвига:

q Логический сдвиг — все биты операнда равноправны, выдвигаемые за пределы операнда биты пропадают, а последний заносится во флаг CF.

q Арифметический сдвиг — аналогичен логическому, но знаковый бит имеет особый статус.

q Циклический сдвиг — все биты равноправны, выдвигаемые из операнда биты не теряются, а вдвигаются с другой стороны.

1) SHL операнд, значение — логический сдвиг операнда влево (рис.1.19)


Поделиться с друзьями:

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.015 с.