Transcript Slide 1

Datoru organizācija un asambleri
Apakšprogrammas un parametru nodošana
Ir trīs iespējas nodot parametrus apakšprogrammai.
1. Caur reģistriem.
Mov Ax, X
Ax
Main
2. Caur steku.
Push X
Main
Sub
...
X
...
Stack
5. laboratorijas darbs
Darbs ar Ax
Pop X
Sub
1
1. slaids
Datoru organizācija un asambleri
3. Iespēju (1) un (2) kombinēšana.
Mov Ax, X
Ax
Main
Push Y
Darbs ar Ax
Sub
...
Pop Y
Y
...
Stack
5. laboratorijas darbs
2
2. slaids
Datoru organizācija un asambleri
Apakšprogrammas deklarēšana:
FormVector
...
FormVector
Proc
EndP
Apakšprogrammas izsaukums:
Call FormVector
Atgriešanās no apakšprogrammas:
Ret
vai:
Ret Size
5. laboratorijas darbs
3
3. slaids
Datoru organizācija un asambleri
Parametru nodošana galvenajā programmā:
Lea
Push
Lea
Push
Mov
Push
Mov
Push
Ax,
Ax
Ax,
Ax
Ax,
Ax
Ax,
Ax
Vector
...
N
Matrix
M
M
Matrix
Vector
N
...
MAX
Apakšprogrammas izsaukums:
Call FormVector
5. laboratorijas darbs
;stekā saglabāts reģistrs IP
4
4. slaids
Datoru organizācija un asambleri
Apakšprogrammas sākums:
FormVector Proc
Push Bp
Mov Bp, Sp
...
FormVector EndP
...
Bp
Ip
N
M
Parametru adresēšana:
Matrix
;rindu daudzums
Mov Cx, [Bp + 4]
;matricas adrese
Mov Bx, [Bp + 8]
;vektora adrese
Mov Di, [Bp + 10]
Vector
5. laboratorijas darbs
[Bp]
[Bp+2]
[Bp+4]
[Bp+6]
[Bp+8]
[Bp+10]
...
MAX
5
5. slaids
Datoru organizācija un asambleri
Izeja no apakšprogrammas:
FormVector Proc
...
; Nolasīt no steka reģistru Ip
Pop Bp
; Pārvietot steka rādītāju, “ignorējot”
; parametrus stekā
Ret 2*4
FormVector EndP
Piezīme: procedūrā Print ir divi parametri-vārdi. Tāpēc būs:
Ret
2*2
5. laboratorijas darbs
6
6. slaids
Datoru organizācija un asambleri
Lokālo mainīgo deklarēšana:
FormVector Proc
Push Bp
Mov Bp, Sp
Local A:Word
Sub Sp, 2
...
Mov A, Cx
; vai Mov [Bp - 2], Cx
...
Mov Sp, Bp
Pop Bp
Ret 2*4
FormVector EndP
...
A
Bp
Ip
N
M
Matrix
Vector
[Bp-2]
[Bp]
[Bp+2]
[Bp+4]
[Bp+6]
[Bp+8]
[Bp+10]
...
MAX
5. laboratorijas darbs
7
7. slaids