Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lectures / 12-13

.pdf
Скачиваний:
43
Добавлен:
16.04.2013
Размер:
172.87 Кб
Скачать

Доступ к параметрам в процедуре

Дно стека

Предыд.содерж. стека 1-ый параметр

2-ой параметр

3-ий параметр Адрес возврата Исходное значение BP

8 [BP]

6 [BP]

4 [BP]

2 [BP]

Младшие адреса ОП

Доступ к параметрам в процедуре

Дно стека

Предыд.содерж. стека

1-ый параметр i

2-ой параметр j

3-ий параметр k

Адрес возврата Исходное значение BP

AX

BX

8[bp]

6 [bp]

4 [bp]

2 [bp]

0 [bp]

-2 [bp] -4 [bp]

iequ 8[bp]

jequ 6[bp]

kequ 4[bp]

xx proc near push bp mov bp, sp push ax push bx mov bx, i add bx, j add bx, k

……………….

Младшие адреса ОП

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

call

Print

db

“Этот параметр - в потоке кода”, 0

 

 

Print proc near push bp

mov bp, sp

….; Сохр.регистров ; BX=адр.возврата: mov bx, 2[bp] PrintSym: ...;Печать cmp cs:[bx], 0

jz EndStr

inc bx ;След.симв. jmp PrintSym EndStr: inc bx ;

;Нов.адр.возврата: mov 2[bp], bx …..; Восст.регистр. pop bp

ret

Print endp

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

параметров

ParmBlock dd I

I

dw ?

J

dw ?

K

dw ?

. . .

les bx, ParmBlock call AddEm

. . .

AddEm proc near push ax

mov ax, es:2[bx] ; ax=J add ax, es:4[bx] ;ax=ax+K mov es:[bx], ax ; I=ax pop ax

ret AddEm endp

Локальные переменные

Procedure LocSt (i,j,k: integer); var L,M,N: integer;

10[BP] Пред.сод.стека

 

8[BP]

I

 

6[BP]

J

 

4[BP]

K

 

2[BP]

Адрес возврата

 

[BP]

Исх.значение BP

BP

-2[BP]

AX

 

-4[BP]

L

 

-6[BP]

M

 

-8[BP]

N

SP

 

Младшие адреса

 

IEQU 8[bp]

JEQU 6[bp]

KEQU 4[bp]

LEQU -4[bp]

MEQU -6[bp]

NEQU -8[bp] LocSt proc near

push bp mov bp, sp

push ax sub sp, 6

mov ax,L

. . .

add sp,6 pop ax pop bp ret 6

LocSt endp

Рекурсия

Вычисление N! = 1*2*3*…*N = (N-1)!*N

FUNCTION Fact (K: INTEGER): INTEGER; BEGIN

IF (K=0) THEN Fact := 1

ELSE Fact := Fact (K-1)*K; END;

……………………..

S:= Fact(N);

Рекурсия

push N

call Fact

…………………………….

Fact

proc

 

 

push bp

 

mov

bp,sp

 

cmp

word ptr bp[4],0

 

jnz

cont

 

mov

ax,1

 

jmp

exit

cont: mov

cx,word ptr bp[4]

 

dec

cx

 

push

cx

 

call

Fact

 

imul

ax,bp[4]

exit: pop

bp

 

ret

2

Fact

endp

 

;параметр N ;Fact(N);

;пролог ;пролог

;IF (K=0)

;THEN Fact:=1

;ELSE

;декремент параметра K

;Fact(K-1)

;Fact := Fact(K-1)*K;

;эпилог

Соседние файлы в папке Lectures