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