Лабораторная работа n 12 Раздельная трансляция icon

Лабораторная работа n 12 Раздельная трансляция




Скачати 38.62 Kb.
НазваЛабораторная работа n 12 Раздельная трансляция
Дата03.08.2012
Розмір38.62 Kb.
ТипЛабораторная работа

ЛАБОРАТОРНАЯ РАБОТА N 12


Раздельная трансляция


Краткие теоретические сведения

Программа, состоящая из нескольких файлов с подпрограммами.

В соответствии с принципами модульного программирования большие программы целесообразно разбивать на отдельные модули. В Ассемблере имеется возможность создавать одну программу (.EXE-файл), используя несколько файлов с исходным текстом (.asm-программ). Эти файлы ассемблируются отдельно. Полученные объектные модули (.obj) собираются затем компоновщиком в один исполняемый .EXE-файл.


¦ TASM progi

prog1.asm prog2.asm ...... progk.asm

¦ ¦

prog1.obj prog2.obj progk.obj

¦ ¦ ¦

L-----------------+----------------------

¦ TLINK prog1+prog2+...+progk

prog.exe


Рассмотрим 4 варианта компоновки программ - в них различны типы объединения сегментов и способы передачи параметров.

Вариант 1. Основная программа Pr1 имеет сегменты:

  • стека

  • данных

  • кода.

Исходные данные передаются в дополнительную программу Pr2 через регистры. Результаты возвращаются через регистры. Дополнительная программа имеет только сегмент кода. При компоновке получаем 2 разных сегмента кода. Для этого используется модель памяти medium.

(Директива определения модели памяти: .model medium).


Пример

Следует вычислить выражение y1=a1+b1 5c1 0.

Дополнительная программа вычисляет b1 5c1 0.

b1 передается в регистре bx.

c1 передается в регистре cx.

Результат возвращается в регистре bx.

Для связи программ необходимо в основной программе поместить директиву:

Extrn Pr2:far

Это означает, что процедура PR2 является внешней для основной программы. А в дополнительной программе поместить директиву:

Public Pr2

Это означает, что процедура PR2 может быть использована в других программах.

Основной модуль:

.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


Дополнительный модуль:

.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


Пусть первый программный файл называется pr1.asm, а второй - pr2.asm. В результате компоновки (tlink pr1 + pr2) будут организованы два сегмента кода. Чтобы убедиться в этом, можно просмотреть файл pr1.map.

Вариант 2


Аналогичен первому варианту, но в результате компоновки необходимо получить один объединенный кодовый сегмент. Для этого нужно использовать модель памяти small. (Директива определения модели памяти: .model small).

Вариант 3


Дополнительная программа использует данные из основной программы, записанные в сегменте данных. Для этого имена y1,b1,c1 должны быть определены в основной программе как PUBLIC. Необходимо использовать полные описания сегментов, чтобы указать, что сегмент данных общий (атрибут PUBLIC).

В дополнительной программе y1,b1,c1 должны быть определены как EXTRN и WORD.


Пример

Основной модуль:

Title Pr1

EXTRN Pr2:far

Public y1,b1,c1

sseg segment stack 'stack'

db 30 dup ('stack')

sseg ends

dseg segment public

a1 dw 4

b1 dw 2

c1 dw 3

y1 dw ?

dseg ends

cseg segment

begin proc far

assume cs:cseg,ds:dseg,ss:sseg

mov ax,dseg

mov ds,ax

call pr2 ; результат в y1

mov ax,a1

add y1,ax

mov ax,y1

mov ah,4ch

int 21h

ret

begin endp

cseg ends

end begin


Дополнительный модуль:

Title Pr2

EXTRN y1:word,b1:word,c1:word

cseg segment

pr2 proc far

assume cs:cseg

public Pr2

push dx

push ax

push bx

mov cx,c1

mov bx,b1

mov ax,1

M1: imul bx

loop M1

mov y1,ax

pop bx

pop ax

pop dx

ret

Pr2 endp

cseg ends

end Pr2


Вариант 4. Обмен данными через стек

Аналогично 1-ому варианту в основной программе нужно поместить директиву

Extrn Pr2:far, а в дополнительной программе - директиву


Public Pr2. Параметры передаются через стек аналогично передаче из процедуры в процедуру, когда они находятся в одной программе. Только надо учитывать, что в том случае, когда процедуры находятся в разных сегментах, происходит дальний вызов по CALL, и в стеке запоминается два слова из регистров CS и IP Поэтому переданные параметры находятся в стеке дальше на одно слово по сравнению с вызовом ближних процедур.

