8086的匯編級指令有115條,可以分為數據傳送指令、算術運算指令、位處理指令
字符串指令、程序轉移指令以及處理器控制指令等6大類,下面作一簡要的介紹。
2.4.1 數據傳送指令
數據傳送指令有14條,可以分為4組,如表2-9所示。
表2-9 數據傳送指令
通用數據傳送指令 |
地址目標傳送指令 |
||
MOV PUSH POP XCHG XLAT |
傳送字節或字 |
LEA |
裝入有效地址 |
I/O指令 |
標志傳送指令 |
||
IN |
輸入字節或字 |
LAHF |
標志寄存器低字節送AH |
1.注意點
(1)在數據傳送指令中要注意:
①立即數只能作為源操作數;
②無存儲器之間直接傳送與交換的指令;
③不能用傳送指令給CS和IP置新指值;
④沒有用立即數對段寄存器直接置值的指令。
(2)除SAHF和POPF指令外,傳送指令皆不影響標志寄存器的值。
(3)除XCHG、XLAT指令外,皆不破壞源操作數。
(4)XCHG指令不能用段寄存器作為操作數。
(5)棧操作指令PUSH和POP必須以字為操作數。
2.幾條指令的說明
(1)指令MOV AL,VAR1。若VAR1為已定義的變量,則VAR1在指令中表示以VAR1為地址的內存單元的內容,該指令是把內存單元的一個字節傳送到AL。
(2)指令XLAT。其功能為AL←[(BX)+(AL)]即以BX值加上AL值作為地址,取出該地址對應的內存內容送AL。該指令通常用于表格檢索中,源操作數中BX內放表的首地址,AL中存放變址值,(BX)+(AL)為新地址,目的操作數AL注明為字節操作。在使用該指令前,必須先對AL和BX賦值。
(3)指令LEA REG,SRC。要求源操作數SRC是一個可以計算出有效地址EA的地址表達式,該指令所傳送的是變量的地址(有效地址),而不是變量所表示的內存之值。
(4)指令LES REG,SRC。REG為一個16位寄存器,這是一條16位傳送指令。
其功能為REG←[SRC],ES←[SRC+2]
而指令LDS REG,SRC的第二個目的操作數在DS。
(5)輸入/輸出指令。
IN AL,PORTAL←[PORT]
IN AX,FORTAX←[PORT+1:PORT]
IN AL,DXAL←[PORTDX]
INAX, DXAX←[PORTDX+1:PORTDX]
PORT為8位端口地址,PORTDX表示DX中存放16位端口地址。[PORT+1:PORT]表示一個16位數據,其高8位由PORT+1端口提供;其低8位由PORT端口提供。
2.4.2 算術運算指令
算術運算指令有20條,可以分為4組,如表2-10所示。
表2-10 算術運算指令
加法指令 |
減法指令 |
||
ADD ADC |
加法 |
SUB |
減法 |
I/O指令 |
除法指令 |
||
IN |
輸入字節或字 |
span |
無符號數除法 |
1.數據類型
8086的算術運算可以處理4種類型的數:無符號二進制數、帶符號二進制數、壓縮的BCD碼(十進制數)和非壓縮的BCD碼(十進制數),如表2-11所示。
表2-11 8位數在算術運算中的含義
HEX十六進制 |
位組合格式 |
無符號二進制數 |
帶符號二進制數 |
壓縮的BCD碼 |
非壓縮的BCD碼 |
07 |
00000111 |
7 |
+7 |
7 |
7 無效 |
2.注意點
(1)加減運算指令ADD、ADC、SUB、SBB和CMP可用立即數作為一個源操作數。(2)除CBW和CWD兩條指令外,其余算術運算指令皆影響標志位。
(3)增量指令INC及減量指令DEC不影響標志CF。
(4)乘法指令MUL及IMUL是執行源操作數和累加器值(AX或AL)的和乘,若源操作數是一個字節,則累加器為AL,相乘結果需用雙字節表示時,存放在AX中;若源操作數是一個字,則累加器為AX,相乘結果需用雙字表示時,存放在DX:AX中,DX中存放高位字,AX中存放低位字。此時,將使標志位CF=OF=l;否則,CF=OF=0。其余標志都不確定。
(5)除法指令span和Ispan的操作過程為:
[AX] /源操作數(字節)→[AH]為余數,[AL]為商;
[DX]:[AX]/源操作數(字)→[DX]為余數,[AX]為商。
除法指令運算結果6個狀態標志皆不確定。
(6)算術運算指令中是字節運算還是字運算由出現在操作數表達式中變量名的類型屬性決定,或由寄存器操作數的字長決定。
(7)加法和減法指令中操作數是帶符號數還是無發好數有程序員解釋。
(8)十進制修正指令DAA及DAS中無操作數出現,但其隱含的操作數是AL,切源和目的操作數都是AL。二進制運算后AL的內容以及CF和AF的狀態是十進制修正的依據,因此在BCD碼的加減運算中,應在二進制加法或減法指令后緊跟一條DAA或DAS指令。
(9)當非壓縮的 BCD碼進行算術運算時,低半字節為8888B~1001B,高半字節為0000B,對于除法運算,被除數應在AX中,切AH、AL都是一字節的非壓縮BCD碼。
(10)ASCII修正指令AAA、AAS以及AAM用于二進制加法、減法及乘法指令之后,而AAD指令用于二進制除法指令之前,即用AAD指令對被除數先行修正。
2.4.3 位處理指令
位處理指令有13條,可以分為3組,如表2-12所示:
表2-12 位處理指令
邏輯運算指令 |
移位指令 |
循環移位指令 |
|||
AND |
邏輯“與” |
SHL |
邏輯左移 |
ROL |
循環左移 |
1.指令功能簡介
(1)邏輯“與”指令AND用來清除或保留目的操作數中某些位,欲清除的位同“0”相“與”,稱為“屏蔽”;欲保留的位同“1”相“與”;自身相“與”其值不變,但CF清零。
(2)邏輯“或”指令OR用來進行數的組合,同“0”相“或”,其值不變;同“1”相“或”,則置“1”;自身相“或”,其值不變,但CF清零。
(3)邏輯“異或”指令XOR可用來將目的操作數中某些位取反或保持不變。同“0”相“異或”,其值不變;同“1”相“異或”,其值取反;自身相“異或”,則清零。且CF也清零。
(4)測試指令TEST用來測試目的操作數中某一位是否為“1”,實際上執行邏輯“與”
操作,但結果不回送,只是根據結果修改標志寄存器。
(5)算術右移指令SAR執行后符號位保持不變,右移1次完成帶符號數除2朝小取整操作。
2.注意點
(1)位處理指令的操作數可以是字節,也可以是字。
(2)求反指令NOT的操作數不能是立即數,其它邏輯指令只有源操作數可以是立即數。
(3)求反指令NOT不影響任何標志位,其余邏輯指令使CF=OF=0,AF不確定,SF、ZF、PF由運算結果定。
(4)循環移位指令和移位指令中的操作數COUNT只能為1或CL;目的操作數不能為立即數(當移位次數為1時,COUNT=1,否則COUNT=CL)。
(5)移位指令和循環移位指令影響CF,移位指令還影響PF、SF和ZF,當移位計數值為1時OF有意義。
2.4.4 程序轉移指令
程序轉移指令有28條,可以分為4組如表2-13所示。
表2-13 程序轉移指令
無條件轉移指令 |
|
CALL |
調用過程 |
RET |
從過程返回 |
JMP |
轉移 |
條件轉移指令 |
|
JA/JNBE |
高于/不低于等于,轉移 |
JAE/JNB |
高于或等于/不低于,轉移 |
JB/JNAE |
低于/不高于等于,轉移 |
JBE/JNA |
低于或等于/不高于,轉移 |
JC |
有進位(錯位),轉移 |
JE/JZ |
等于/為零,轉移 |
JG/JNLE |
大于/不小于等于,轉移 |
JGE/JNL |
大于或等于/不小于,轉移 |
JL/JNGE |
小于/不大于等于,轉移 |
JLE/JNG |
小于或等于/不大于,轉移 |
JNC |
無進位(借位),轉移 |
JNE/JNZ |
不等于/不為零,轉移 |
JNO |
不溢出,轉移 |
JNP/JPO |
PF為“0”/奇狀態,轉移 |
JNS |
SF為“0”,轉移 |
JO |
溢出,轉移 |
JP/JPE |
PF為“1”/偶狀態,轉移 |
JS |
SF為“1”,轉移 |
重復控制指令 |
|
LOOP |
循環 |
LOOPE/LOOPZ |
等于/為零,循環 |
LOOPNE/LOOPNZ |
不等于/不為零,循環 |
JCXZ |
寄存器CX=0,則轉移 |
中斷指令 |
|
INT |
中斷 |
NITO |
溢出中斷 |
IRET |
中斷返回 |
條件轉移指令共有30條,這些指令根據執行指令時CPU標志寄存器的狀態決定是否控制程序轉移,每條指令的測試條件如表2-14所示.若滿足條件,則將控制轉移到指令所規定的目標;若條件不滿足,則繼續順序執行。所有的條件轉移指令都是段內轉移,且是短距離的,即目標必須在當前指令段內,且與下一條指令的第一個字節的距離在-128~+127個字節內。
表2-14 條件轉移指令的說明
|
助記符 |
測試條件 |
單 |
JAE/JNB |
CF=0 |
JB/JNAE |
CF=1 |
|
JC |
CF=1 |
|
JNC |
CF=0 |
|
JE/JZ |
ZF=1 |
|
JNE/JNZ |
ZF=0 |
|
JNO |
OF=0 |
|
JO |
OF=1 |
|
JNP/JPO |
PF=0 |
|
JP/JPE |
PF=1 |
|
JNS |
SF=0 |
|
JS |
SF=1 |
|
多帶 |
JGE/JNL |
(SF十OF)=0 |
JL/JNEG |
(SF十OF)=1 |
|
JG/JNLE |
((SF十OF)+ZF)=0 |
|
JLE/JNG |
((SF十OF)+ZF)=1 |
|
多標志位不 |
JA/JNBE |
(CF+ZF)=0 |
JBE/JNA |
(CF+ZF)=1 |
2.無條件轉移指令
(1)JMP指令。JMP指令無條件地將控制轉移到目標單元,該指令中只有一個操作數,用來指定程序應在哪里繼續下去。可以實現“段內轉移”(包括短轉移和長轉移)以及“段間轉移”;而目的操作數的地址可以從指令本身獲得(“直接轉移”),也可以從指令所規定的存儲器或寄存器中獲得(“間接轉移”)。
(2)CALL指令O CAL指令用來調用一個“過程”(子程序),其格式與JMP指令相似,該指令與JMP指令的區別是:執行該指令時,必需有一個保存斷點的過程,即將CALI一指令的下一條指令的偏移地址(若為段間調用,還需加上CS值)保存進棧,以供返回之用。
(3)RET指令。RET指令的功能是控制從一個過程返回到調用該過程的CALL指令之后的那條指令,即返回斷點。
3.重復控制指令
重復控制指令可以用來管理軟件循環的重復過程,這些指令都用CX寄存器作為計數器,先判CX-1是否為零,不為零轉移到目標地址,其目標地址都是相對于該指令本身而言,其間距離只能在-128~+127字節范圍,即它們都是短距離轉移指令。
4.中斷指令
中斷指令用來允許程序和外部硬設備啟動中斷服務程序,若中斷是由軟件及不可屏蔽中
斷產生,則微處理器不執行中斷響應周期。
2.4.5 字符串指令
字符串指令有10條,如表2-15所示。
表2-15 字符串指令
助記符 |
功能 |
REP |
重復 |
REPE/REPZ |
等于/為零時重復 |
REPNE/REPNZ |
不等于/不為零時重復 |
MOVS(MOVSB,MOVSW) |
串傳送(字節/字) |
CMPS(CMPSB,CMPSW) |
串比較(字節/字) |
SCAS(SCASB,SCASW) |
串掃描(字節/字) |
LODS(LODSB,LODSW) |
取出串(字節/字) |
STOS(STOSB,STOSW) |
存入串(字節/字) |
1.字符串指令的共性介紹
在字符串指令中一般有兩個操作數——源操作數和目的操作數,還可使用重復前綴REP等以及重復次數計數器。在字符串操作中,寄存器和標志的用途如表2-16所示。
表2-16 字符串指令中寄存器和標志的用法
寄存器/標志 |
用途 |
SI |
源字符串的變址值(偏移量) |
DI |
目的字符串的變址值(偏移量) |
CX |
重復次數計數器 |
AL/AX |
掃描值 |
|
LODS指令的目的操作數 |
|
STOS指令的源操作數 |
DF |
=0,SI,DI自動增量 |
|
=1,SI,DI自動減量 |
ZF |
掃描/比較結束符 |
2.重復前綴
重復前綴REP、REPZ/REPE和REPNZ/REPNE用來控制其后字符串指令是否重復執行,重復前綴不影響標志。重復的字符串處理過程可被中斷,微處理器將在處理宇符串的下一個元素之前識別中斷。系統的中斷處理不受影響,在從中斷返回以后,重復過程再從中斷處繼續執行下去。
當執行REP MOVSB指令時,若CX≠0執行MOVSB,然后CX-1,再判CX是否為零,若不為零,重復執行MOVSB,直至CX=0,結束串操作。
2.4.6 處理器控制指令
處理器控制指令有12條,可分為3組,如表2-17所示。
表2-17 處理器控制指令
標志操作指令 |
外同步指令 |
||
STC |
進位標志置1 |
HLT |
暫停直至中斷或復位 |
CLC |
進位標志置0 |
WAIT |
等待TEST信號有效 |
CMC |
進位標志取反 |
ESC |
交權給外部處理機 |
STD |
方向標志置1 |
LOCK |
在下一條指令期間封鎖總線 |
CLD |
方向標志置0 |
空操作指令 |
|
STI |
中斷允許標志置1 |
NOP |
空操作 |
CLI |
中斷允許標志置0 |
|
|
聲明:
(一)由于考試政策等各方面情況的不斷調整與變化,本網站所提供的考試信息僅供參考,請以權威部門公布的正式信息為準。
(二)本網站在文章內容來源出處標注為其他平臺的稿件均為轉載稿,免費轉載出于非商業性學習目的,版權歸原作者所有。如您對內容、版權等問題存在異議請與本站聯系,我們會及時進行處理解決。
相關推薦
2023年浙江自考西方行政學說史復習資料:西方行政學的產生
03-022022年浙江自考中國古代文學史(一)第三編第九章復習資料
10-31自考輔導資料:2021年10月《學前教育史》—論幼稚師范教育
06-052022年浙江自考《現代漢語》串講筆記第一章:語音
09-302023年4月浙江自考中藥鑒定學復習筆記:葉類中藥鑒定(2)
12-242023年4月浙江自考英語翻譯復習筆記:The Imperial Palace
12-14自考輔導資料:2021年10月《學前教育史》—雅典的學前教育
06-072022年浙江自考《知識產權法》復習資料(4)
10-082023年4月浙江自考中國古代文學史(一)復習資料七
11-302023年4月浙江自考西方經濟學復習筆記:經濟效宰和帕累托最優標準
11-11