汇编-push入栈指令

32位汇编

执行动作分为两步:

第一步:改变栈地址 

  如果操作数是16位, 则ESP减2; 如果操作数是32位, 则ESP减4

  esp=esp-2或esp=esp-4

第二步:写入数据

 

PUSH指令有3种格式:

 

 

实例:把字符串顺序倒转

.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD

.data
aName BYTE "Abraham Lincoln",0 
nameSize= ($-aName)       ;字符串长度



.code
main PROC
        mov ecx, nameSize   ;字符串长度给计数器  ECX = 00000010h=16
        mov esi,0

     L1:  ;把字符压栈
        movzx eax, aName[esi]
        push eax 
        inc esi 
        loop L1

        mov ecx, nameSize 
        mov esi,0

     L2:
        pop eax 
        mov aName[esi], al 
        inc esi 
        loop L2


        
    INVOKE ExitProcess,0
main ENDP
END  main

 

  

 

 

 

 

posted @ 2023-11-21 19:31  天子骄龙  阅读(293)  评论(0)    收藏  举报