在理解这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的逆向操作。