
Enviado:
21 Jun 2012 21:26
por tcpipchip
Ensinei hoje passagem de parametros por pilha
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 FFFA/FFF9
0044 FFFC/FFFB
0033 FFFE/FFFD
BP 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 FFF8/FFF7
* FFFA/FFF9
0044 FFFC/FFFB
0033 FFFE/FFFD
BP FFFF
AGORA MOVA PARA BP, O VALOR DE SP
BP SP FFF8/FFF7 BP
* FFFA/FFF9
0044 FFFC/FFFB
0033 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
é de matar o professor...

Enviado:
27 Jun 2012 20:07
por tcpipchip
http://www.inf.furb.br/~maw/asm51/relogioNUM.exe
Preferivel rodar com o DOSBOX...
Abraços
TCPIPCHIP