x86的通用寄存器有eax
、ebx
、ecx
、edx
、edi
、esi
。這些寄存器在大多數指令中是可以任意選用的,比如movl
指令可以把一個立即數傳送到eax
中,也可傳送到ebx
中。但也有一些指令規定只能用其中某個寄存器做某種用途,例如除法指令idivl
要求被除數在eax
寄存器中,edx
寄存器必須是0,而除數可以在任意寄存器中,計算結果的商數保存在eax
寄存器中(覆蓋原來的被除數),餘數保存在edx
寄存器中。也就是說,通用寄存器對於某些特殊指令來說也不是通用的。
x86的特殊寄存器有ebp
、esp
、eip
、eflags
。eip
是程序計數器,eflags
保存着計算過程中產生的標誌位,其中包括第 3 節 “整數的加減運算”講過的進位標誌、溢出標誌、零標誌和負數標誌,在intel的手冊中這幾個標誌位分別稱為CF、OF、ZF、SF。ebp
和esp
用於維護函數調用的棧幀,在第 1 節 “函數調用”詳細討論。