Передача параметров по ссылке
Передача параметров по значению
Передача параметров
Выполнить трансляцию модуля 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; вызвать процедуру
Процедуре передается не значение переменной, а ее адрес, по которому процедура должна сама прочитать значение параметра. Этот механизм удобен для передачи больших массивов данных и для тех случаев, когда процедура должна модифицировать параметры, хотя он и медленнее из-за того, что процедура будет выполнять дополнительные действия для получения значений параметров.