x86的通用寄存器有eax
、ebx
、ecx
、edx
、edi
、esi
。这些寄存器在大多数指令中是可以任意选用的,比如movl
指令可以把一个立即数传送到eax
中,也可传送到ebx
中。但也有一些指令规定只能用其中某些寄存器做某种用途,例如除法指令idivl
要求被除数在eax
寄存器中,edx
寄存器必须是0,而除数可以在任意寄存器中,计算结果的商数保存在eax
寄存器中(覆盖原来的被除数),余数保存在edx
寄存器中。也就是说,通用寄存器对于某些指令而言不是通用的。
x86的特殊寄存器有ebp
、esp
、eip
、eflags
。eip
是程序计数器,eflags
保存着计算过程中产生的标志位,包括“整数的加减运算”一节讲过的进位、溢出、零、负数四个标志位,在x86的文档中这几个标志位分别称为CF、OF、ZF、SF。ebp
和esp
用于维护函数调用的栈帧,我们以后再详细讨论。