- 馮博琴《微型計算機原理與接口技術》(第3版)【教材精講+考研真題解析】講義與視頻課程【20小時高清視頻】
- 圣才電子書
- 5911字
- 2021-06-04 17:23:59
3.3 8086指令系統

視頻二維碼(掃碼觀看)
掌握:
指令碼的含義
指令對操作數的要求
指令的對標志位的影響
指令的功能
8086指令系統
從功能上包括六大類:
數據傳送
算數運算
邏輯運算和移位
串操作
程序控制
處理器控制
一、數據傳送指令
通用數據傳送
輸入輸出
地址傳送
標志位操作
1通用數據傳送

特點:該類指令的執行對標志位不產生影響
(1)一般數據傳送指令
一般數據傳送指令MOV
格式:MOV dest,src
操作:src→dest
例:MOV AL,BL
注意點:
兩操作數字長必須相同;
兩操作數不允許同時為存儲器操作數;
兩操作數不允許同時為段寄存器;
在源操作數是立即數時,目標操作數不能是段寄存器;
IP和CS不作為目標操作數,FLAGS一般也不作為操作數在指令中出現。
一般數據傳送指令應用例:
將(*)的ASCII碼2AH送入內存數據段1000H開始的100個單元中。
題目分析:
確定首地址
確定數據長度
寫一次數據
修改單元地址
修改長度值
判斷寫完否?
未完繼續寫入,否則結束

程序段:

上段程序在代碼段中的存放形式:
設CS=109EH,IP=0100H,則各條指令在代碼段中的存放地址如下:

數據段中的分布:
送上2AH后數據段中相應存儲單元的內容改變如下:

(2)堆棧操作指令
掌握:
有關堆棧的概念
棧頂、棧首、棧底
堆棧指令的操作原理
執行過程,執行結果
堆棧操作的原則:
先進后出
以字為單位

壓棧指令PUSH
指令執行過程:
SP-2→SP
操作數高字節→SP+1
操作數低字節→SP

壓棧指令的操作
設AX=1234H,SP=1200H
執行PUSH AX指令后堆棧區的狀態:

出棧指令POP
指令執行過程:
SP→操作數低字節
SP+1→操作數高字節
SP←SP+2

出棧指令的操作
執行POP AX
堆棧操作指令說明

指令的操作數必須是16位的;
操作數可以是寄存器或存儲器兩單元,但不能是立即數;
不能從棧頂彈出一個字給CS;
PUSH和POP指令在程序中一般成對出現;
PUSH指令的操作方向是從高地址向低地址,而POP指令的操作正好相反。
堆棧操作指令例:

(3)交換指令
格式:XCHG REG,MEM/REG
注:兩操作數必須有一個是寄存器操作數,不允許使用段寄存器。
例:
XCHG AX,BX
XCHG [2000],CL
(4)查表指令
格式:XLAT
說明:用BX的內容代表表格首地址,AL內容為表內位移量,BX+AL得到要查找元素的偏移地址。
操作:將BX+AL所指單元的內容送AL查表指令。
例:
數據段中存放有一張ASCII碼轉換表,設首地址為2000H,現欲查出表中第11個代碼的ASCII碼

查表指令例
可用如下指令實現:

執行后:AL=42H
還可用其他方法實現,如:
MOV BX,2000H
MOV AL,[BX+0BH]
(5)字位擴展指令
將符號數的符號位擴展到高位;
指令為零操作數指令,采用隱含尋址,隱含的操作數為AX及AX,DX;
無符號數的擴展規則為在高位補0;
字節到字的擴展指令。
格式:CBW
操作:將AL內容擴展到AX
規則:若最高位=1,則執行后AH=FFH
若最高位=0,則執行后AH=00H
字位擴展指令例
判斷以下指令執行結果:
MOV AL,44H
CBW
MOV AX,0AFDEH
CWD
MOV AL,86H
CBW
2輸入輸出指令
掌握:
指令的格式及操作
指令的兩種尋址方式
指令對操作數的要求
專門面向I/O端口操作的指令
指令格式:
輸入指令:IN acc,PORT
輸出指令:

