- •Однокристальная микроЭвм мс68нс05с8.
- •Практическая часть.
- •1. Арифметические команды. Команды сложения.
- •Команды вычитания.
- •Команды инкремента и декремента.
- •Команды умножения и арифметического дополнения.
- •2. Команды байтовой логики.
- •3. Команды сдвига.
- •Команды логического (или последовательного) сдвига.
- •Команды арифметического сдвига.
- •Команды циклического сдвига.
- •4. Команды работы с битами.
- •5. Команды сравнения и тестирования. Команды сравнения.
- •Команды тестирования.
- •Контрольные вопросы.
- •Задания.
Команды вычитания.
Команда SUB (SUBtraction) вычитает из содержимого аккумулятора операнд, заданный также, как и у командADD иADC. Аналогично командаSBC (SuBtraction with Carry) вычитает дополнительно из аккумулятора флагC регистраCC.
В качестве примера рассмотрим вычисление по формуле Z=(X+5)-Y, где двухбайтовые операндыX и Y располагаются в словах с адресами $50 ($50-старший байт, $51-младший) и $52 ($52-старший байт, $53-младший) соответственно, а результат Z помещается в слове по адресу $54 ($54-старший байт, $55-младший).
0100 B6 51 LDA $51 Загрузить в аккумулятор младший байт операндаX.
0102 AB 05 ADD #$05 Прибавить #5.
0104 B7 55 STA $55 Временно сохранить промежуточный результат.
0106 B6 50 LDA $50 Загрузить в аккумулятор старший байт операндаX.
0108 A9 00 ADC #$00 Прибавить бит переноса от предыдущего сложения.
010A B7 54 STA $54 Временно сохранить промежуточный результат.
010C B6 55 LDA $55 Загрузить в аккумулятор младший байт суммы(X+5).
010E B0 53 SUB $53 Вычесть младший байт операндаY.
0110 B7 55 STA $55 Сохранить младший байт результатаZ.
0112 B6 54 LDA $54 Загрузить в аккумулятор старший байт суммы(X+5).
0114 B2 52 SBC $52 Вычесть старший байт операндаYс учетом возможного заема во время предыдущей операции вычитания.
0116 B7 55 STA $54 Сохранить старший байт результатаZ.
Список тестов:
-
Значение в ячейках $50 и $51
Значение в ячейках $52 и $53
Результат в ячейках $54 и $55 после вычитания младшего байта
Содержимое регистра CC после выполнения команды SUB
Результат в ячейках $54 и $55 после вычитания старшего байта
Содержимое регистра CC после выполнения команды SBC
$10FB
$1005
$11FB
111.xN.C
$00FB
111.x.Z.
$FF80
$0F10
$FF75
111.x...
$F075
111.xN..
$FFFF
$0001
$0003
111Hx...
$0003
111Hx.Z.
$0000
$0008
$00FD
111.xN.C
$FFFD
111.xN.C
Команды инкремента и декремента.
Команды INC (INCrement) иDEC (DECrement) соответственно увеличивают или уменьшают на единицу значение в регистре или одной из первых 511 ячеек памяти.
Пример. Предположим, что нам нужно разместить по адресам $50-$6F числа убывающей арифметической прогрессии(Ti=Ti-1-K), гдеT1хранится по адресу $70, a модуль разности-по адресу $71.
0100 A6 20 LDA #$20 Будем вычислять 20 членов прогрессии.
0102 B7 72 STA $72 Проинициализировать ячейку $72-счетчик цикла.
0104 B6 70 LDA $70 Загрузка в аккумулятор значения первого члена прогрессии.
0106 5F CLRX Очистить содержимое индексного регистра для индексной адресации со смещением первой ячейки памяти из списка.
0107 E7 50 STA $50, X Поместить текущее значение аккумулятора в ячейкуXотносительно смещения $50.
0109 B0 71 SUB $71 Вычислить значение следующего члена прогрессии.
010B 5C INCX Увеличить значениеXдля адресации следующей ячейки памяти.
010C 3A 72 DEC $72 Уменьшить счетчик цикла.
010E 26 F7 BNE $0107 Пока не заполним все 20 ячеек, повторять цикл.
Если ввести в ячейки $70 и $71 значения $80 и $02 соответственно, то после выполнения программы содержимое интересующего нас участка памяти будет таким:
0050 80 7E 7C 7A 78 76 74 72 70 6E 6C 6A 68 66 64 62 .~zxvtrpnljhfdb
0060 60 5E 5C 5A 58 56 54 52 50 4E 4C 4A 48 46 44 42 '^\ZXVTRPNLJHFDB