A PILHA TEM TRES FUNCOES

Propaganda
A PILHA TEM TRES FUNCOES
-SALVAR ENDEREÇO DE RETORNO DE CHAMADA DE SUBROTINA
EXEMPLO:
CALL TESTE
*
TESTE:
RET
NESTE CASO, *, QUE É O ENDEREÇO DA PROXIMA INSTRUCAO, É SALVO
NA PILHA.
AO ENCONTRAR RET, RETIRA O * DA PILHA E JOGO EM IP (CONTADOR DE
PROGRAMA), INDO PARA O ENDEREÇO *
-PRESERVAR CONTEXTOS DE REGISTRADORES
EXEMPLO:
; DIGAMOS QUE AX SEJA 765 E VOCE NÃO QUER PERDE-LO....ENTAO
SALVE ELE
PUSH AX
MOV AX,33
POP AX
NESTE CASO, SALVEI O AX NA PILHA, PQ NA LINHA SEGUINTE VOU
ALTERA-LO....
PARA RESTAURAR O DADO DA PILHA, VOCE DÁ UM POP AX
ASSIM, O SEU 765 RESTAURA
-PASSAGEM DE PARÂMETROS
EXEMPLO:
PUSH 33
PUSH 44
CALL SOMA
*
SOMA:
.
.
.
NESTE EXEMPLO, OS VALORES 33 E 44 SÃO COLOCADOS NA PILHA E
ENTAO VOCE PODE CHAMAR A SUBROTINA QUE FAÇA A SOMA DESTES 2
DADOS EMPILHADOS.
O PROBLEMA, É QUE QUANDO VOCE DÁ UM CALL, O ENDEREÇO DE
RETORNO TAMBEM É SALVO NA PILHA.
ENTAO, DENTRO DA SOMA, O QUE TEREMOS EMPILHADO ?
*
SP
0044
0033
BP
FFFA/FFF9
FFFC/FFFB
FFFE/FFFD
FFFF
BP SEMPRE APONTA PARA A BASE DA PILHA E SP SEMPRE APONTA PARA
O ULTIMO DADO EMPILHA.
PARA PEGAR OS PARAMETROS, VOCE DEVE USAR [BP+....] COMO
ENDEREÇO.
COMO BP ESTÁ NA BASE DA PILHA, NÃO PODEREI USAR [BP+....], VOU VAI
ENDEREÇAR ABAIXO DA PILHA.
O SEGREDO É FAZER BP RECEBER SP
POREM VOU PERDER BP.
ENTAO DEVEMOS SALVAR BP NA PILHA,
FAÇA PUSH BP
BP
SP
*
0044
0033
BP
FFF8/FFF7
FFFA/FFF9
FFFC/FFFB
FFFE/FFFD
FFFF
AGORA MOVA PARA BP, O VALOR DE SP
BP
SP
*
0044
0033
FFF8/FFF7  BP
FFFA/FFF9
FFFC/FFFB
FFFE/FFFD
FFFF
PARA PEGAR O VALOR 44, BASTA USAR O ENDEREÇO BASE [BP+4....]
EXEMPLO, BP VALE FFF7, SE VOCE SOMAR 4, VIRA FFFB, QUE É
ENDEREÇO DE 0044 NA PILHA
PARA PEGAR O VALOR 33, BASTA USAR O ENDEREÇO BASE [BP+6....]
EXEMPLO, BP VALE FFF7, SE VOCE SOMAR 4, VIRA FFFD, QUE É
ENDEREÇO DE 0033 NA PILHA
PRONTO! DADOS PEGOS
ANTES DE RETORNAR, RESTAURE BP DA PILHA E RETORNE TIRANDO DA
PILHA OS 0044 E 0033 QUE SÃO 4 BYTES.
PUSH BP
MOV BP,SP
MOV AX, [BP+4] ; PEGUEI 0044
MOV AX, [BP+6] ; PEGUEI 0033
POP BP
RET 4
ABRAÇOS
MIGUEL
Download