計算機系統指令的機器碼錶示方法及8086的尋址方式和指令系統

小智雅匯 發佈 2020-03-24T05:29:55+00:00

該指令的編碼格式為:100010DWMOD 0 REG R/M .數據從寄存器傳出,則D=0;傳遞數據為字節,則W=0;進而,REG=010;另一個操作數是存儲器,所以MOD=00,而R/M=111 .該指令的編碼是在不帶段超越前綴的指令代碼為88 17H.在指令代碼前加一個8位

計算機是通過執行指令來處理各種數據的,因此,一條指令即要指出如何處理數據,同時還應指出數據的來源、操作結果的去向。一般來說指令是由兩部分組成,即操作碼和操作數。

操作碼給出該指令應完成何種操作。

操作數用來描述該指令的操作對象。

在指令中操作碼是不可缺少的,但操作數可以沒有,也可以有一個操作數或兩個操作數。

操作碼錶示計算機執行什麼操作,由一組二進位代碼表示,在彙編語言中用助記符代表。

操作數可能指明了參與操作的數的本身,或規定了操作數的地址。如何尋找操作數,這就是指令的尋址方式,也是由指令編碼格式指出。

根據操作數的個數,指令格式可分為以下幾種:

I 無操作數

控制類指令,比如「HLT」暫停指令。

II 單操作數

只給出一個操作數地址。該操作數可在寄存器或存儲器中,或指令中直接給出立即數。比如「INC CX」

III 雙操作數指令

指令中有兩個操作數,其中一個為目的操作數,另一個為源操作數。一個操作數在寄存器中,另一個在寄存器或存儲器中,或指令中直接給出立即數。不允許兩個都在存儲器中。

IV 三操作數指令

ADC AX, BX ;該指令完成操作數AX、BX和CF位相加。

由此可見,操作數可分為源操作數和目的操作數。

源操作數:只能讀取的操作數。

目的操作數:即可讀取又可寫入(存放操作結果)的操作數。

操作數還可分為數據操作數和地址操作數。

指令的長度主要取決於指令操作碼的長度、操作數的長度和操作數的個數。通常指令字長位數越多,所能表示的操作信息也就越多,指令功能就越豐富。但位數多則指令所占的存儲空間就多,讀取指令的時間就增加。

字長(一般是指CPU的機器字長)是指CUP—次能夠處理的二進位數位數,它都是字節長度(8位二進位數)的1、2、4或8倍,也就是8、16、32或64位。因此,指令字長也是字節的簡單倍數,如一字節指令,二字節指令、三字節指令......。

一條指令中的信息按其含義分成若干個信息段,每一信息段占一個字節或多個字節,且按一定的順序排列,這便於CPU解釋執行。如8086/8088CPU的指令系統,它釆用1-6個指令字節的變字長,它包括:

第1字節:操作碼;

第2字節:尋址方式;

第3-6字節:操作數;

三部分組成。

指令格式如下:

其中,第一個字節:

高6位是操作碼。

W位說明傳遞數據的類型是字(W=1)還是字節(W=0)(Word);

D位標明數據傳送的方向:D=0,數據從寄存器傳出 D=1,數據傳至寄存器;(Destination)。

其中,第二個字節:

REG欄位:寄存器號,用3位編碼尋址8種不同的寄存器,再根據第一字節中W位,選擇8位或16位寄存器。如下圖所示。(對使用段寄存器的指令,REG欄位占2位)

8086指令的二進位編碼非常多,很難以一張表實現指令與機器語言的對照。

為每種基本指令類型給出一個編碼格式,對照格式填上不同的數字表示不同的尋址方式、數據類型,即可求得每條指令的機器碼。

8086指令系統採用變長指令,指令的長度可由1~6字節組成。

機器指令的長度:變長,由操作碼+尋址方式+操作數所需字節數來決定;

彙編指令的長度:彙編指令對應的機器指令的長度。

指令執行的過程就要考慮到指令長度:

① CPU從CS:IP所組成的地址中讀取指令,將這個指令存放到指令緩存器中;

② IP = IP + 所讀指令的字節數;

③ 執行指令緩存器中的內容,回到步驟1,重複這個過程。

1 寄存器間傳送指令的編碼

MOV SP,BX

該指令的功能是將BX寄存器的內容送到SP寄存器中。

MOV指令從10001000(ox88)開始編碼。

該指令的編碼格式為:100010DW MOD REG R/M.

W=1:表示傳送的是字數據;

REG欄位:選擇SP,則REG欄位編碼=100;

D位=1:表示數據傳至所選的寄存器(SP);

MOD=11:因另一個操作數BX也是寄存器。

根據W=1及寄存器名稱為BX,從上圖查得R/M=011。

所以,該指令的2字節編碼為8B E3H

2 寄存器與存儲器間傳送指令的編碼

MOV CL, [BX+l234H]

該指令的功能是將有效地址為(BX+1234H)存儲單元中的數據字節傳送到CL中。

指令的編碼格式為:100010DW MOD REG R/M 數據.

第1、2字節可通過查表得到;第3字節存放16位位移量的低字節34H; 第4字節存放高字節12H 。

所以該指令的4字節編碼為8A 8F 34 12H

3 立即數尋址指令的編碼

MOV [BX+2100H], 0FA50H

指令的功能是將16位立即數送到指定有效地址的字存儲單元中;其中低字節50H送列[BX+2100H]單元,高字節FAH送到(BX+2101H)單元。

該指令的編碼格式為:110011W MOD 000 R/M 數據 數據(若W=1).

指令中不但有16位立即數,還有16位位移量;

所以,該指令的6字節編碼為C7 87 00 21 50 FA H


4 包含段寄存器的指令的編碼

MOV DS, AX

指令的功能是將AX寄存器的內容傳送到數據段寄存器DS。

該指令的編碼格式為:10001110 MOD 0 REG R/M .

段寄存器DS的編碼為11,即REG欄位為11;另一個操作數也是寄存器,所以MOD=11,而R/M欄位應填上AX的三位代碼000 .

所以,該指令的2字節編碼為8E D8H

5 段超越前綴指令的編碼

MOV [BX], DL

指令的功能是將DL寄存器的內容傳送到有效地址為(BX)的字節存儲單元。

該指令(不帶段超越前綴)的編碼格式為:100010DW MOD 0 REG R/M .

數據從寄存器傳出,則D=0;傳遞數據為字節,則W=0;進而,REG=010;另一個操作數是存儲器,所以MOD=00,而R/M=111 .該指令的編碼是在不帶段超越前綴的指令代碼為88 17H.

在指令代碼前一個8位的段超越的綴代碼,代碼的格式為001××110,其中××位表明段超越寄存器。由於段寄存器CS的代碼為01,所以指令的第1個字節的編碼為00101110,即 2EH.

所以,該指令的機器碼為2E 88 17H

6 重點彙編指令

7 主要尋址方式

8 機器碼彙編指令與ASCII

再來一段機器碼、彙編代碼、C語言代碼對照:

-End-

關鍵字: