資料傳送類指令【80486】

Enjoy_process發表於2019-03-31

 

資料傳送類指令

一、通用資料傳送指令

二、目標地址傳送指令

三、標誌位傳送指令

四、I/O資料傳送指令


 

一、通用資料傳送指令

 

通用資料傳送指令包括最基本的傳送指令MOV、堆疊操作指令PUSHPOP、資料交換指令XCHG和位元組翻譯指令XLAT

 

(1)傳送指令

MOV(move):最基本的傳送指令。

格式:MOV d,s

操作:(d)⬅(s) ,將由s指定的源運算元送目標運算元d

()表示有關內容

注意點:

1、源運算元可以是8位或者16位暫存器運算元,也可以是儲存器中的某個位元組/字資料,或者是8位/16位立即數

2、目標運算元不允許為立即數,其他同源運算元一樣

3、兩者不能同時為儲存器運算元

4、CS和IP這兩個暫存器不能作為目標運算元(這兩個暫存器的值不能用MOV指令來修改)

5、當運算元採用BX、SI、DI進行間接定址時,預設的段暫存器為DS,訪問資料段;黨採用BP進行間接定址時,預設的段暫存器為SS,訪問堆疊段

 

(2)堆疊操作指令

80486微處理器對堆疊的操作遵循“先進後出”的原則,即最先存入堆疊的資料最後才能取出,最後存入的資料可最先取出。8086微處理器的堆疊採用“向下生長”的編址方式,即越靠近堆疊底部,其地址越大;越靠近堆疊頂部,其地址越小。在堆疊操作的過程中,堆疊指標SP的內容始終指向棧頂的地址(開始時它指向堆疊的底部,地址最高)。在80486微處理器指令系統中,有兩條專用於堆疊操作的指令PUSH和POP。除此之外,子程式呼叫及放回指令、中斷呼叫及返回指令的操作過程,都會對堆疊有影響

PUSH 壓棧指令:將資料壓入堆疊

格式:PUSH s

操作:

(SP-1),(SP-2)←(s)

   SP←SP-2

說明:

1、s是源運算元,表示入棧的字運算元,除了不允許使用立即數外,暫存器、儲存器、段暫存器(CS除外)都可以作為源運算元

2、具體操作過程:先將SP減1,將運算元的高位位元組送入當前SP所指單元中,然後再將SP減1,將運算元的低位位元組又送入當前SP所指單元中。

 

POP 出棧指令:將資料彈出堆疊

格式:POP d

操作:

(d)←(SP+1),(SP)

SP←SP+2

說明:

1、d是目標運算元,表示由堆疊彈出的字運算元,除了立即數和CS段暫存器外,暫存器、儲存器和段暫存器都可以作為目標運算元

2、具體操作過程:先將當前SP所指的棧頂單元的內容彈出,並送入d指定的低位位元組單元,SP內容加1指向下一個單元,然後再將當前SP所指棧頂單元中的內容彈出,並送入d指定的高位位元組單元,SP的內容再加1

 

(3)XCHG(exchange)交換指令

格式:XCHG d,s

操作:交換(d)和(s)

說明:將s表示的源運算元的內容和d表示的目的運算元的內容相互交換,這兩個運算元都可以是位元組或字型別。交換可以在暫存器與暫存器之間、暫存器與儲存單元之間,但是不能在兩個儲存單元之間交換資料。段暫存器與指令指標IP也不能作為源運算元和目標運算元。

(4)XLAT(table look-up translation)位元組轉換指令

格式:XLAT

操作:AL←(BX+AL)

說明:位元組轉換指令XLAT用來將一種位元組程式碼轉換成另一種位元組程式碼,它將BX中的內容(程式碼表格首地址)和AL中的內容(表格偏移量)相加作為有效地址,並讀出地址單元中的內容傳送到AL暫存器中。指令執行後,AL中的內容是所要轉換的程式碼。

 

二、目標地址傳送指令

目標地址傳送指令共有三條,可將運算元的段基址或偏移地址傳送到指定的暫存器中。

(1)LEA(load effective address)取有效地址指令

格式:LEA d,s

操縱: (d)←EA

說明:將源運算元s的有效地址EA傳送到指令指定的暫存器中,源運算元s只能是各種定址方式的儲存器運算元,而暫存器、立即數和段暫存器都不能作為源運算元,目標運算元d可以是一個16位的通用暫存器

 

2)LDS(load data segment register)取指標送暫存器和DS指令

格式:LDS d,s

操作:(d)←(s)

           DS←(s+2)

說明:源運算元s確定一個雙字型別的儲存器操縱數的首地址,目標運算元d指定一個16位的通用暫存器運算元(不允許使用段暫存器)。從s所指定的儲存單元開始的連續4個儲存單元中,取出某變數的地址指標,將其前兩個位元組(即偏移地址值)傳送到目標運算元d所指定的16為通用暫存器中,而將後兩個位元組(即段基址值)傳送到DS段暫存器中

 

(3)LES(load extra segment register)取指標送暫存器和ES指令

格式:LES d,s

操作:(d)←(s)

           (ES)←(s+2)

說明:LES和LDS指令基本類似,所不同的是以ES代替DS

 

三、標誌位傳送指令

標誌位傳送指令的操作涉及標誌暫存器,利用這些指令 ,可以讀出標誌暫存器的內容,也可對標誌暫存器的標誌位進行設定。標誌位傳送指令共有4條,這些指令都是單位元組指令,指令的運算元規定為隱含方式,在指令的書寫格式中不出現,是無運算元指令

(1)LAHF(load status flags into AH)標誌位送AH指令

格式:LAHF

操作:AH←FR的低位位元組,將標誌暫存器FR的低8位狀態標誌送入AH暫存器的相應位。

 

(2)SAHF(store AH into flag register)AH內容送標誌暫存器指令

格式:SAHF

操作:FR的低位位元組←AH,將AH暫存器中的D_{7}D_{6}D_{4}D_{2}D_{0} 位的狀態標誌送入標誌暫存器FR的相應位,而FR的其他位不受影響

(3)PUSHF(push flags register into stack)標誌暫存器壓入堆疊指令

格式:PUSHF

操作:

SP←SP-1,(SP)←FR的高8位

SP←SP-1,(SP)←FR的低8位

 

(4)POPF(pop stack into flag register)堆疊內容彈出到標誌暫存器指令

格式:POPF

操作:

FR的低8位←(SP),SP←SP+1

FR的高8位←(SP),SP←SP+1

 

四、I/O資料傳送指令

80486微處理器指令系統中的I/O指令,只能在AL或AX暫存器與輸入/輸出埠之間進行資料傳送。輸入/輸出埠地址的定址方式包括直接定址和DX暫存器間接定址兩種。

(1)IN(input data from port)輸入指令 

格式:IN 累加器,埠地址

輸入指令允許把一個位元組或一個字資料由輸入埠傳送到AL(位元組)或AX(字)中。若埠採用直接定址方式,則由8位立即數直接給出,可定址範圍為0~255共256個埠。若埠採用DX暫存器間接定址方式,可間接定址64K(65536)個16位埠地址

 

(2)OUT(output data to port)輸入指令 

格式:OUT 埠地址,累加器

 

 

 

相關文章