操作碼列

主操作碼是 1、2 或 3 位元組。其它 3 位操作碼欄位有時使用 ModR/M 位元組進行編碼。較小的編碼欄位可以在主操作碼中定義。這些欄位定義操作的方向、位移量的大小、暫存器編碼、條件程式碼或符號擴充套件。操作碼中的欄位編碼隨操作類別的不同而異。

“操作碼”列給出為每種形式的指令產生的完整目的碼。只要可能,便會按照記憶體中的出現順序以十六進制位元組的形式給出這些程式碼。非十六進制位元組的其它專案的定義如下:

/digit - 0 與 7 之間的數字,表示指令的 ModR/M 位元組只使用 r/m(暫存器或記憶體)運算元。reg 欄位包含給指令的操作碼提供擴充套件的數字。

/r - 表示指令的 ModR/M 位元組同時包含暫存器運算元與 r/m 運算元。

cb、cw、cd、cp - 1 位元組 (cb)、2 位元組 (cw)、4 位元組 (cd) 或 6 位元組 (cp) 值,跟在操作碼的後面,用於指定程式碼偏移量,並可能用於給程式碼段暫存器指定新的值。

ib、iw、id - 指令的 1 位元組 (ib)、2 位元組 (iw) 或 4 位元組 (id) 立即數運算元,跟在操作碼、ModR/M 位元組或基數索引位元組的後面。操作碼確定運算元是否為有符號值。所有的字與雙字都是按照低位位元組在先的形式給出。

+rb、+rw、+rd - 從 0 到 7 的暫存器程式碼,它新增到加號左側給出的十六進制位元組,以形成單個操作碼位元組。暫存器程式碼在“表 3-1”中給出。

+i - 運算元之一是來自 FPU 暫存器堆疊的 ST(i) 時浮點指令中使用的數字。數字 i(範圍從 0 到 7)新增到加號左側給出的十六進制位元組,以形成單個操作碼位元組。

與 +rb、+rw 及 +rd 等術語關聯的暫存器編碼

 

rb

 

 

rw

 

 

rd

 

AL

=

0

AX

=

0

EAX

=

0

CL

=

1

CX

=

1

ECX

=

1

DL

=

2

DX

=

2

EDX

=

2

BL

=

3

BX

=

3

EBX

=

3

 

rb

 

 

rw

 

 

rd

 

AH

=

4

SP

=

4

ESP

=

4

CH

=

5

BP

=

5

EBP

=

5

DH

=

6

SI

=

6

ESI

=

6

BH

=

7

DI

=

7

EDI

=

7