32 位暫存器

當英特爾生產 80386 時,他們從 16 位處理器升級到 32 位處理器。32 位處理意味著兩件事:被操作的資料都是 32 位,被訪問的記憶體地址是 32 位。為了做到這一點,但仍然與他們早期的處理器相容,他們為處理器引入了全新的模式。它可以是 16 位模式還是 32 位模式 - 但你可以逐個指令地覆蓋此模式,用於資料,定址或兩者!

首先,他們必須定義 32 位暫存器。他們通過簡單地將現有的 8 位從 16 位擴充套件到 32 位並給它們帶有 E 字首的擴充套件名稱來實現這一點:EAXEBXECXEDXESIEDIEBPESP。這些暫存器的低 16 位與之前相同,但暫存器的上半部分可用於 32 位操作,如 ADDCMP。上半部分不能單獨訪問,因為他們使用 8 位暫存器。

處理器必須具有獨立的 16 位和 32 位模式,因為英特爾在許多操作中使用相同的操作碼:16 位模式下的 CMP AX,DX 和 32 位模式下的 CMP EAX,EDX 具有完全相同的操作碼! 這意味著無法在任一模式下執行相同的程式碼:

“立即進入 AX”的操作碼是 0xB8,後跟兩個位元組的立即值:0xB8 0x12 0x34

“立即進入 EAX”的操作碼是 0xB8,然後是立即值的四個位元組:0xB8 0x12 0x34 0x56 0x78

因此,assember 必須知道處理器在執行程式碼時處於什麼模式,以便它知道發出正確數量的位元組。