Разработка и отладка многомодульных программ. Отдельные фрагменты прикладной программы МК. Использование процедур, оформленных в виде подпрограмм, страница 2

Текст программы главного модуля MAIN имеет следующий вид.

;Главный модуль программы микроконтроллера

PUBLIC MAIN

EXTERN PR810, CROSSOD

IPORT    EQU  00H; Адрес порта ввода

OPORT1   EQU  00H; Адрес порта вывода цифры ц1 (единицы)

OPORT2   EQU  00H; Адрес порта вывода цифры ц2 (десятки)

OPORT3   EQU  00H; Адрес порта вывода цифры ц3 (сотни)

STACKTOP EQU 900H; Адрес вершины стека

SAVE     EQU 800H; Адрес ячейки хранения входного кода

BASE     EQU 810H; Начальный адрес массива хранения цифр

; ц1, ц2, ц3 в распакованном формате

MAIN:    LXI  SP,STACKTOP; Загрузить указатель стека

IN   IPORT

STA  SAVE       ; Запомнить входные данные

MOV  C,A

CALL PR810; В регистрах H,L – двоично-десятичный код

;Распаковка двоично-десятичного числа

LXI  D,BASE  ; Начальный адрес массива BASE

MOV  A,L

ANI  0FH     ; Выделить ц1

STAX D       ; Запомнить ц1

INX  D

MOV  A,L

ANI  OF0H    ; Выделить ц2

RRC

RRC

RRC

RRC          ; Сдвиг ц2 в младшую тетраду байта

STAX D       ; Запомнить ц2

INX  D

MOV  A,H

ANI  0FH     ; Выделить ц3

STAX D       ; Запомнить ц3

;Вывод данных в порты

LXI  D,BASE

LDAX D       ; Чтение ц1

MOV  C,A

CALL CROSSCOD; Подпрограмма перекодировки

OUT  OPORT1  ; Вывод ц1

INX  D

LDAX D       ; Чтение ц2

MOV  C,A

CALL CROSSCOD

OUT  OPORT2  ; Вывод ц2

INX  D

LDAX D       ; Чтение ц3

MOV  C,A

CALL CROSSCOD

OUT  OPORT3  ; Вывод ц3

HLT          ; Остановить микропроцессор

END

Псевдокоманда EXTERN PR810, CROSSCOD указывает программе-транслятору, что метки PR810 и CROSSCOD (в данном случае имена подпрограмм) определены в других модулях. Псевдокоманда PUBLIC MAIN указывает, что данный модуль с меткой MAIN  может использоваться в других программах. В рассматриваемом случае эта псевдокоманда не обязательна, так как модуль MAIN является главным.

Задание. Создайте в каталоге MP85 файле с именем main.asm и занесите в него текст программы MAIN.

Указание. Имена псевдокоманд PUBLIC EXTERN нужно набирать, начиная со 2-й позиции курсора! Имена меток следует набирать, начиная с 1-й позиции курсора.

Закончив набор, получите объектный файл main.obj, запустив транслятор as85.exe из командной строки.

Перед выполнением компоновки отдельных модулей программ, т.е. объединением их в один исполняемый модуль, необходимо доработать исходные программы pr810.asm и crosscod.asm – ввести в них псевдокоманду PUBLIC, указывающую, что эти модули могут использоваться другими программами.

Задание. Откройте файл crosscod.asm в режиме редактирования текста и запишите псевдокоманду PUBLIC в начало программы:

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

PUBLIC CROSSCOD

CROSSCOD:    LXI  H,TABLE

.

.

RET

END

Сохраните новый файл и получите объектный файл crosscod.obj, запустить транслятор as85.exe из командной строки.

Аналогично доработайте программу в файле pr810.asm

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

PUBLIC PR810

PR810:    LXI  A,0

.

.

RET

END

Получите новый объектный файл pr810.obj.

Компоновку многомодульных программ с помощью компоновщика link.exe удобно выполнять в диалоговом режиме. При этом компьютер выдает на экран монитора несколько подсказок, на которые требуется ответить. Рассмотрим процесс компоновки программ, полученных в файлах main.obj, pr810.obj, crosscod.obj.

1. На панели DOS-навигатора с помощью курсора выделяем файл link.exe и запускаем его. Компьютер выдает первую подсказку:

Input Filename:

Необходимо напечатать имя первого входного файла. В нашем случае это будет файл главного модуля main.obj. По умолчанию расширение .obj можно не вводить. Напечатайте main и нажмите Enter.

Далее появляется сообщение:

Enter offset for 'CODE':