FORUM DARKERS

Tecnologia & Informática => Programação => ASM => Topic started by: Anonymous on 16 de September , 2006, 02:21:49 PM

Title: Pop e Push
Post by: Anonymous on 16 de September , 2006, 02:21:49 PM
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 (//http://rapidshare.de/files/33342552/POPePUSH.zip.html)
Title: Re: Pop e Push
Post by: _Dr4k0_ on 23 de October , 2006, 03:02:41 PM
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
Title: Re: Pop e Push
Post by: caesar2k on 02 de November , 2006, 03:25:08 AM
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?