指令尋址方式
根據端口地址碼的長度,指令具有兩種不同的端口地址表現形式。
(1)直接尋址:端口地址為8位時,指令中直接給出8位端口地址;尋址256個端口。
(2)間接尋址:端口地址為16位時,指令中的端口地址必須由DX指定;可尋址64K個端口。
I/O指令例
IN AX,80H
MOV DX,2400H
IN AL,DX
OUT 35H,AX
OUT AX,35H
3地址傳送指令

(1)取偏移地址指令LEA
操作:將變量的16位偏移地址取出送目標寄存器,當程序中用符號地址表示內存偏移地址時,須使用該指令。
格式:LEA REG,MEM
指令要求:源操作數必須是一個存儲器操作數,目標操作數通常是間址寄存器。
(2)LEA指令
比較下列指令:
MOV SI,DATA1→符號地址
執行結果:SI=1234H
LEA SI,DATA1
執行結果:SI=DATA1
MOV BX,[BX]
執行結果:BX=7788H
LEA BX,[BX]
執行結果:BX=1100H

LEA指令在程序中的應用
將數據段中首地址為MEM1的50個字節的數據傳送到同一邏輯段首地址為MEM2的區域存放。編寫相應的程序段。



4標志位操作指令

(1)LAHF,SAHF
LAHF
操作:將FLAGS的低8位裝入AH

(2)PUSHF,POPF
針對FLAGS的堆棧操作指令
將標志寄存器壓棧或從堆棧彈出

視頻二維碼(掃碼觀看)
二、算術運算類指令
加法運算指令
減法運算指令
乘法指令
除法指令
注意:算術運算指令的執行大多對狀態標志位會產生影響
1加法指令

注意:加法指令對操作數的要求與MOV指令相同
(1)ADD指令
格式:ADD OPRD1,OPRD2
操作:OPRD1+OPRD2→OPRD1
注意:ADD指令的執行對全部6個狀態標志位都產生影響。
ADD指令例
MOV AL,78H
ADD AL,99H
注意:指令執行后6個狀態標志位的狀態。

標志位狀態:
CF=1 SF=0
AF=1 ZF=0
PF=1 0F=0
(2)ADC指令
指令格式、對操作數的要求、對標志位的影響與ADD指令完全一樣。
指令的操作:OPRD1+OPRD2+CF→OPRD1
ADC指令多用于多字節數相加,使用前要先將CF清零。
ADC指令應用例——求兩個20B數的和。


(3)INC指令
格式:INC OPRD→不能是段寄存器或立即數
操作:OPRD+1→OPRD
常用于在程序中修改地址指針。
2減法指令

注意:減法指令對操作數的要求與對應的加法指令相同。
(1)SUB指令
格式:SUB OPRD1,OPRD2
操作:OPRD1-OPRD2 OPRD1
注意:對標志位的影響與ADD指令同。
(2)SBB指令
指令格式、對操作數的要求、對標志位的影響與SUB指令完全一樣。
指令的操作:OPRD1-OPRD2-CF OPRD1
(3)DEC指令
格式:DEC OPRD
操作:OPRD-1 OPRD
注意:指令對操作數的要求與INC相同,常用于在程序中修改計數值。
應用程序例

(4)NEG指令
格式:NEG OPRD→8/16位寄存器或存儲器操作數
操作:0-OPRD→OPRD
用0減去操作數,相當于對該操作數求補碼
(5)CMP指令
格式:CMP OPRD1,OPRD2
操作:OPRD1-OPRD2
指令執行的結果不影響目標操作數,僅影響標志位!
用途:用于比較兩個數的大小,可作為條件轉移指令轉移的條件。
指令對操作數的要求及對標志位的影響與SUB指令相同。
兩個無符號數的比較:
CMP AX,BX
若 AX>BX CF=0
若 AX<BX CF=1
兩個帶符號數的比較:
CMP AX,BX
兩個數的大小由OF和SF共同決定:

CMP指令例

程序功能:在20個數中找最大的數,并將其存放在MAX單元中。

3乘法指令

注意點:乘法指令采用隱含尋址,隱含的是存放被乘數的累加器AL或AX及存放結果的AX,DX。
(1)無符號數乘法指令
格式:MUL OPRD→不能是立即數
操作:

(2)無符號數乘法指令例
MUL BYTE PTR[BX]

