Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LH05-3N.DOC
Скачиваний:
24
Добавлен:
11.03.2015
Размер:
100.86 Кб
Скачать

0050 00 01 02 03 04 05 06 07 08 09 0A 0b 0c 0d 0e 0f ................

0060 00 01 02 03 04 05 06 07 08 09 0A 0b 0c 0d 0e 0f ................

Содержимое памяти после выполнения программы:

0050 00 Ff fe fd fc fb fa f9 f8 f7 f6 f5 f4 f3 f2 f1 ................

0060 Ff fe fd fc fb fa f9 f8 f7 f6 f5 f4 f3 f2 f1 f0 ................

Пример 3. Приведенная ниже программа иллюстрирует использование арифметических, логических команд и сдвигов в программе, которая преобразует значение ячейки памяти $50 в символьное представление этого числа в шестнадцатиричном виде и помещает эти два символа в ячейки памяти $51 и $52.

0100 B6 50 LDA $50 Загрузить начальное значение.

0102 A4 0F AND #$0F Оставить из него только младшую тетраду.

0104 AE 52 LDX #$52 Загрузить индекс для адресации байта для символьного представления младшей тетрады.

0106 CD 01 14 JSR $0114 Вызвать подпрограмму преобразования числа от $00 до $0F в код символьного представления соответствующей цифры.

0109 B6 50 LDA $50 Снова загрузить исходное значение.

010B 44 LSRA Выполнить четыре циклических сдвига

010C 44 LSRA вправо, чтобы переместить

010D 44 LSRA содержимое старшей тетрады

010E 44 LSRA в младшую и очистить

предыдущее содержимое старшей.

010F 5A DECX Уменьшить значение индекса для адресации байта для символьного представления старшей тетрады.

0110 CD 01 14 JSR 0114 Вызвать подпрограмму преобразования числа от $00 до $0F в код символьного представления соответствующей цифры.

0113 9D NOP Пустая команда.

Подпрограмма преобразования:

0114 AB 30 ADD #$30 Добавить значение кода символа "0" для представления цифр.

0116 A1 3A CMP #$3A Сравнить со значением, соответствующим буквам A-F.

0118 25 02 BCS $011C Если меньше, то пропустить следующую команду.

011A ADD #$07 Получаем код символа, соответствующий буквам A-F (коды $41..$46).

011С F7 STA , X Сохранить в ячейке с указанным индексом.

011D 89 RTS Возврат из подпрограммы.

Список тестов:

Значение в ячейке $50

Результат в ячейке $51

Результат в ячейке $52

Символьное представление содержимого памяти с адресами $50-$5F

$00

$30

$30

x00xxxxx

$3F

$33

$46

x3Fxxxxx

$A5

$41

$35

xA5xxxxx

$BF

$42

$46

xBFxxxxx

Команды тестирования.

По команде TST (TeST) происходит тестирование содержимого либо одного из регистров, либо одной из первых 511 ячеек памяти. По команде устанавливаются некоторые флаги регистраCCи по своему действию эта команда аналогична сравнению с нулем.

Команда BIT (BIt Test) тестирует группу битов в аккумуляторе, сответствующие которым биты в операнде установлены. Операнд можно задавать теми же способами, что и у предыдущей команды. По своему действию команда полностью идентична командеAND, за исключением того, что командаBITне изменяет содержимое аккумулятора.

Пример 4. Рассмотрим пример реализации следующего задания: определить длину строки, которая располагается в последовательных ячейках памяти, начиная с адреса $51. Признаком конца строки служит нулевой байт. Длину строки поместить в ячейку с адресом $50.

Примечание: фактически программа преобразует строку из формата, принятого в языке C, а также некоторых операционных системах и оболочках, в формат, принятый в языке Pascal.

0100 5F CLRX Очистить индексный регистр для адресации первого байта со смещением $51.

0101 6D 51 TST $51, X Протестировать содержимое байта с текущим индексом со смещением $51.

0103 27 03 BEQ $0108 Если ноль, закончить цикл.

0105 5C INCX Увеличить содержимое индексного регистра для адресации следующего байта.

0106 20 F9 BRA $0101 Продолжить цикл.

0108 BF 50 STX $50 Сохранить полученную длину строки по адресу $50.

Содержимое памяти до выполнения программы:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]