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