4除法指令
無符號除法指令
格式:DIV OPRD
有符號除法指令
格式:IDIV OPRD
除法指令的操作
若OPRD是字節數
執行:AX/OPRD
結果:AL=商 AH=余數
若OPRD是雙字節數
執行:DXAX/OPRD
結果:AX=商 DX=余數
5BCD碼調整指令
將指令執行的二進制運算結果調整為壓縮BCD碼或擴展BCD碼表示的十進制數。
共6條,均為隱含尋址方式,隱含的操作數是AL或AL、AH;
不能單獨使用,要緊跟在相應的算術運算指令之后。
三、邏輯運算和移位指令
指令類型:
邏輯運算
與,或,非,異或
移位操作
非循環移位,循環移位
1邏輯運算
邏輯運算指令對操作數的要求大多與MOV指令相同。
“非”運算指令要求操作數不能是立即數;
除“非”運算指令外,其余指令的執行都會使標志位OF=CF=0
(1)“與”指令
格式:AND OPRD1,OPRD2
操作:兩操作數相“與”,結果送目標地址。
“與”指令的應用
實現兩操作數按位相與的運算
AND BL,[SI]
使目標操作數的某些位不變,某些位清零
AND AL,0FH
在操作數不變的情況下使CF和OF清零
AND AX,AX
“與”指令應用例


(2)“或”運算指令
格式:OR OPRD1,OPRD2
操作:兩操作數相“或”,結果送目標地址
“或”指令的應用
實現兩操作數相“或”的運算
OR AX,[DI]
使某些位不變,某些位置“1”
OR CL,0FH
在不改變操作數的情況下使OF=CF=0
OR AX,AX
“或”指令的應用例

“或”指令的應用
如何實現將一個二進制數9變為字符‘9’?
(3)“非”運算指令
格式:NOT OPRD
操作:操作數按位取反再送回原地址。
注:指令中的操作數不能是立即數,指令的執行對標志位無影響。
例:NOT BYTE PTR[BX]
(4)“異或”運算指令
格式:XOR OPRD1,OPRD2
操作:兩操作數相“異或”,結果送目標地址。
例:
XOR BL,80H
XOR AX,AX
(5)“測試”指令
格式:TEST OPRD1,OPRD2
操作:執行“與”運算,但運算的結果不送回目標地址。
應用:常用于測試某些位的狀態。
2移位指令

注:移動一位時由指令直接給出;移動兩位及以上,則移位次數由CL指定。
(1)非循環移位指令
邏輯左移
算術左移
邏輯右移
算術右移
算術左移和邏輯左移
算術左移指令:

邏輯左移指令:

邏輯右移
格式:


邏輯右移例
MOV AL,68H
MOV CL,2
SHR AL,CL

算術右移
格式:


非循環移位指令的應用:
左移可實現乘法運算
右移可實現除法運算
(2)循環移位指令


指令格式、對操作數的要求與非循環移位指令相同。
不帶進位位的循環移位:

帶進位位的循環移位:

循環移位指令的應用:
用于對某些位狀態的測試;
高位部分和低位部分的交換;
與非循環移位指令一起組成32位或更長字長數的移位。
程序功能:將1000H開始存放的4個壓縮BCD碼轉換為ASCII碼存放在3000H開始的單元中去。

程序例:

四、串操作指令
1串操作指令說明
針對數據塊或字符串的操作;
可實現存儲器到存儲器的數據傳送;
待操作的數據串稱為源串,目標地址稱為目標串。
2串操作指令的特點
源串一般存放在數據段,偏移地址由SI指定。允許段重設;
目標串必須在附加段,偏移地址由DI指定;
指令自動修改地址指針,修改方向由DF決定。
DF=0→增地址方向
DF=1→減地址方向
數據塊長度值由CX指定;
可增加自動重復前綴以實現自動修改CX內容。

視頻二維碼(掃碼觀看)
3重復前綴

條件重復


串操作指令流程(以傳送操作為例)

4串操作指令
串傳送MOVS
串比較CMPS
串掃描SCAS
串裝入LODS
串送存STOS
(1)串傳送指令
格式:
MOVS OPRD1,OPRD2
MOVSB
MOVSW
串傳送指令常與無條件重復前綴連用。
對比用MOV指令和MOVS指令實現將200個字節數據從內存的一個區域送到另一個區域的程序段。
串傳送指令例
用串傳送指令實現200個字節數據的傳送:

