double arrow

Логические операции. Ассемблер поддерживает полный набор инструкций, которые производят логические операции, включая END

Ассемблер поддерживает полный набор инструкций, которые производят логические операции, включая END, OR, XOR и NOT. Эти инструкции полезны для манипуляции отдельными битами внутри байта или слова и для реализации булевской алгебры.

С двумя исходными битами логическая инструкция генерирует результат, показанный в таблице . Логические инструкции производят эти побитовые операции над соответствующими битами операндов источника. Например,

AND AX,DX

производит логический AND с битом 0 AX и с битом 0 в DX, как с битами источника, и битом 0 в AX, как битом назначения. И то же самое, с битами 1,2 и т.д. до 15 бита.

Логические операции Табл.4

 
 


Исходный бит А Исходный бит В A AND B A OR B A XOR B

0 0 0 0 0

0 1 0 1 1

1 0 0 1 1

1 1 1 1 0

Инструкция AND обрабатывает два операнда в соответствии с правилами, показанными в табл. . , устанавливая каждый бит в назначении в 1 только тогда, когда соответствующие биты источников - 1. AND позволяет Вам выделить указанный бит или установить указанные биты в 0. Например,

...

MOV DX,3dAH

IN AL,DX

AND AL,1

...

выделяет бит 0 из байта статуса цветного графического адаптера (CGA). Этот код устанавливает AL в 1, если видеопамять на CGA может быть обновлена без снега и устанавливает в 0, в противном случае.

Инструкция OR обрабатывает 2 операнда в соответствии с правилами, показанными в табл.4.2 устанавливая каждый бит в назначении в 1 если хотя бы 1 соответствующий исходный бит установлен в 1. OR позволяет Вам устанавливать исходный бит(ы) в 1.

Например,

...

MOV AX,40h

MOV ds,AX

MOV bx,10h

OR WORD PTR [bx],0030h

...

устанавливает 4-й и 5-й биты слова, флага аппаратуры BIOS, в 1, заставляя BIOS поддерживать монохромный дисплейный адаптер.

Инструкция XOR обрабатыват 2 операнда в соответствии с правилами, приведенными в табл.4, устанавливая каждый бит назначения в 1, только если 1 из соответствующих битов источника был 0, а другой 1. Например,

...

MOV AL,01010101b

XOR AL,11110000b

...

устанавливает AL в 10100101b или A5h. Главное здесь то, что когда выполняется "исключающее или" AL с 11110000b или 0F0h, единичные биты 0F0h переключают значения соответствующих битов, в то время как нулевые биты в 0F0h оставляют соответствующие биты в AL неизменными. В результате этого, все биты в старшей половине AL изменяются, а биты в младшей половине AL остаются неизменными. Поэтому XOR, удобный способ обнулить регистр. Например, этот код установит AX в 0:

XOR AX,AX

NOT переключает каждый бит операнда в противоположное состояние, как, если бы была выполнена XOR с операндом источника 0FFh. Например,

...

MOV bl,10110001b

NOT bl ;переключает BL в 01001110b

XOR bl,0fffh ;возвращает BL в 10110001b

...


Сейчас читают про: