- •Практическая работа №1
- •Практическая работа №2
- •Арифметические операции над числами с фиксированной точкой
- •Арифметические операции над двоичными числами с плавающей точкой
- •Практическая работа №3
- •Практическая работа №4
- •Практическая работа №5
- •Проверка состава оборудования
- •Практическая работа №6
- •Практическая работа №7
- •Команды сложения и вычитания
- •Команды умножения и деления Команды умножения
- •Команды деления
- •Изменение размера числа
- •Логические команды
- •Практическая работа №8
- •Прямой переход
- •Косвенный переход
- •Команды сравнения и условного перехода
- •Команды управления циклом
- •Практическая работа №9
Логические команды
Логическим командам, которые, как следует из их названия, выполняют логические операции - отрицание, конъюнкцию и дизъюнкцию, присущ ряд общих черт.
Во-первых, все они реализуют, как говорят, поразрядные операции. Это озна-чает, что i-й разряд результата зависит только от i-ых разрядов операндов и ни от чего иного. При этом одна и та же операция выполняется сразу над всеми разрядами операндов одновременно, параллельно.
Во-вторых, во всех этих командах бит 1 трактуется как "истина", а бит 0 - как "ложь". Именно при такой трактовке эти команды и реализуют логические операции отрицания, конъюнкции и дизъюнкции.
В-третьих, эти команды меняют все флаги условий, но интерес обычно вызывает только флаг нуля ZF, который, напомним, принимает значение 1, если получился нулевой результат, и равен 0, если в результате есть хотя бы одна единичка. Что касается других флагов, то они, предназначенные для работы с числами, в логических операциях малоинформативны.
В-четвертых, операндами логических команд должны быть либо байты, либо слова, но не то и другое одновременно.
Отрицание:NOT ор
Допустимые типы операнда: r8, m8, r1б, m16. Эта команда меняет значение каждого бита операнда на противоположное: 0 на 1 и 1 на 0; результат записывается на место операнда. Например:
MOV AL,1100b ;AL=00001100b
NOT AL ;AL=11110011b
Конъюнкция (логическое умножение): AND op1,op2
В этой команде допустимы следующие комбинации операндов:
ор1 ор2
r8 i8, r8, m8
m8 i8,r8
r16 il6, rl6, ml6
m16 il6, rl6
Команда производит поразрядное логическое умножение операндов и записы-вает результат на место первого операнда, i-й бит результата равен 1, только если i-e биты обоих операндов равны 1, и равен 0, если хотя бы в одном операнде i-й бит нулевой (см. таблицу). Например:
MOV AL,1100b ;AL=00001100b
AND AL,1010b ;AL=00001000b
X |
Y |
x and y |
x xor y |
x or y |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
Проверка: TEST opl,op2
Это аналог команды AND, но результат логического умножения никуда не записывается. Главное в команде TEST - установка флагов. Как уже было сказано, в логических командах интерес представляет только флаг нуля ZF. Так вот, он равен 1, если в результате логического умножения получился нулевой ответ, и равен 0, если в ответе есть хотя бы одна двоичная 1.
Примеры:
MOV BH,1100b
TEST BH,0011b ;= 00000000b -> ZF=1
TEST BH,1010b ;= 00001000b -> ZF=0
Команда TEST обычно применяется для проверки, являются ли нулевыми какие-то разряды операнда. Например, сделать переход на метку L в случае, если правые три бита регистра АХ нулевые, можно так:
TEST AX,111b
JZ L
Дизъюнкция (логическое сложение): OR op1,op2
Допустимые типы операндов - как в команде AND.
Команда производит поразрядное логическое сложение и записывает результат на место первого операнда. Здесь i-й бит результата равен 1, если i-й бит хотя бы одного операнда равен 1, и равен 0 только в одном случае, когда i-e биты обоих операндов нулевые (см. таблицу). Например:
MOV CL,1100b
OR CL,1010b ;CL=00001110b
Исключающее ИЛИ (exclusive OR): XOR opl,op2
Допустимые типы операндов - как в команде AND.
И здесь результат записывается на место первого операнда, причем i-й бит результата равен 0, если i-e биты операндов совпадают, и равен 1, если эти биты различны (см. таблицу). Например:
MOV CL,1100b
XOR CL,1010b ;CL=00000110b
В обычной речи эта операция соответствует фразе "или то, или другое, но не то и другое одновременно", т. е. исключается случай, когда оба операнда истинны. Отсюда и название "исключающее ИЛИ".
Отметим одну особенность операции XOR: когда операнды команды XOR совпадают, результатом будет нулевое слово. Например, при любом значении АХ имеем:
XOR АХ,АХ ;АХ:=0
Этот прием часто используется для обнуления регистров; по сравнению с дру-гими приемами (MOV АХ,0 или SUB AX,AX) он выполняется быстрее.
Задание:
Написать программу, выполняющую арифметические действия:
2a+a*b-b/a, где a=2Dh, b=4Eh
Порядок выполнения работы:
Составить блок-схему алгоритма
Написать программу на языке Ассемблера
Отладить программу TurboDebuger
Заполнить таблицу с ошибками:
№ |
Допущенная ошибка |
Сообщение об ошибке |
|
|
|
|
|
|
Контрольные вопросы:
Какие команды позволяют манипулировать отдельными битами?
Состояние каких флагов нужно контролировать программисту во время вычислительного процесса?
С помощью каких команд возможно проверить значение отдельного бита в операнде. Приведите пример.