Логічні операції
Турбо Асемблер підтримує повний набір інструкцій для виконання логічних операцій, включно інструкцій для виконання логічних операцій, включно інструкції AND (і), OR (чи), XOR (виключне чи) та NOT (ні). Ці інструкції можуть виявитися дуже корисними при роботі з окремими бітами слова чи байта, а також для виконування операцій булевої алгебри. Результати виконання логічних операцій показані у таблиці. Логічна інструкція виконує порозрядні операції над бітами вихідних операндів. Наприклад, інструкція:
and ax,dx
виконує логічну операцію AND з бітом 0 регістра AX ті бітом 0 регістра DX, потім ту ж саму операцію з бітами 1, 2 і т.п. до біта 15.
Виконання логічних інструкцій процесора 8086 AND, OR та XOR наведено в табл. 3.1
Таблиця 3.1 – Виконання логічних інструкцій процесора 8086 AND, OR та XOR
Інструкція AND комбінує два операнди у відповідності з правилами, які показані у таблиці, встановлює кожний біт результату (операнда-приймача) в 1 тільки у тому випадку, якщо обидва біта операнда-джерела дорівнюють 1. Інструкція AND дозволяє нам виділити окремий біт чи примусово встановити його у значення 0. Наприклад, інструкції:
mov dx,3dah in al,dx and al,1
виділяють біт 0 байта стану кольорового графічного адаптеру (CGA). Ці інструкції залишають регістр AL встановлений у значення 1, якщо відеопам’ять адаптера CGA можна змінити, не викликаючи перешкод на екрані (“сніг”), та встановлює його у нульове значення у противному разі. Інструкція OR теж комбінує два операнди у відповідності з правилами, які приведені у таблиці, встановлює кожний біт операнда-приймача у значення 1, якщо будь-який з відповідних бітів операнда-джерела дорівнює 1. Інструкція OR дозволяє вам примусово встановити окремі біти у значення 1. Наприклад, інструкції: mov ax,40h mov ds,ax mov bx,10h or WORD PTR [bx],0030h
встановлює біти 5 та 4 слова флагів апаратури базової системи вводу-виводу BIOS у значення 1. При цьому BIOS буде підтримувати монохромний дисплейний адаптер. Інструкція XOR також комбінує два операнди у відповідності з правилами, які приведені у таблиці, встановлюючи кожний біт операнда-приймача у значення 1, тільки у тому випадку якщо один з відповідних бітів операнда-джерела дорівнює 0, та у значення 1 у протилежному випадку. Інструкція XOR дозволяє нам “перемикати” значення окремих бітів у байті. Наприклад, інструкції:
mov al,01010101b xor al,11110000b
встановлюють регістр AL у значення 10100100b чи A5h. Коли для регістра AL виконується операція XOR зі значенням 11110000b (0F0h), біти зі значенням 0 залишають відповідні біти AL незмінними. До речі інструкція XOR дає зручний спосіб обнуління змісту регістру. Наприклад, наступна інструкція встановлює зміст регістра AX у значення 0:
xor ax,ax
Нарешті, інструкція NOT просто змінює значення кожного біту операнда на протилежне (як якщо б над початковим операндом була виконана операція XOR зі значенням 0FFh). Наприклад:
mov bl,10110001b not bl; переключити BL у 01001110b xor bl,0ffh; переключити BL зворотно у значення ; 10110001b
|