Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Возврат результата из процедуры

Ret6

Pop bp

Add bx,ax

Mov bp,sp

Push bp

Фрагмент модуля 2

End main

Codesg ends

Main endp

Mov ax,4c00h

Call far ptr submul

Push dat3

Push dat2

Push dat1

Mov ds, ax

Mov ax, datasg

Main proc far

Codesg segment para public

Datasg ends

Dat3 dw 5h

Dat2 dw 2h

Dat1 dw 10h

Stk ends

Stk segment para stack

Extrn submul far

Передача параметров в дальнюю процедуру через стек

End

Code ends

Put endp

Ret

Put proc far

Code segment

Comdata ends

PUBLIC put

Модуль 2

End main

Code ends

Int21h

Mov dx, offset buf

Mov ah,9

Call put

Mov ds, ax

Mov ax, comdata

Main

Code segment

Comdata ends

Модуль 1

Передача параметров в процедуру через общую память

End main

Count endp

Ret

Pop ax

Pop cx

Mov dx, si

Mov ah, 9h

Push cx

Push ax

Count proc near

Main endp

Mov ax, 4c00h

Call count

Mov ds,ax

Main proc

Code

Data

Передачи параметров в процедуру через регистры

Seg2 ends

Ret

Add endp

Mov res, al

Add proc far

Dseg2 ends

End start

Code ends

;модуль2

GLOBAL res:byte, add:far

EXTRN fix:byte

dseg2 segment 'data'

res db?

seg2 segment 'сode'

…….

mov al, fix; fix в другом модуле

 

 

Через регистры целесообразно передавать в ближнюю процедуру. Необходимо заботиться о том, чтобы применять те регистры, которые не используются при передаче управления.

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

 

Пример.

string db 'строка, $'

mov ax,@data

lea si, string;загрузка регистра

int 21h…

int 21h

EXTRN put: far

comdata segment common 'data'

buf db ‘ $’; в буфере пробелы

assume cs:code, ds:comdata

int 21h

mov ax,4c00h;выход

comdata segment common 'data'

buf db ‘ $’

assume cs:code, ds:comdata

mov buf,’a’

mov buf+1,’s’

mov buf+2,’u’

 

 

Пример

Модуль 1

dw 64 dup(?)

datasg segment para ‘data’

assume cs:codesg, ds:datasg, ss:stk

 

int 21h

mov ax,[bp+6]

mov bx,[bp+8]

mov cx,[bp+10]

 
 


sp

bp+6

bp+8

bp+10

 

 

Способы возврата:

1) Через свободный регистр.

2) С использованием общей памяти, когда объем передаваемой информации велик. Способ требует внимания программиста при чтении возвращаемых результатов.

3) Через стек. Программист резервирует некоторую область стека с целью возврата в этой области результата работы процедуры.

На рисунке показан вариант резервирования стека для возврата двух параметров.

BP
CS
IP
Dat3
Dat2
Dat1
SP
VAR2

VAR1

 

<== предыдущая лекция | следующая лекция ==>
Data ends. Организация интерфейса между процедурами, расположенными в разных модулях | Макрокоманды и макроопределения
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 377; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.