- •Лабораторная работа №3.
- •Inc Инкремент
- •3.2. Практическая часть.
- •3.2.1. Арифметические команды. Команды сложения.
- •Команды вычитания.
- •Команды инкремента и декремента.
- •Команды умножения и арифметического дополнения.
- •3.2.2. Команды байтовой логики.
- •3.2.3. Команды сдвига.
- •Команды логического (или последовательного) сдвига.
- •Команды арифметического сдвига.
- •Команды циклического сдвига.
- •3.2.4. Команды работы с битами.
- •3.2.5. Команды сравнения и тестирования. Команды сравнения.
- •Команды тестирования.
- •3.3. Контрольные вопросы.
- •3.4. Задания.
Команды вычитания.
Команда SUB (SUBtract) вычитает из содержимого аккумулятора операнд, заданный также, как и у команд ADD и ADC. Аналогично команда SBC (SuBtract with Carry) вычитает дополнительно из аккумулятора флаг C регистра признаков.
В качестве примера рассмотрим вычисление по формуле 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