В программе «ЛамПанель» можно использовать логические операции «НЕ» (уже знакомая нам команда NOT), «И» (команда AND), «ИЛИ» (команда OR) и «исключающее ИЛИ» (команда XOR). В последних трех командах после названия команды сначала указывается маска, а затем через запятую – регистр, к которому применяется логическая операция.
Например, команда
AND FF,R0
обнуляет старшие 8 бит (старший байт) регистра R0. Маска может находиться в регистре, например, последовательность команд
MOV FF,R1
OR R1,R0
устанавливает в единицу 8 младших бит регистра R0, а остальные оставляет без изменений.
Для выполнения сдвигов используются следующие команды
SHL 1,R0 ; логический сдвиг влево на 1 бит SHR 2,R0 ; логический сдвиг вправо на 2 бита SAR 1,R0 ; арифметический сдвиг вправо на 1 бит ROL 2,R0 ; циклический сдвиг влево на 2 бита ROR 3,R0 ; циклический сдвиг вправо на 3 бита
Конечно, сдвиг может применяться к любому регистру общего назначения, а не только к R0.
1. Запустите тренажер «ЛамПанель». Напишите программу, которая решает следующую задачу, используя логические операции:
В регистрах R1, R2 и R3 записаны коды трех десятичных цифр, составляющих трехзначное число (соответственно сотни, десятки и единицы). Построить в регистре R0 это число. Например, если R1=3116, R2=3216 и R3=3316, в регистре R0 должно получиться десятичное число 123.
Программа:
2. Используя программу «ЛамПанель», определите и запишите в таблицу значения регистра R0 после выполнения каждой из следующих команд:
Ответьте на вопросы:
• как изменится результат выполнения программы, если в команде 1 записать в R0 другое число?
• как изменится результат выполнения программы, если в командах 2 и 3 заменить маску на другую, например, на CB2416?
• как изменится результат выполнения программы, если маску в команде 2 изменить, а маску в команде 3 не менять?
3. Запишите в таблицу десятичные числа, которые будут получены в регистре R0 после выполнения каждой команды этой программы при разных начальных значениях R0 (две команды выполняются последовательно одна за другой):
Замечание: не забудьте перевести числа в шестнадцатеричную систему!
Когда последовательное выполнение этих двух команд не изменяет данные?
4. Напишите программу, которая решает следующую задачу, используя логические операции и сдвиги:
При кодирование цвета используются 4-битные значения составляющих R (красная), G (зеленая) и B (синяя). Коды этих составляющих записаны в регистрах R1, R2 и R3.
Построить в регистре R0 полный код цвета. Например, если R1=A16, R2=B16 и R3=C16, в регистре R0 должно получиться число ABC16.
Программа:
5. Напишите программу, которая умножает число в регистре R0 на 10, не применяя команду умножения. Используйте арифметические операции и сдвиги.
Программа: