Текст программы главного модуля 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':
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.