通用寄存器
寄存器(32位) | 主要用途 | 编号 |
---|---|---|
EAX | 累加器 | 1 |
ECX | 计数 | 2 |
EDX | I/O指针 | 3 |
EBX | DS段的数据指针 | 4 |
ESP | 堆栈指针(栈底) | 5 |
EBP | SS段的数据指针(栈顶) | 6 |
ESI | 字符串的源指针;SS段的数据指针 | 7 |
EDI | 字符串操作的目标指针;ES段的数据指针 | 8 |
范围:0–0xFFFFFFFF
通用寄存器模型
堆栈
向堆栈中存入数据
mov [reg],地址编号(栈底)
mov [reg],地址编号(栈顶)
mov dword ptr ds:[reg-4](栈顶-4),立即数
sub [reg],4(将栈顶向上移动四位)
lea [reg],dword ptr ds:[reg-4](先移动栈顶)
mov dword ptr ds:[reg],立即数(将数值存入栈顶)
读取堆栈中的数据
mov [reg],dword ptr ds:[reg(栈底)-立即数]
[reg(栈顶)+立即数]
push pop指令
push指令:将数值“压”入栈顶,并将栈顶编号-4/-2;
pop指令:将栈顶中的数值“弹”出到寄存器中,并将栈顶编号+4/+2;
格式:
push 立即数/[reg]
push dword ptr ds:[内存编号]
word
pop [reg]
注释:
①PUSH指令后 若为立即数或32位寄存器/内存,则栈顶编号-4;若为16位寄存器/内存,则栈顶编号-2(POP指令同理)
②不允许push8位寄存器或内存
pushad popad指令
将八个寄存器中的数值压入/弹出内存