Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

2. x86 的寄存器

x86 的通用寄存器有 eaxebxecxedxediesi 。这些寄存器在大多数指令中是可以任意选用的,比如 movl 指令可以把一个立即数传送到 eax 中,也可传送到 ebx 中。但也有一些指令规定只能用其中某个寄存器做某种用途,例如除法指令 idivl 要求被除数在 eax 寄存器中, edx 寄存器必须是 0,而除数可以在任意寄存器中,计算结果的商数保存在 eax 寄存器中(覆盖原来的被除数),余数保存在 edx 寄存器中。也就是说,通用寄存器对于某些特殊指令来说也不是通用的。

x86 的特殊寄存器有 ebpespeipeflagseip 是程序计数器, eflags 保存着计算过程中产生的标志位,其中包括第 3 节 “整数的加减运算”讲过的进位标志、溢出标志、零标志和负数标志,在 intel 的手册中这几个标志位分别称为 CF、OF、ZF、SF。 ebpesp 用于维护函数调用的栈帧,在第 1 节 “函数调用”详细讨论。