Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / Lab_moto / 3.doc
Скачиваний:
18
Добавлен:
16.04.2013
Размер:
196.1 Кб
Скачать

Команды вычитания.

Команда 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

Соседние файлы в папке Lab_moto