PUSH reg/mem16
PUSH reg/mem32
PUSH inm32
POP reg/mem16
POP reg/mem32
pushfd
popfd
pushfd ;保存标志寄存器
;
;任意语句序列
;
popfd ;恢复标志寄存器
.data saveFlags DWORD ? .code pushfd ;标识寄存器内容入栈 pop saveFLags ;复制给一个变量下述语句从同一个变量中恢复标识寄存器内容:
push saveFlags ;被保存的标识入栈 popfd ;复制给标识寄存器
MySub PROC
pushad ;保存通用寄存器的内容
.
.
mov eax,...
mov edx,...
mov ecx,...
.
.
popad ;恢复通用寄存器的内容
ret
MySub ENDP
必须要指岀,上述示例有一个重要的例外:过程用一个或多个寄存器来返回结果时,不应使用 PUSHA 和 PUSHAD。假设下述 ReadValue 过程用 EAX 返回一个整数;调用 POPAD 将会覆盖 EAX 中的返回值:
ReadValue PROC
pushad ;保存通用寄存器的内容
.
.
mov eax rreturn_value
.
.
popad ;覆盖 EAX !
ret
ReadValue ENDP
;字符串翻转(Revstr.asm)
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
aName BYTE "Abraham Lincoln",0
nameSize = ($-aName)-1
.code
main PROC
;将名字压入堆栈
mov ecx,nameSize
mov esi,0
L1: movzx eax,aName[esi] ;获取字符
push eax ;压入堆栈
inc esi
loop L1
;将名字逆序弹出堆栈
;并存入aName数组
mov ecx,nameSize
mov esi,0
L2: pop eax ;获取字符
mov aName[esi],al ;存入字符串
inc esi
loop L2
INVOKE ExitProcess,0
main ENDP
END main
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有