2. x86的寄存器

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

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