Documente Academic
Documente Profesional
Documente Cultură
7. A pilha e subrotinas
POP destino,
POPF
Cap7.2
Cap7.3
Offset
Antes
0100h
00FFh
00FEh
00FDh
00FCh
00FBh
00FAh
00F9h
...
(Base)
?
?
?
?
?
?
?
?
...
PUSH AX
PUSHF
;instruo 1
;instruo 2
Depois de 1
<- SP
?
12h
34h
?
?
?
?
?
<- SP
Depois de 2
?
12h
34h
56h
78h
?
?
?
AX
1234h
<- SP
FLAGS
5678h
Cap7.4
Offset
Antes
0100h
00FFh
00FEh
00FDh
00FCh
00FBh
00FAh
00F9h
...
?
12h
34h
56h
78h
?
?
?
...
POPF
POP AX
;instruo 1
;instruo 2
Depois de 1
<- SP
?
12h
34h
56h
78h
?
?
?
<- SP
Depois de 2
?
12h
34h
56h
78h
?
?
?
<- SP
AX
antes
F0D3h
depois
1234h
FLAGS
antes
006Ah
depois
5678h
Cap7.5
(Base)
Cap7.6
Cap7.7
END
Cap7.8
Cap7.9
Instruo de chamada:
CALL nome
Instruo de retorno:
RET
Cap7.10
Mecanismo de chamada:
Offset
Seg. de Cdigo
MAIN PROC
...
...
CALL SUB1
1012h ;prxima instruo
SP ->
SUB1 PROC
1200h ;primeira instruo
...
...
1300h RET
Antes
Depois
IP
1012h
IP
1200h
Pilha
?
?
?
?
?
?
?
Pilha
?
12h
10h
?
?
?
?
SP->
0100h
00FFh
00FEh
00FDh
00FCh
00FBh
00FAh
Mecanismo de retorno:
Offset
Seg. de Cdigo
MAIN PROC
...
...
CALL SUB1
1012h ;prxima instruo
SUB1 PROC
1200h ;primeira instruo
...
...
1300h RET
SP ->
Antes
Depois
IP
1300h
IP
1012h
Pilha
?
12h
10h
?
?
?
?
Pilha
?
12h
10h
?
?
?
?
SP->
0100h
00FFh
00FEh
00FDh
00FCh
00FBh
00FAh
Cap7.11
Um exemplo de subrotina:
TITLE MULTIPLICACAO POR SOMA E DESLOCAMENTO
.MODEL SMALL
.STACK 100h
.CODE
PRINCIPAL PROC
...
;supondo a entrada de dados
CALL MULTIPLICA
...
;supondo a exibio do resultado
MOV AH,4Ch
INT 21h
PRINCIPAL
ENDP
MULTIPLICA PROC
;multiplica dois numeros A e B por soma e deslocamento
;entradas: AX = A, BX = B, numeros na faixa 00h - FFh
;saida:
DX = A*B (produto)
PUSH AX
PUSH BX
;salva os conteudos de AX e BX
AND DX,0
;inicializa DX em 0
;repeat
;if B e' impar
TOPO:
TEST BX,1
;B e' impar?
JZ PT1
;nao, B e' par (LSB = 0)
;then
ADD DX,AX
;sim, entao produto = produto + A
;end_if
PT1:
SHL AX,1
;desloca A para a esquerda 1 bit
SHR BX,1
;desloca B para a direita 1 bit
;until
JNZ TOPO
;fecha o loop repeat
POP BX
POP AX
;restaura os conteudos de BX e AX
RET
;retorno para o ponto de chamada
MULTIPLICA ENDP
Cap7.12
END PRINCIPAL
Cap7.13
Exerccios sugeridos:
3) O seguinte mtodo pode ser usado para gerar nmeros aleatrios na faixa
de 1 a 32767:
- inicie com qualquer nmero na faixa acima;
- desloque uma casa binria esquerda;
- substitua o bit 0 pelo XOR dos bits 14 e 15;
- limpe o bit 15.
Escreva as seguintes rotinas (procedures):
a) subrotina LEIA que permita ao usurio entrar um nmero binrio e
armazen-lo em AX (baseie-se no trecho para entrada binria da pgina
6.16);
Cap7.14