Pop e Push

Started by Anonymous, 16 de September , 2006, 02:21:49 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Anonymous

Programa que eu fiz que explica esses dois comandos:;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;-         Testando PUSH e POP                                 -
;- Push -> Coloca um valor na pilha, seria como salvar algo na -
;- memória para ser usado depois.                              -
;- Pop  -> Faz o contrário de push, tira um valor da pilha     -
;- Ou seja, se salvarmos EBX com o valor de 1 e depois alterar--
;- mos o seu valor (sem salva-lo na pilha), e puxa-lo novamente-
;- com o POP, seu valor será 1 novamente.                      -
;- O que esse programa faz é isso, é lógico, que ele não irá   -
;- apresentar a mensagem de erro por estar programa para que is-
;- so não aconteça (a não ser que você mude alguma coisa), mas -
;- é bem interessante e bem comentado.                         -
;-                                                             -
;- Obs: Para mudar a mensagem de sucesso remova toda a linha 33-
;-                                                             -
;- Conteúdo da linha 35: pop ebx                               -
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


format PE GUI 4.0     ;formato do programa
include    'include\win32ax.inc'     ;blbiblioteca
start:     ;inicio do código
invoke     MessageBox,0,'ASM: Testando POP e PUSH','POP & PUSH',MB_OK     ;mensagem
mov     ebx,1     ;move para o registrador EBX o valor 1
push     ebx     ;salva (empurra) na pilha o valor de EBx (1)
invoke     MessageBox,0,'O valor de EBX agora é 1','POP & PUSH',MB_OK     ;mostra mensagem
mov     ebx,2     ;move para o registrador EBX o valor de 2
cmp     ebx,2     ;compara se EBX é igual a 2
JE     e2     ;se EBX=2 vai para e2
JNE     ne2     ;se EBX!2 vai para ne2

e2:
invoke     MessageBox,0,'O valor de EBX agora é 2','POP & PUSH',MB_OK     ;mensagem
invoke     MessageBox,0,'Agora restauramos o valor de EBX...','POP &PUSH',MB_OK
pop     ebx     ;restaura da pilha o valor de EBX (1)
cmp     ebx,1     ;compara para ver se EBX tem o valor de 1
JE     e1     ;se tiver, vai para e1
JNE     ne1     ;senão vai para ne1

ne2:
invoke     MessageBox,0,'EBX é igual a 2',':[ - ERRO',MB_ICONERROR+MB_OK   ;mensagem
ret     ;retorna ao Windows

e1:
invoke     MessageBox,0,'EBX é igual a 1',':] - SUCESSO',MB_ICONINFORMATION+MB_OK ;mensagem de sucesso (EBX=1)
ret     ;retorna ao sistema

ne1:
invoke     MessageBox,0,'EBX é igual a 2',':[ - ERRO!',MB_ICONERROR+MB_OK  ;mensagem de erro (EBX=2)
ret     ;retorna ao sistema

data import     ;importação de comandos
library user32,'USER32.DLL'     ;importa a DLL USER32.DLL
import user32,\
MessageBox,'MessageBoxA'     ;importar de USER32.DLL o comando MenssageBox
end data     ;fim da importação

Compile com o fasmw, que não tiver faça download do exe com o código-fonte. Link: http://rapidshare.de/files/33342552/POPePUSH.zip.html

_Dr4k0_

Legal..

E também é bom lembrar que existe o pop e push no C..Estava olhando o C Completo e Total e vi explicando eles...achei meio complicadinho mais é legal..

e só lembrando que no C é pop e push pois é case sensitive
100% Livre!!!Livre para escolher o que há de melhor no Windows e Linux. Livre de preconceito direto ou inverso!
Adote essa filosofia e tenha mais chance de sucesso profissional.

caesar2k

cara, esse treco de push e pop não entra na minha cabeça de high level programming. outro dia vi um push eax \ pop edi e o valor que tava em eax foi pro edi... como assim?! hahaha
e claro, outros pushs sem respectivos pops, vai pra onde? acaba com a memória do processador? *perdido*
ainda mais "absurdo" é fazer push eax \ mov eax, esp, daí que não me entra na cabeça mesmo! Pra mim esp era stack, como colocar tudo dentro de eax?! Já que estamos falando disso, poderiam me clarear as idéias?