在理解这4个操作符之前,应该先理解STACK的概念。

之前讲到2个内存交换数据可以通过数据寄存器 或 XCHG操作符来实现,这次我们用PUSH和POP来实现下吧

;test_10

INCLUDE irvine32.inc
INCLUDELIB Irvine32.lib
INCLUDELIB KERNEL32.LIB

.data
val1 DWORD 10h
val2 DWORD 20h

.code
main PROC
	push val1
	push val2
	pop val1
	pop val2
		
	exit
main endp
END main

PUSHAD和POPAD是一对.

PUSHAD将通用寄存器的内容压入堆栈。这些寄存器按以下顺序存储到堆栈:EAX、ECX、EDX、EBX、EBP、ESP(原始值)、EBP、ESI 及 EDI(如果当前操作数大小属性为 32);

POPAD则是PUSHAD的逆向操作。

posted on 2011-11-06 15:50  锅子  阅读(644)  评论(0编辑  收藏  举报