Mov ax,offset value

Передача параметров по ссылке

Передача параметров по значению

Передача параметров

Выполнить трансляцию модуля modul2.asm и получить объектный модуль modul2.obj;

Выполнить трансляцию модуля modul1.asm и получить объектный модуль modul1.obj;

Пример использования директив extrn и public на схеме связи двух модулей Модуль1 и Модуль2.

; -------------------------- Модуль 1 ------------------------

masm

model small

.stack 100h

.data

… …

.code

My_proc_1 proc

My_proc_1 endp

My_proc_2 proc

My_proc_2 endp

; -----Объявляем процедуру My_proc_1 видимой извне ----------

public My_proc_1

start:

….

….

end start

; -------------------------- Модуль 2 ------------------------

masm

model small

.stack 100h

.data

… …

.code

Extrn my_proc_1; объявляем процедуру my_proc_1 внешней

start:

….

….

call my_proc_1; вызов my_proc_1 из модуля 1

end star


Если необходимо собрать два модуля, например modul1.asm и modul2.asm в один исполняемый модуль, необходимо:

3) cкомпановать программу утилитой TLINK командной строкой вида:

tlink /v modul1.obj+ modul2.obj

В итоге будет создан исполняемый модуль modul1.exe и можно будет исследовать данный модуль в отладчике, но при этом в турбо дебагере можно будет увидеть только текст программы modul1. Для того, чтобы войти в вызываемую процедуру, необходимо нажимать клавишу F7. Обработка этой команды приведёт к открытию второго окна, в котором будет выведен текст вызванной процедуры.


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

Параметры можно передавать с помощью одного из следующих механизмов:

– по значению;

– по ссылке;

….

Параметры можно передавать в одном из следующих мест:

– в регистрах;

– в глобальных переменных;

– в стеке;

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

Например, если параметры передаются в регистрах:

mov ax,word ptr value; сделать копию значения

call procedure; вызвать процедуру

Процедуре передается не значение переменной, а ее адрес, по которому процедура должна сама прочитать значение параметра. Этот механизм удобен для передачи больших массивов данных и для тех случаев, когда процедура должна модифицировать параметры, хотя он и медленнее из-за того, что процедура будет выполнять дополнительные действия для получения значений параметров.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: