機器指令語句

機器指令語句

機器指令是計算機CPU執行某種操作的命令編碼。指令系統是指某一類型CPU中所有機器指令的集合。8086/8088CPU的指令系統共包含92種基本指令,按照功能可將它們分為6大類:數據傳送指令、算術運算指令、邏輯運算和移位指令、串操作指令、控制轉移指令、處理器控制指令。

指令及其格式

圖1 圖1

機器指令是由1,0組成的特定的二進制數序列。


機器指令格式為:操作碼欄位 地址碼欄位。其中,操作碼欄位表示執行操作類型,地址碼欄位表示運算元的地址或運算元本身。一般的運算元有被運算元,運算元及操作結果三種類型。圖1為機器指令的例子。

指令助記符

為了便於書寫和閱讀,每條指令通常用3個或4個英文縮寫字母來表示。這種縮寫碼叫做指令助記符。圖2是典型的指令助記符。

圖2 圖2

指令符號說明

AH、AL、BH、BL、CH、CL、DH、DL:八位通用暫存器;

AX、BX、CX、DX、SP、BP、DI、SI:十六位通用暫存器;

SP: 堆疊指針;

IP:指令指針;

FLAGS:標誌暫存器;

DI、SI:目的和源變址暫存器;

CS、DS、SS、ES: 段暫存器;

SEG:段暫存器通用符號;

REG:通用暫存器組;

AC:AX或AL/AH(取決於運算元長度)

SRC:源運算元

DST:目的運算元

MEM:存儲器運算元

MEM/REG:存儲器或通用暫存器運算元

DATA:立即數,8位或16位

OPRD:運算元

n:8位立即數

nn:16位立即數

nnnn: 32位立即數

數據傳送指令

數據傳送類指令分為四種:通用數據傳送、累加器專用數據傳送、地址傳送和標誌傳送。

通用數據傳送指令

通用數據傳送指令包括最基本的傳送指令MOV,堆疊操作指令PUSH和POP,數據交換指令XCHG和查表指令XLAT。

機器指令語句 機器指令語句

1.基本的傳送指令MOV。指令一般形式為:MOV DST,SRC;指令功能: (位元組或字);指令執行後,源運算元不變,目標運算元發生變化且與源運算元相同。例如:指令 MOV AL,BL;若該指令執行前,AL=25H,BL=86H,則指令執行後,AL=BL=86H。

2.堆疊操作指令。在8086/8088系統中,無論壓入或彈出操作,都是以字為單位。

(1)入棧指令:指令格式:PUSH OPRD;指令功能:先修改SP-2→SP,然後把一個源運算元(1個字)傳送到由SP所指向的堆疊的頂部。

(2)出棧指令:指令格式:POP OPRD;指令功能:是先將棧頂的一個字彈出送往目的運算元,再修改SP+2→SP。

3.交換指令。指令格式:XCHG OPRD1,OPRD2;指令功能:把二個位元組或字的運算元相互交換。這二個運算元不能是立即數,也不能同時為存儲器運算元。

4.查表指令。指令格式:XLAT SRC_Table;位元組查錶轉換指令,根據表中元素的序號查出對應元素的內容,序號從0,1,2……..。預先(1)將表的首地址存入BX暫存器,(2)要查找元素序號存入AL,執行XLAT指令後,將指定序號對應的元素內容存於AL。

I/O數據傳送指令

I/O(輸入/輸出)指令完成累加器AL(AX)與I/O連線埠間的數據傳送功能。此類指令中,一個運算元為AX(16位)或AL(8位),另一個是I/O連線埠。I/O連線埠的地址範圍總共64K,0000H-FFFFH。

I/O連線埠地址的表示方式:(1)直接方式:若連線埠地址≤FFH,連線埠地址用立即數直接給出;(2)間接方式:若連線埠地址>FFH,需要將I/O連線埠地址存入DX中。用DX可定址100H-0FFFFH的連線埠。

1、連線埠輸入指令IN

指令一般格式:IN AC,PORT

指令功能:把1個位元組或1個字,由輸入連線埠傳送給AL或AX。又分以下幾種形式:

(1)直接方式:地址≤FFH

IN AL,n

IN AX,n (n為連線埠地址)

(2)間接方式:地址>FFH

IN AL,DX

IN AX,DX

2、連線埠輸出指令OUT

指令一般格式:OUT PORT,AC

指令功能:把AL(AX)中的1個位元組(字),傳送到某個輸出連線埠。

(1)直接方式:

OUT n,AL

OUT n,AX (n為連線埠地址)

(2)間接方式:

OUT DX,AL

OUT DX,AX

地址傳送指令

地址傳送指令有3條:

①取有效地址指令LEA。指令一般格式:LEA REG,MEM;指令功能:將源運算元的段內偏移地址傳送給目的運算元。

②地址指針裝入DS指令LDS。指令一般格式: LDS REG,MEM;指令功能:源運算元必須是記憶體運算元,把源運算元(記憶體中的雙字數據:32位邏輯地址)的高字部分(段基址)傳送給DS,低字部分(段內偏移地址)送指令規定的暫存器。

③地址指針裝入ES指令LES。指令一般格式:LES REG,MEM;指令功能:把源運算元(記憶體中的雙字數據)的高位字傳送給ES(16位段基址),低位字傳送給指令規定的16位暫存器中。

標誌傳送指令

8086/8088有四條標誌傳送指令。

1.標誌裝入AH指令。指令格式:LAHF;指令功能:把標誌暫存器的低8傳送給AH。這樣,相應的符號標誌SF、零標誌ZF、輔助進位標誌AF、奇偶標誌PF和進位標誌CF被傳送至AH的對應位。

2、 設定標誌指令。指令格式:SAHF;此指令功能與LAHF相反,是把AH內容傳給標誌暫存器FLAGS的低8位,高8位不受影響。

3、 標誌壓入堆疊指令。指令格式:PUSHF;PUSHF指令先修改堆疊指針,即SP-2→SP,把整個標誌暫存器內容壓入堆疊。指令本身的執行不影響標誌位。

4、 標誌彈出堆疊指令。指令格式:POPF;這條指令把當前堆疊指針所指的一個字,傳送給標誌暫存器,同時修改堆疊指針,即SP+2→SP。

算術運算指令

8086/8088提供加、減、乘、除四種基本的算術操作。運算元可是帶符號數的字或位元組,也可是不帶符號數的字或位元組。若是帶符號數,則用補碼錶示。8086/8088還提供了各種校正操作指令,可以進行BCD碼或ASCⅡ碼錶示的十進制數的算術運算。

二進制加減法指令

(1)不帶進位的加減法指令ADD和SUB。指令用於無符號或帶符號數的位元組或字的加減運算。指令格式及功能:

ADD 目標, 源;目標+ 源→目標

SUB 目標, 源;目標-源→目標

(2)帶進(借)位的加減法指令ADC及SBB。此類指令通常用來實現多位元組、多字的加/減運算。除了在加法運算時須在最低位加上進位位CF值,或在減法運算時在最低位減去借位CF值外,其它與ADD,SUB指令相同。指令格式及功能:

ADC 目標, 源;目標+源+CF→ 目標

SBB 目標, 源;目標-源-CF→目標

(3) 加法和減法的ASCII碼調整指令。對於加法調整,若為非壓縮BCD碼,使用指令AAA;若為壓縮BCD碼,使用指令DAA。對於減法調整,若為非壓縮BCD碼,使用指令AAS;若為壓縮BCD碼,使用指令DAS。

(4)加1/減1指令INC/DEC。指令格式及功能:

INC 目標 ;目標+1→目標

DEC 目標;目標-1→目標

指令位元組較短,運行速度快,主要用於在循環程式中修改地址指針或循環次數。INC及DEC指令運算結果不影響CF標誌,對其他標誌位的影響與加減法指令ADD、SUB相同。

(5)求補及比較指令NEG、CMP。求補NEG及比較CMP指令都屬於特殊的二進制減法運算。

指令格式及功能:NEG 目標 ;0-目標→目標

CMP 目標,源;目標-源→狀態標誌

二進制乘除法指令

(1)無符號數乘法指令:指令格式及功能:MUL SRC ;

(2)帶符號數乘法指令:指令格式及功能:IMUL SRC ;

(3) 無符號數除法指令:指令格式及功能:DIV SRC ;

(4)帶符號數除法指令:指令格式及功能:IDIV SRC ;

(5)轉換指令(符號擴展):CWB: 將AL的符號位擴展到AH中;CWD:將AX的符號位擴展到DX中;

邏輯與移位

為了處理位元組或字中各位信息,8086/8088提供了三種位處理指令:邏輯運算指令、移位類指令和循環移位類指令。

邏輯運算指令包括邏輯與、邏輯或、邏輯非、邏輯異或和邏輯測試。所有的指令都對其運算元按每一位進行邏輯操作;運算元可以是位元組或字。

①邏輯非指令NOT: 邏輯非指令主要用來使某數變反。指令格式及功能:NOT 目標;目標→目標;邏輯非指令不影響狀態標誌。

②邏輯與指令AND:指令格式及功能:AND 目標,源;目標 ∧源→目標和狀態標誌;指令對狀態標誌的影響:執行後將使CF、OF標誌復位;按結果影響PF、ZF、SF標誌;AF標誌不定。

③邏輯或指令OR :指令格式及功能:OR 目標,源;目標 ∨源→目標和狀態標誌;或指令對狀態標誌的影響與AND 指令相似。或操作常用來使目標運算元某位置位。

④邏輯異或指令XOR :此類指令對狀態標誌的影響也與AND指令相似。XOR指令可使目標運算元某些位取反。指令格式:XOR 目標,源。

⑤邏輯測試指令TEST :指令格式及功能:TEST 目標,源;目標 ∧源→目標和狀態標誌。指令的功能是將兩個運算元按位相與,但結果不送回目標,只影響狀態標誌,影響情況同AND指令。TEST指令常用來檢測運算元的某位是1還是0。  

相關詞條

熱門詞條

聯絡我們