Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
К лабораторной работе № 2
Способы адресации Способы адресации подробно расписаны в [4-5].
К лабораторной работе № 3 Обработка прерываний Функции прерывания с примерами рассмотрены в [4-5].
К лабораторной работе № 4 Распределение памяти Общие положения Любая программа обычно состоит из подпрограмм. Для удобства отладки больших по объему подпрограмм их обычно оформляют как самостоятельные модули (файлы), т.е. в виде внешних подпрограмм. Каждый такой модуль ассемблируется отдельно и генерирует собственный уникальный объектный модуль. Программа компоновщик затем объединяет объектные модули в один объединенный выполняемый модуль.
Команды и директивы межсегментного вызова Для связей между подпрограммами используются следующие команды:
Способы компоновки программ Рассмотрим три способа компоновки программ. Первый способ, когда директивы EXTRN и PUBLIC используются для меток. Пример программы состоит из основной программы и подпрограммы.
Текст основной программы Title UMN (EXE) ; основная программа Extrn SubUmn:Far ; объявление внешней процедуры
StackSg Segment PARA STACK 'Stack' DW 64 DUP(?) StackSg ENDS
DataSg Segment PARA 'Data' Kol DW 0140H Price DW 2500H DataSg ENDS CodeSg Segment PARA 'Code' Begin Proc FAR Assume CS:CodeSg, DS:DataSg, SS:StackSg Push DS Sub AX, AX Push AX Mov AX, DataSg Mov DS, AX Mov AX, Price Mov BX, Kol Call SubUmn ; вызов процедуры Ret Begin ENDP CodeSg ENDS END Begin
Текст внешней подпрограммы Title SubUmn ; внешняя подпрограмма CodeSg Segment PARA 'Code' SubUmn Proc FAR Assume CS:CodeSg Public SubUmn ; открытие доступа к подпрограмме Mul BX ; умножается содержимое AX и BX Ret ; результат заносится в DX:AX SubUmn ENDP CodeSg ENDS END SubUmn
Карта компоновки отражает организацию программы в памяти.
Здесь имеются два кодовых сегмента для каждого ассемблирования с разными стартовыми адресами.
Второй способ, когда директивы PUBLIC используют при описании кодовых сегментов. В этом случае в директиву Segment вносится оператор Public.
CodeSg Segment PARA PUBLIC 'Code'
При этом карта компоновки будет выглядеть следующим образом:
Здесь только один кодовый сегмент. Тот факт, что оба сегмента имеют одни и те же имя, класс и атрибут, заставил компоновщика объединить два логических кодовых сегмента в один физический кодовый сегмент.
Третий случай, когда присутствуют общие данные для основной программы и подпрограммы. Это предполагает возможность обработки в одном модуле данных, определенных в другом модуле. Пусть области Price и Kol определялись в основной программе, а загрузка значений из этих областей в регистры производились в подпрограмме. Тогда в тексте основной программы кроме объявления внешней подпрограммы (сразу за ним) добавится строка Public Kol, Price; команды Mov AX, Price Mov BX, Kol из основной программы перепишутся в подпрограмму (перед командой умножения). Кроме того, в подпрограмме перед описанием кодового сегмента необходимо описать имена переменных как внешние: EXTRN Kol:Word, Price:Word
Порядок отладки Пусть текст основной программы записан в файле PR1.ASM, текст внешней подпрограммы - в файле PR2.ASM. Используем программу MASM для получения двух объектных модулей: PR1.OBJ и PR2.OBJ. Затем компоновщиком объединяем два объектных модуля в один выполняемый. Для этого на запросы компоновщика необходимо ответить следующим образом:
Object modules [.OBJ] : PR1 + PR2 Run file [.EXE] : PR (или любое другое имя)
Компоновщик устанавливает соответствие между адресами в объектных модулях.
Более подробно см. [4-5].
|
Последнее изменение этой страницы: 2019-05-07; Просмотров: 328; Нарушение авторского права страницы