- •Однокристальная микроЭвм мс68нс05с8.
- •Практическая часть.
- •1. Арифметические команды. Команды сложения.
- •Команды вычитания.
- •Команды инкремента и декремента.
- •Команды умножения и арифметического дополнения.
- •2. Команды байтовой логики.
- •3. Команды сдвига.
- •Команды логического (или последовательного) сдвига.
- •Команды арифметического сдвига.
- •Команды циклического сдвига.
- •4. Команды работы с битами.
- •5. Команды сравнения и тестирования. Команды сравнения.
- •Команды тестирования.
- •Контрольные вопросы.
- •Задания.
2. Команды байтовой логики.
К командам байтовой логики относятся команды AND, ORA (OR with Accumulator), COM (COMplement) и EOR (Exclusive OR). Все команды, кромеCOM являются двухоперандными. Первым операндом всегда является содержимое аккумулятора. Вторым операндом у этих команд может быть непосредственное значение или содержимое одной из ячеек памяти. Результат операции помещается в аккумулятор. КомандыAND и ORA выполняют операции логического умножения и логического сложения, соответственно. КомандаEOR выполняет сложение по модулю 2. Единственным операндом командыCOMможет быть как один из регистров, так и одна из ячеек памяти, над содержимом которых будет произведена операция логического отрицания (или дополнения до "минус единицы"). Другими словами, каждый бит изменит свое значение на противоположное, то есть инвертируется.
Примечание 1: операция сложения по модулю 2 еще известна как операция "исключающее ИЛИ". В подавляющем большинстве языков ассемблера других микропроцессоров команды, выполняющие аналогичные действия называются XOR.
Примечание 2: в ассемблерах некоторых других микропроцессоров команда, выполняющая логическое отрицание, называется NOT.
Пример 1. Работу команды логического умножения можно продемонстрировать на данной программе, которая обнуляет содержимое старшей тетрады в ячейке $50.
0100 B6 50 LDA $50 Загрузить значение из ячейки в аккумулятор.
0102 A4 0F AND #$0F Обнулить старшую тетраду; содержимое младшей не изменяется.
0104 B7 50 STA $50 Сохранить измененное значение.
Список тестов:
-
Начальное значение в ячейке $50
Итоговое значение в ячейке $50
Содержимое регистра CC
$02
(00000010B)
$02
(00000010B)
111.x...
$F0
(11110000B)
$00
(00000000B)
111.x.Z.
$79
(01111001B)
$09
(00001001B)
111.x...
Пример 2. Приведенная ниже программа программно реализует операцию сложения по модулю 2, без использования командыEOR. Функция "Исключающее ИЛИ" может быть представлена на основе базовых функций "И" и "ИЛИ" следующем образом: D=BÅC=(ØB&C)Ú(B&ØC). Первый операнд находится по адресу $50, второй-по адресу $51. Результат помещается в ячейку $52.
0100 B6 50 LDA $50 Загрузить операндB.
0102 43 COMA Вычислить его логическое отрицание.
0103 B4 51 AND $51 Логически умножить на операндC.
0105 B7 52 STA $52 Сохранить промежуточный результат.
0107 B6 51 LDA $51 Загрузить операндC.
0109 43 COMA Вычислить его логическое отрицание.
010A B4 50 AND $50 Логически умножить на операндB.
010C BA 52 ORA $52 Логически сложить с сохраненным промежуточным результатом.
010E B7 52 STA $52 Сохранить результатD.
Список тестов:
-
Значение в ячейке $50
Значение в ячейке $51
Результат в ячейке $52
Содержимое регистра CC
$00
(00000000B)
$29
(00101001B)
$29
(00101001B)
111.x..С
$37
(00110111B)
$A5
(10100101B)
$92
(10010100B)
111.xN.С
$A5
(10100101B)
$37
(00110111B)
$92
(10010100B)
111.xN.С
$B9
(10111001B)
$B9
(10111001B)
$00
(00000000B)
111.x.ZС
Пример 3. Гораздо более короткая программа делает то же самое, что и предыдущая, с помощью команды ассемблераEOR.
0100 B6 50 LDA $50 Загрузить операндB.
0102 B8 51 EOR $51 Произвести сложение по модулю 2 с операндомC.
0104 B7 52 STA $52 Сохранить результатD.
Список тестов такой же, как и у предыдущей программы.