intel X86指令格式分析

2021-06-05 01:01:28 字數 1422 閱讀 5256

先說一下暫存器編號

0         1        2         3         4        5        6       7

eax  ecx  edx   ebx   esp   ebp   esi   edi

intel指令格式如下圖所示:

mod為00、01和10時,r/m=000(eax)時,有效位址分別是[eax]、disp8[eax]和disp32[eax],mode為11時,運算元是暫存器eax。mod與r/m共5位,能構成32種組合。

opcode是操作碼,1或2個位元組,有時reg/opcode也可以擴充套件用來表示操作資訊。

r/m為100時表示modr/m後帶有sib;r/m為101時表示sib後是乙個disp32,如果沒有sib,直接跟在在modr/m後

scale為00、01、10、11指示index放大0、2、4、8倍

index為index暫存器序號

base為base暫存器序號

下面舉例說明:

add eax, eax 指令碼:03 c0,opcode為03,mod為11,r/m為000

add eax, 1 指令碼:83 c001,opcode為03,mod為11,r/m為000,由於83表示,表示還帶乙個imm8,就是最後的01

從中不難看出,暫存器作為運算元時指令會更短。

mov memory to reg  操作碼:1000 101w : mod reg r/m

//直接定址

mov ecx,[0x00417178]

8b 0d 78 71 41 00

mod=00 rm=101 modr/m=001

rm=101表示disp32

//暫存器間接定址

mov ecx, [esi]

8b 0e

mod=00 rm=110 modr/m=001

//暫存器相對定址

mov ecx, [8+esi]

8b 4e 08

mod=01 rm=110 modr/m=001

mod為01表示操作碼還包括乙個disp8

//基址變址定址

mov ecx, [ebx + esi]

8b 0c 33

mod=00 rm=100 modr/m=001

rm=100表示modr/m後是sib,

sib=33(00 110 011) ss=00 index=[esi] base=[ebx]

//相對基址變址定址

mov ecx, [2*ebx + esi + 128]

8b 8c 5e 80 00 00 00

mod=10 rm=100 modr/m=001

rm=100表示modr/m後是sib

sib=5e(01 011 110) ss=01 index=[ebx*2] base=[esi]

x86指令格式

當計算機處理器晶元執行時,它讀取儲存在記憶體中的指令碼。每個指令碼集合可能包含乙個或多個位元組的資訊,這些資訊指示處理器完成特定的任務。每條指令碼都是從記憶體中讀取的,指令碼所需的資料也是儲存在記憶體中並從記憶體中讀取。包含指令碼的記憶體位元組和包含處理器使用的資料的位元組沒有區別。為了區分資料和指...

8086指令格式

8086的指令使用的是1 6byte s 的變長指令。由3個部分組成 舉幾個例子,下圖是1byte 6bytes不同長度指令的劃分 先來翻譯一下上面的各個部分 d destination 目的運算元,w word 字,mod 模式 方式,reg register 暫存器,r m register m...

4 1 指令格式

返回目錄 計算機組成原理筆記目錄 2019 王道考研 4.1 指令格式 本章總覽 1.指令格式 如何用二進位制 表示指令 2.指令定址方式 給出要操作的物件的位址 3.cisc和risc 兩種設計方向 1.指令 又稱機器指令 是提示計算機執行某種操作的命令,是計算機執行的最小功能單位 一台計算機的所...