32 位暫存器
當英特爾生產 80386 時,他們從 16 位處理器升級到 32 位處理器。32 位處理意味著兩件事:被操作的資料都是 32 位,被訪問的記憶體地址是 32 位。為了做到這一點,但仍然與他們早期的處理器相容,他們為處理器引入了全新的模式。它可以是 16 位模式還是 32 位模式 - 但你可以逐個指令地覆蓋此模式,用於資料,定址或兩者!
首先,他們必須定義 32 位暫存器。他們通過簡單地將現有的 8 位從 16 位擴充套件到 32 位並給它們帶有 E
字首的擴充套件名稱來實現這一點:EAX
,EBX
,ECX
,EDX
,ESI
,EDI
,EBP
和 ESP
。這些暫存器的低 16 位與之前相同,但暫存器的上半部分可用於 32 位操作,如 ADD
和 CMP
。上半部分不能單獨訪問,因為他們使用 8 位暫存器。
處理器必須具有獨立的 16 位和 32 位模式,因為英特爾在許多操作中使用相同的操作碼:16 位模式下的 CMP AX,DX
和 32 位模式下的 CMP EAX,EDX
具有完全相同的操作碼! 這意味著無法在任一模式下執行相同的程式碼:
“立即進入
AX
”的操作碼是0xB8
,後跟兩個位元組的立即值:0xB8 0x12 0x34
“立即進入
EAX
”的操作碼是0xB8
,然後是立即值的四個位元組:0xB8 0x12 0x34 0x56 0x78
因此,assember 必須知道處理器在執行程式碼時處於什麼模式,以便它知道發出正確數量的位元組。