Пример

Основная программа:

.model small

extrn pr2:far

.stack 30

.data

; сегмент инициализированных данных

b1 dw 2

c1 dw 3

a1 dw 4

.data?

; сегмент неинициализированных данных

y1 dw ?

.code

; кодовый сегмент

.startup

push b1

push c1

call pr2

pop y1

mov ax,a1

add y1,ax

mov ax,y1

.exit 0

end


Дополнительная программа:

.model small

.stack 30

.code

; кодовый сегмент

pr2 proc

public pr2

push bp ; сохраняется указатель базы (для того, чтобы исполь

зовать его в дальнейшем как локальный параметр процедуры)

mov bp,sp ; нельзя использовать sp в качестве индексного

; регистра

mov cx,[bp+6] ; загрузка в cx степени

mov bx,[bp+8] ; загрузка в bx основания

mov ax,1

M1: mul bx

loop M1 ; результат в dx:ax

mov [bp+4],ax ; передача результата тоже через стек

pop bp

ret

pr2 endp

.exit 0

end

^

Задания к лабораторной работе



1. В соответствии с вариантом задания создайте 2 программных файла:

  • а) с подпрограммами для y1 и y2; б) основной файл вычисления y.

  • Предусмотрите варианты структуры:
    а) с разделенными кодовыми сегментами (параметры передаются через регистры); б) с общим кодовым сегментом;
    в) с использованием данных из основной программы (из сегмента данных);
    г) обмен данными осуществляется через стек.
    Указание. Для ввода и вывода данных использовать макроопределения из macro.lib.

2. Занесите в протокол:

  • исходные данные и полученные результаты вычислений в десятичной форме;

  • текст программ и их описания, а также описание способов передачи параметров.

3. Варианты заданий (те же, что и в лабораторной работе N 10 – “Команды переходов. Средства организации циклов. Режим Ideal”).

Схожі:

Лабораторная работа n 12 Раздельная трансляция iconЛабораторная работа n 9 Работа с командами обработки строк
В общем случае цепочечные команды позволяют выполнять действия над блоками памяти
Лабораторная работа n 12 Раздельная трансляция iconЛабораторная работа №1 «Работа с командным процессором Windows 2000»
Написать командный файл, выводящий на экран содержимое файлов указанных в качестве параметров этого файла
Лабораторная работа n 12 Раздельная трансляция iconЛабораторная работа №1 «Работа с командным процессором Windows 2000»
Написать командный файл, выводящий на экран содержимое файлов указанных в качестве параметров этого файла
Лабораторная работа n 12 Раздельная трансляция iconЛабораторная работа №13 «Изучение явления электромагнитной индукции»
Занятие 83. Лабораторная работа №13 «Изучение явления электромагнитной индукции»
Лабораторная работа n 12 Раздельная трансляция iconЛабораторная работа №9 Работа с данными в ms excel. Запустите программу «Microsoft Excel»
Откройте книгу "Заказы" из папки LabExcel. Если этой книги нет, скопируйте ее из папки Teach диска M
Лабораторная работа n 12 Раздельная трансляция iconЛабораторная работа Знакомство с диаграммами расписаний проектов. Создание Gantt диаграммы расписания проекта. Требования к программному обеспечению
Лабораторная работа Знакомство с диаграммами расписаний проектов. Создание Gantt диаграммы расписания проекта
Лабораторная работа n 12 Раздельная трансляция iconЛабораторная работа Знакомство с технологией структурного анализа и проектирования sadt, на примере case-системы bpwin Требования к программному обеспечению
Лабораторная работа Знакомство с технологией структурного анализа и проектирования sadt, на примере case-системы bpwin 0
Лабораторная работа n 12 Раздельная трансляция iconДокументи
1. /Модуль 1 Access/Access Лабораторная работа ь 1.doc
2. /Модуль...

Лабораторная работа n 12 Раздельная трансляция iconЛабораторная работа №1 Работа с объектами Windows Запустить программу «Проводник»
Для изменения режима просмотра вызовите меню Вид и выберите один из пунктов: “крупные значки”, “мелкие значки”, “список”, “таблица”....
Лабораторная работа n 12 Раздельная трансляция iconЛабораторная работа №1 Работа с объектами Windows Запустить программу «Проводник»
Для изменения режима просмотра вызовите меню Вид и выберите один из пунктов: “крупные значки”, “мелкие значки”, “список”, “таблица”....
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи