Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИКУМ ПО ОМПТ++.doc
Скачиваний:
156
Добавлен:
11.02.2015
Размер:
972.8 Кб
Скачать

4.7. Рекомендации по построению программы к лабораторной работе № 3

Структура программы, совмещающей функции двух ранее разработанных программ с выводом значений X, Y и Z на индикацию, представлена на рис. 12.

Рис. 12. Структура программы к лабораторной работе № 3

Для реализации однотипных действий по выводу байта данных на индикацию здесь предусмотрено использование подпрограммы DIGIT, текст которой на языке ассемблера приведен ниже. Подпрограмма имеет два входа – DIGIT1 для вывода в виде шестнадцатеричного символа старшей тетрады байта, помещенного в аккумулятор, и DIGIT2 – для вывода младшей тетрады байта. Соответствующий значению тетрады адрес таблицы семисегментных кодов формируется в регистровой паре HL. Адрес нужной ячейки буфера индикации перед обращением к подпрограмме должен быть помещен в регистровую пару BC. Длина подпрограммы – 14 байт.

DIGIT1: RRC ; перемещение

RRC ; старшей тетрады

RRC ; в байте на место

RRC ; младшей тетрады

DIGIT2: ANI 0FH ; обнуление старшей тетрады

ADI B3H ; получение младшего байта адреса

MOV L, A ; таблицы семисегментных кодов

MVI H, 02H ; загрузка старшего байта адреса

MOV A, M ; загрузка кода символа из таблицы

STAX B ; вывод символа на индикатор

RET ; возврат из подпрограммы

Например, для вывода с помощью подпрограммы DIGIT на индикаторы 3 и 4 значения X, считываемого из ячейки памяти 8300H, может быть использован следующий фрагмент программы.

LXI B, 83FAH ; загрузка адреса индикатора 3

LDA 8300H ; загрузка числа X

MOV D, A ; дублирование X в регистре D

CALL DIGIT1 ; вывод старшей цифры X

INX B ; получение адреса индикатора 4

MOV A, D ; восстановление X в аккумуляторе

CALL DIGIT2 ; вывод младшей цифры X

Аналогичным образом могут быть выведены на индикацию значения Y и Z. Общая длина программы к лабораторной работе № 3 получится при этом около 130 - 140 байт (28 байт – пример программы 1, 51 байт – пример программы 2, 14 байт – подпрограмма DIGIT плюс дополнительные команды по выводу X, Y и Z на индикацию).

4.8. Пример программы к лабораторной работе №4

Ниже в качестве примера приведена подпрограмма умножения двух однобайтных целых чисел без знака MUL88. Она реализует алгоритм умножения “младшими разрядами вперед со сдвигом частичной суммы”. Множимое помещается в регистр D, множитель в регистр С, произведение – двухбайтное число - образуется в регистрах В и С. При выполнении умножения последовательно анализируются биты множителя, начиная с младшего, помещаемые по команде RAR (циклический сдвиг вправо через перенос) в разряд переноса CY. Если очередной бит множителя ненулевой, то множимое добавляется к старшему байту частичной суммы, находящемуся в регистре B. Далее выполняется сдвиг этого байта вправо (вторая команда RAR), при этом его младший бит вытесняется в разряд переноса CY. При сдвиге в следующем цикле содержимого регистра C значение CY заносится в его старший бит, а в CY помещается очередной бит множителя. Таким образом в регистре C множитель постепенно вытесняется младшим байтом частичной суммы, которая после выполнения восьми циклов дает результат умножения. Длина описанной программы - 19 байт.

MUL88: MVI B, 00H ; сброс старшего байта произведения

MVI E, 08H ; установка числа бит

NXBIT: MOV A, C ; множитель занести в аккумулятор

RAR ; очередной бит во флажке “СY”

MOV C, A ; возвращение множителя

DCR E ; декремент счетчика бит

RM ; умножение закончено?

MOV A, B ; старший байт произведения

JNC NOADD ; бит множителя равен нулю

ADD D ; суммирование множимого

NOADD: RAR ; сдвиг частичной суммы

MOV B, A ; возвращение старшего байта

JMP NXBIT ; умножение на следующий бит