IA32體系結構3(x86機器碼概述)

2021-09-13 19:51:28 字數 2108 閱讀 5010

歸根結底,處理器只認識機器語言,處理器會按照機器碼的指示進行動作。

x86體系結構使用指令長度可變的機器語言,一條機器碼指令可以從1位元組到13位元組不等。這個跟arm還是有很大區別,arm32位處理器的話,是定長指令,是32位長度。

8086~80286使用16位指令模式,80386以上處理器也可以工作在16位指令模式,兩者是相容的。16位模式和32位模式,其指令機器碼格式有一些差別,具體格式如下:

32位指令格式的頭兩個位元組,因為不常出現,所以稱為超越字首(override prefix)。第乙個位元組用來修改指令運算元位址的長度,第二個位元組修改暫存器長度。如果80386以上按16位指令模式的機制操作(實模式或保護模式),而使用32位暫存器,則指令的前面出現暫存器長度字首66h。如果按32位指令模式操作(只在保護模式),而且使用32位暫存器,則不存在暫存器長度字首。如果在32位指令模式**現16位暫存器,則要使用暫存器長度字首選擇16位暫存器。在帶有字首的指令中,字首把暫存器及運算元位址的長度從16位轉換到32位,或是從32位轉換到16位。注意,16位指令模式用8位及16位暫存器和定址方式,而32位指令模式使用8位及32位暫存器和定址方式,這是預設的用法。字首可超越這些預設值,因此32位暫存器可以用於16位模式,而16位暫存器可以用於32位模式。

操作碼一般為1~2位元組。

1.第乙個位元組

第乙個位元組格式為(大部分情況,不是所有指令都是這個格式):

(1).前6位表示不同的操作碼。

(2).d-資料流方向

d=1,資料從位於指令第二個位元組的r/m欄位流向暫存器(reg)字段。

d=0,資料從reg欄位流向r/m欄位。

(3).w-位元組或字或雙字

w=0,資料長度是位元組

w=1,資料長度是字或者雙字(80386以上為雙字)

2.第2個位元組

第二個位元組格式為:

(1)mod欄位

mod欄位規定指令的定址方式,mod欄位選擇定址型別及所選的型別是否有位移量。下表列出了在沒有運算元位址長度超越字首(67h)時,16位指令模式下mod欄位各種可能的取值。如果mod欄位的內容是11,它選擇暫存器定址模式。暫存器定址用r/m欄位指定乙個暫存器而不是儲存單元。如果mod欄位的內容是00,01,10,r/m欄位選擇資料儲存器定址方式之一。當mod欄位選擇了資料儲存器定址方式時,00表示定址方式沒有位移量,01表示包含8位符號擴充套件的位移量,10表示包含16位的位移量。比如mov al,[di]指令沒有使用位移量,mov al,[di+2]指令用8位的位移量(+2),mov al,[di+1000h]指令用16位的位移量(+1000h)。

如果是80386及以上處理器,mod=01,表示8位的位移量,mod=10,表示32位的位移量。

下表表示reg欄位和r/m欄位(mod=11)暫存器的分配情況:

如果mod欄位是00,01或者10,則r/m按新的意義理解,程式設計定址方式的定義。以下是16位定址方式對應的r/m**:

以下是32位定址方式對應的r/m**:

以上為常見機器碼的相關格式,因x86屬於複雜指令集,指令種類非常多,不是所有指令都符合這些規則,但是那些指令比較少用到,至少linux0.11核心裡面基本沒有用到。

以上資訊**於《intel微處理器結構、程式設計與介面》第六版。

IA32體系結構1(x86暫存器)

intel architecture 32位處理器,主要以80386為參考。包括以下幾類暫存器 1.通用暫存器 2.段暫存器 3.狀態和控制暫存器 4.指令指標暫存器eip 5.記憶體管理暫存器 6.控制暫存器 通用暫存器有8個,分別是eax ebx ecx edx esi edi ebp esp。...

IA 32體系結構CPU保護模式常見誤區

系統軟體開發系列文章之一 ia 32體系結構cpu保護模式常見誤區 20100603隨筆版,不保證完全的學術嚴謹 立志於成為系統程式設計師的同學們,或者嘗試作業系統開發的程式設計師們,在閱讀ia 32體系結構 以下簡稱80386 保護模式相關資料時,常常被一些表述不清晰,甚至可能存在理解錯誤的資料所...

ARM Cortex M3體系結構

來自 arm cortex m3處理器體系結構.ppt 定位 概況 cortex m3核心 核心流水線分3個階段 取指 解碼和執行。當遇到 分支指令時,解碼階段也包含 的指令取指,這提高了執行的速度。處理器在解碼階段期間自行對分支目的地指令進行取指。在稍後的執行過程中,處理完分支指令後便知道下一條要...