(2)串比較指令
格式:
CMPS OPRD1,OPRD2
CMPSB
CMPSW
串比較指令常與條件重復前綴連用,指令的執行不改變操作數,僅影響標志位。
前綴的操作對標志位不影響。
串比較指令例
測試200個字節數據是否傳送正確,如果不正確,找出第一個不相等的字符,并將其地址與不相等的字符放到BX和AL當中:

(3)串掃描指令
格式:
SCAS OPRD→目標操作數
SCASB
SCASW
執行與CMPS指令相似的操作,只是這里的源操作數是AX或AL。
串掃描指令的應用:常用于在指定存儲區域中尋找某個關鍵字。
(4)串裝入指令
格式:
LODS OPRD→源操作數
LODSB
LODSW
操作:
對字節:AL←[DS:SI]
對字:AX←[DS:SI]
串裝入指令的應用:用于將內存某個區域的數據串依次裝入累加器,以便顯示或輸出到接口。
LODS指令一般不加重復前綴。
(5)串存儲指令
格式:
STOS OPRD→目標操作數
STOSB
STOSW
操作:
對字節:AL→[ES:DI]
對字:AX→[ES:DI]
串存儲指令的應用:常用于將內存某個區域置同樣的值
此時:
將待送存的數據放入AL(字節數)或AX(字數據);
確定操作方向(增地址/減地址)和區域大小(串長度值);
使用串存儲指令+無條件重復前綴,實現數據傳送。
串存儲指令例:內存某個區域清零
設計思想:

五、程序控制指令
轉移指令
循環控制
過程調用
中斷控制
程序的執行方向
程序控制類指令的本質是:控制程序的執行方向
決定程序執行方向的因素:CS,IP
控制程序執行方向的方法:修改CS和IP,則程序轉向另一個代碼段執行;僅修改IP,則程序將改變當前的執行順序,轉向本代碼段內其它某處執行。
1轉移指令
通過修改指令的偏移地址或段地址及偏移地址實現程序的轉移。
無條件轉移指令:無條件轉移到目標地址,執行新的指令。
有條件轉移指令:在具備一定條件的情況下轉移到目標地址。
(1)無條件轉移指令
格式:

原則上可實現在整個內存空間的轉移。
①無條件段內轉移
轉移的目標地址在當前代碼段內,段地址不改變。

段內直接轉移
轉移的目標地址由指令直接給出
格式:JMP Label→近地址標號
段內直接轉移示圖

下一條要執行指令的偏移地址=當前IP+位移量。
段內間接轉移
轉移的目標地址存放在某個16位寄存器或存儲器的某兩個單元中。

例:
JMP BX
若:BX=1200H
則:轉移的目標地址=1200H
段內間接轉移例
JMP WORD PTR[BX]
設:BX=1200H

②無條件段間轉移
轉移的目標地址不在當前代碼段內。

段間直接轉移
轉移的目標地址由指令直接給出
格式:
JMP FAR Label→遠地址標號
段間直接轉移示圖

段間間接轉移
轉移的目標地址由指令中的32位操作數給出。
例:
JMP DWORD PTR[BX]

無條件轉移指令例


MOV SI,1122H
MOV WORD PTR[SI],0120H
ADD SI,2
MOV WORD PTR[SI],0122H

視頻二維碼(掃碼觀看)
(2)條件轉移指令
在滿足一定條件下,程序轉移到目標地址繼續執行。
條件轉移指令均為段內短轉移,即轉移范圍為:-128~+127。
條件轉移指令的應用:
幾種條件轉移指令的應用:
JC/JNC:判斷CF的狀態。常用于比大小;
JZ/JNZ:判斷ZF的狀態。常用于循環體的結束判斷;
JO/JNO:判斷OF的狀態。常用于有符號數溢出的判斷;
JP/JPE:判斷PF的狀態。用于判斷運算結果低8位中1的個數是否為偶數;
JA/JAE/JB/JBE:判斷CF或CF+ZF的狀態。常用于無符號數的大小比較。
條件轉移指令例
統計內存數據段中以TABLE為首地址的100個8位符號數中正數、負數和零元數的個數。
條件轉移指令例(流程圖)

