Coздание двух кодов A1.MAP
Отчет по лабораторной работе № 4 Рассмотрены 4 варианта компоновки программ - в них различныe типы объединения сегментов и способы передачи параметров. Вариант 1. Основная программа Pr1 имеет сегменты: · стека · данных · кода. Исходные данные передаются в дополнительную программу Pr2 через регистры. Результаты возвращаются через регистры. Дополнительная программа имеет только сегмент кода. При компоновке получаем 2 разных сегмента кода. Для этого используется модель памяти medium. (Директива определения модели памяти:.model medium). Основной модуль a1.asm .model medium Title Pr1 Extrn Pr2:far .stack 30 .data a1 dw 4 b1 dw 2 c1 dw 3 .data? y1 dw? .code .startup mov cx,c1;передача входных данных через регистры cx,bx mov bx,b1; в Pr2 call Pr2 mov ax,a1; результат вычисления Pr2 возвращается через регистр bx add ax,bx mov y1,ax .exit 0 end
Дополнительный модуль a2.asm .model small .code pr2 proc far public Pr2; означает для компоновщика, что точкой входа будет Pr2 push dx; dx и ax используются дальше в процедуре push ax; их значения запоминаются в стеке, mov ax,1 M1: imul bx loop M1 mov bx,ax pop ax; восстанавливаются значения AX и BX pop dx ret Pr2 endp .exit 0 end
Coздание двух кодов A1.MAP
Start Stop Length Name Class
00000H 00030H 00031H A1_TEXT CODE 00032H 00044H 00013H _TEXT CODE 00050H 00055H 00006H _DATA DATA 00060H 0007DH 0001EH STACK STACK 0007EH 0007FH 00002H _BSS BSS
Program entry point at 0000:0000
Результат открытия a1.exe файла изображены на рисунке 1. Рисунок 1 Результаты выполнения программы представлены на рисунке 2. Рисунок 2 Ответ: 12
Вариант 2 Аналогичен первому варианту, но в результате компоновки необходимо получить один объединенный кодовый сегмент. Для этого нужно использовать модель памяти small. (Директива определения модели памяти:.model small).
|