8086指令系統---控制轉移指令(二)
執行RET 4指令時(shí),先使返回地址出棧:(IP)←000B,(SP)←0FFC+2=0FFD,然后,(SP)+4=0FFD+4=1000,結果使SP跳過(guò)了堆棧數據而回到了原始位置。本文引用地址:http://dyxdggzs.com/article/201611/322187.htm
5 中斷及中斷返回指令
INT n中斷指令(interrupt),n為中斷類(lèi)型號
IRET 中斷返回指令(return from interrupt)
INTO 溢出則中斷(中斷類(lèi)型為4)
INTn 中斷指令(interrupt),n為中斷類(lèi)型號
執行操作:① 入棧保存FLAGS:(SP) ← (SP)-2,((SP)) ← (FLAGS)
?、?入棧保存返回地址:(SP) ← (SP)-2,((SP)) ← (CS)
(SP) ← (SP)-2,((SP)) ← (IP)
?、?轉中斷處理程序:(IP) ← (n×4)
(CS) ← (n×4+2)
IRET中斷返回指令(return from interrupt)
執行操作:① 返回地址出棧:(IP) ← ((SP)),(SP) ← (SP)+2
(CS) ← ((SP)),(SP) ← (SP)+2
?、?FLAGS出棧:(FLAGS) ← ((SP)),(SP) ← (SP)+2
INTO溢出則中斷(中斷類(lèi)型為4)
執行操作:若OF=1(有溢出),則:
?、?入棧保存FLAGS:(SP) ← (SP)-2,((SP)) ← (FLAGS)
?、?入棧保存返回地址:(SP) ← (SP)-2,((SP)) ← (CS)
(SP) ← (SP)-2,((SP)) ← (IP)
?、?轉中斷處理程序:(IP) ← (4×4)= (10H)
(CS) ← (4×4+2)= (12H)
中斷指令用于調用中斷例行程序(又稱(chēng)中斷服務(wù)程序),這是一種遠調用。完成各種功能的中斷例行程序都有一個(gè)編號,稱(chēng)為中斷類(lèi)型號。各種中斷例行程序的入口地址按中斷類(lèi)型號的順序存儲在一個(gè)表中,這個(gè)表稱(chēng)為中斷向量表。每個(gè)中斷例行程序的入口地址占用4個(gè)字節,因此,它在中斷向量表中的地址可用中斷類(lèi)型號乘4來(lái)求得。執行中斷指令時(shí),首先要入棧保存調用程序執行的現場(chǎng),即當時(shí)的標志寄存器的值和斷點(diǎn)的地址,然后,根據中斷類(lèi)型號(n×4)到中斷向量表中取得中斷例行程序的入口地址,分別送給IP和CS,以實(shí)現調用中斷例行程序的功能。
中斷返回指令I(lǐng)RET的操作和INT指令相反,即從堆棧中取出返回地址和標志位,然后返回到被中斷的程序。
INTO指令隱含的中斷類(lèi)型號為4,因此保存斷點(diǎn)地址和標志位后,從中斷向量表的10H和12H兩個(gè)字中取出中斷例行程序的入口地址,從而轉去運行中斷例行程序。
INT指令(包括INTO)執行后,把IF和TF置0,但不影響其它標志位。
6 處理機控制指令
處理機控制指令包括一組置0或置1標志位的指令,還有一些控制處理機狀態(tài)的指令。
這一組指令分別對標志位CF、DF、IF執行置0、置1或求反的操作,如,CLD指令執行的操作是:DF←0;STD執行的操作是:DF←1。
標志位處理指令只影響本指令指定的標志,而不影響其它標志位。
?、?標志位處理指令 ?、?處理機控制指令
CLC CF置0 NOP 無(wú)操作
STC CF置1 HLT 停機
CMC CF求反 WAIT 等待
CLD DF置0 ESC 轉義
STD DF置1 LOCK 封鎖
CLI IF置0
STI IF置1
6.2 處理機控制指令
NOP 無(wú)操作指令(no operation)
HLT 停機指令(halt)
WAIT 等待指令(wait)
ESC mem 轉義指令(escape)
LOCK前綴封鎖(lock)
NOP 無(wú)操作指令(no operation)
執行操作:不執行任何操作,其機器碼占用1個(gè)字節單元,執行時(shí)間為3個(gè)時(shí)鐘周期,因此,該指令的作用表現在時(shí)間和空間上。時(shí)間上它可使上下兩條指令的執行有一點(diǎn)間隔,這使某些指令的執行,特別是控制硬件接口的指令因為有一點(diǎn)延時(shí)而增加可靠性??臻g上它的位置可在調試指令時(shí)用其它指令來(lái)代替。
HLT 停機指令(halt)
執行操作:使處理機停止軟件的執行并等待一次外部中斷的到來(lái),中斷結束后處理機繼續執行下面的程序。使用該指令的目的通常是為了保持外部硬件中斷與軟件系統的同步。
WAIT 等待指令(wait)
執行操作:測試微處理器的BUSY/TEST管腳,如果執行WAIT指令時(shí),BUSY/TEST=1(指示不忙),則繼續執行下一條指令。如果執行WAIT指令時(shí),BUSY/TEST=0(指示忙),則微處理器等待直到BUSY/TEST管腳變?yōu)?。
ESC mem 轉義指令(escape)
執行操作:mem指定存儲單元,執行ESC指令時(shí),從存儲器取得指令或操作數通過(guò)總線(xiàn)送給8087~80387數值協(xié)處理器。協(xié)處理器能處理算術(shù)運算、函數運算、對數運算等數值運算,其運算速度比使用常規指令寫(xiě)的軟件快的多。
LOCK前綴 封鎖(lock)
執行操作:指令前加LOCK,使得在鎖定指令期間保持鎖存信號LOCK=0,以禁止外部總線(xiàn)上的主控制器或系統其它部件。例如,LOCK MOV AL,[SI]執行時(shí),總線(xiàn)封鎖直至MOV指令執行完畢。
【小結】
1、8086尋址方式
尋址方式 | 操作數地址(PA) | 指令格式舉例 |
立即尋址 | 操作數在指令中給出 | MOV DX,100H ; (DX)←100H |
寄存器尋址 | 操作數在寄存器中 | ADD AX,BX ; (AX)←(AX)+(BX) |
直接尋址 | 操作數的有效地址由指令直接給出 | MOV AX,[100] ; (AX)←(100) MOV AX,VAR ; (AX)←(VAR) |
寄存器 間接尋址 | PA=(DS)×16+(BX)或(SI)或(DI) PA=(SS) ×16+(BP) | MOV AX,[BX] ; (AX)←((DS)×16+(BX)) |
寄存器 相對尋址 | PA=(DS)×16+(BX)或(SI)或(DI)+位移量 PA=(SS) ×16+(BP)+位移量 | MOV AL,MESS[SI]; (AL)←((DS)×16+(SI)+OFFSET MESS) |
基址變址 尋址 | PA=(DS)×16+(BX)+(SI)或(DI) PA=(SS) ×16+(BP) +(SI)或(DI) | MOV AX,[BX+DI]; (AX)←((DS)×16+(BX)+(DI)) |
相對基址 變址尋址 | PA=(DS)×16+(BX)+(SI)或(DI)+位移量 PA=(SS) ×16+(BP) +(SI)或(DI)+位移量 | MOV AX,BUFF(BX+DI); (AX)←((DS)×16+(BX)+(DI)+OFFSET BUFF) |
2、8086指令系統
學(xué)習一條指令時(shí),要注意以下幾個(gè)方面:
?。?) 指令功能--該指令能實(shí)現何種操作,通常指令助記符就是指令功能的英文縮寫(xiě)詞。
?。?) 指令支持的尋址方式--指令中的源操作數和目的操作數字段允許采用的尋址方式。
?。?) 指令對標志位的影響--該指令執行后對各個(gè)標志位的影響。
?。?) 指令的特殊要求--該指令隱含使用或限定使用的寄存器以及需要預置的參數。
評論