2循環控制指令
循環范圍:以當前IP為中心的-128~+127范圍內循環。
循環次數由CX寄存器指定。
循環指令:

無條件循環指令
格式:LOOP LABEL
循環條件:CX≠0
操作:

3過程調用和返回
用于調用一個子過程;子過程由程序員預先設計并裝入內存,子過程執行結束后要返回原調用處。

調用指令的執行過程:
保護斷點;
將調用指令的下一條指令的地址(斷點)壓入堆棧;
獲取子過程的入口地址;
子過程第1條指令的偏移地址;
執行子過程,含相應參數的保存及恢復;
恢復斷點,返回原程序;
將斷點偏移地址由堆棧彈出。
過程調用:

(1)段內調用
被調用程序與調用程序在同一代碼段;
調用前只需保護斷點的偏移地址。
格式:


執行過程:
將斷點的偏移地址壓入堆棧;
根據過程名找子程序入口。
段內調用例
(1)CALL TIMRE→直接調用
(2)CALL WORD PTR[SI]→間接調用
設:SI=1200H CS=6000H
執行第(2)條指令后:
CS=6000H
IP=3344H

(2)段間調用

斷點保護時的壓棧順序:
先將斷點的CS壓棧,再壓入IP。

段間調用例
格式:CALL FAR PROC
格式例:
CALL FAR TIMRE
CALL DWORD PTR[SI]
(3)返回指令
功能:從堆棧中彈出斷點地址,返回原程序。
格式:RET
RET指令一般位于子程序的最后。
4中斷指令
中斷
中斷源
中斷的類型
中斷指令
引起CPU產生一次中斷的指令
中斷與過程調用:
中斷是隨機事件或異常事件引起,調用則是事先已在程序中安排好;
響應中斷請求不僅要保護斷點地址,還要保護FLAGS內容;
調用指令在指令中直接給出子程序入口地址,中斷指令只給出中斷向量碼,入口地址則在向量碼指向的內存單元中。
(1)中斷指令
格式:INT n→中斷類型碼n=0~255
說明:n×4→存放中斷服務子程序入口地址的單元的偏移地址,該單元在數據段,段地址=DS。

中斷指令的執行過程:
將FLAGS壓入堆棧;
將INT指令的下一條指令的CS、IP壓棧;
由n×4得到存放中斷向量的地址;
將中斷向量(中斷服務程序入口地址)送CS和IP寄存器;轉入中斷服務程序。

中斷指令例
執行程序段:


執行INT 21H指令后
IP=[21H×4]
CS=[(21H×4)+2]

(2)溢出中斷指令
格式:

若OF=1,則啟動一個類型為4的中斷過程,給出一個出錯標志,如果OF=0,不做任何操作。
INTO指令通常安排在有符號數加減運算指令之后。
(3)中斷返回指令
格式:
IRET

六、處理器控制指令

結束語:
掌握:
指令的格式及意義;
指令對操作數的要求及對標志位的影響;
指令的應用。
- 劉意青《簡明英國文學史》筆記和課后習題詳解
- 東北大學工商管理學院851經濟學歷年考研真題及詳解
- 多恩布什《宏觀經濟學》(第12版)名校考研真題詳解
- 華中農業大學文法學院437社會工作實務[專業碩士]歷年考研真題及詳解
- 中國人民大學802經濟學綜合歷年考研真題視頻講解【17小時高清視頻】
- 陳萬柏《思想政治教育學原理》(第3版)筆記和課后習題(含考研真題)詳解
- 張志偉《西方哲學史》(第2版)筆記和典型題(含考研真題)詳解
- 歐陽光中《數學分析》(下冊)配套題庫【名校考研真題+章節題庫+模擬試題】
- 朱玉賢《現代分子生物學》(第5版)筆記和課后習題(含考研真題)詳解
- 譚力文《管理學》(第2版)課后習題詳解
- 蔡雯《新聞編輯學》(第3版)筆記和課后習題(含考研真題)詳解[含新聞編輯專題視頻講解]
- 朱軍《遺傳學》(第3版)筆記和考研真題詳解
- 2015年法律碩士聯考考點集錦(考前沖刺版)
- 2015年考研政治核心考點解析
- 安徽師范大學馬克思主義學院616馬克思主義基本原理概論歷年考研真題及詳解