2. x86的寄存器

x86的通用寄存器有eaxebxecxedxediesi。這些寄存器在大多數指令中是可以任意選用的,比如movl指令可以把一個立即數傳送到eax中,也可傳送到ebx中。但也有一些指令規定只能用其中某個寄存器做某種用途,例如除法指令idivl要求被除數在eax寄存器中,edx寄存器必須是0,而除數可以在任意寄存器中,計算結果的商數保存在eax寄存器中(覆蓋原來的被除數),餘數保存在edx寄存器中。也就是說,通用寄存器對於某些特殊指令來說也不是通用的。

x86的特殊寄存器有ebpespeipeflagseip是程序計數器,eflags保存着計算過程中產生的標誌位,其中包括第 3 節 “整數的加減運算”講過的進位標誌、溢出標誌、零標誌和負數標誌,在intel的手冊中這幾個標誌位分別稱為CF、OF、ZF、SF。ebpesp用於維護函數調用的棧幀,在第 1 節 “函數調用”詳細討論。