Команда XOR
Команда OR
Команда AND
Команды языка Ассемблера
Лекция 8. Команды пересылки данных и логические
8.1. Команды пересылки данных
Прежде чем изменять каким-либо образом данные, необходимо научиться их сохранять: копировать из регистра в память и обратно. Ведь прежде чем оперировать данными в регистрах, их сначала туда надо поместить.
Команда MOV, хоть название ее и происходит от слова «move» (перемещать), на самом деле не перемещает, а копирует значение из источника в приемник:
MOV приемник,источник
Процессоры семейства х86 позволяют использовать в командах только один косвенный аргумент. Следующая команда копирования значения, находящегося по адресу number_one, в область памяти с адресом number_two, недопустима:
mov [number_two],[number_one] ;НЕПРАВИЛЬНО!!!
Чтобы скопировать значение из одной области памяти в другую, нужно использовать промежуточный регистр:
mov ax,[number_one] ; загружаем в АХ 16-битное
; значение "number_one"
mov [number_two],ах ; а затем копируем его в переменную
; "number_two"
Оба операнда команды MOV должны быть одного размера: например, для копирования значения BL в регистр АХ мы должны «расширить диапазон», то есть скопировать весь ВХ в АХ, а затем загрузить 0 в АХ:
mov ах,bх ; загружаем ВХ в АХ
mov ah,0 ; "сбрасываем" верхнюю часть
; АХ – записываем в нее 0
Можно поступить и наоборот: сначала сбросить весь АХ, а затем загрузить BL в младшую часть АХ (AL):
mov ах,0 ; АН = 0, AL = 0
mov al,bl ; заносим в AL значение BL
Точно так же можно скопировать 16-битное значение в 32-битный регистр.
В официальной документации приведены все допустимые форматы команды MOV:
MOV r/m8,reg8
MOV r/m16,regl6
MOV r/m32,reg32
MOV reg8,r/m8
MOV reg16,r/ml6
MOV reg32,r/m32
MOV reg8,imm8
MOV reg16,imml6
MOV reg32,imm32
MOV r/m8,imm8
MOV r/m16,imml6
MOV r/m32,imm32
8.2. Логические команды языка Ассемблера
К логическим операциям относятся: логическое умножение (И, AND), логическое сложение (ИЛИ, OR), исключающее ИЛИ (XOR) и отрицание (NOT). Все эти инструкции изменяют регистр признаков.
Команда AND выполняет логическое умножение двух операндов: o1 и о2. Результат сохраняется в операнде o1. Типы операндов такие же, как у команды ADD: операнды могут быть 8-, 16- или 32-битными регистрами, адресами памяти или непосредственными значениями.
AND o1, o2
Таблица истинности для оператора AND приведена ниже (табл. 8.1).
Команда OR выполняет логическое сложение двух операндов: o1 и о2. Результат сохраняется в операнде o1. Типы операндов такие же, как у команды AND.
OR o1, o2
Таблица истинности для оператора OR приведена ниже (табл. 8.1).
Вычисляет так называемое «исключающее ИЛИ» операндов: o1 и о2. Результат сохраняется в о1. Типы операндов такие же, как у предыдущих инструкций. Формат команды:
XOR o1, о2
Таблица истинности для оператора XOR приведена ниже (табл. 8.1). Исключающее ИЛИ обратимо: выражение ((х XOR у) XOR у) снова возвратит х.