8086的匯編級指令有115條,可以分為數據傳送指令、算術運算指令、位處理指令、字符串指令、程序
轉移指令以及處理器控制指令等6大類,下面作一簡要的介紹。
一、數據傳送指令
數據傳送指令有14條,可以分為4組
(一)注意點
(1)在數據傳送指令中要注意:
1)立即數只能作為源操作數;
2)無存儲器之間直接傳送與交換的指令;
3)不能用傳送指令給CS和IP置新值;
4)沒有用立即數對段寄存器直接置值的指令。
(2)除SAHF和POPF指令外,傳送指令皆不影響標志寄存器的值。
(3)除XCHG、XLAT指令外,皆不破壞源操作數。
(4)XCHG指令不能用段寄存器作為操作數。
(5)棧操作指令PUSH和POP必須以字為操作數。
(二)幾條指令的說明
1.指令MOV AL,VARl
若VARI為已定義的變量,則VARI在指令中表示以VARI為地址的內存單元的內該指令是把內存單元的一個字節傳送到AL。
2.指令XLAT
其功能為AL←[(BX)+(AL)]即以BX值加上AL值作為地址,取出該地址對應的內存內容送AL。該指令通常用于表格檢索中,源操作數中BX內存放表的首地址,AL中存放變址值,(BX)+(AL)為新地址,目的操作數AL注明為字節操作。在使用該指令前,必須先對AL和BX賦值。
3.指令LEA REG,SRC
要求源操作數SRC是一個可以計算出有效地址EA的地址表達式,該指令所傳送的是變量的地址(有效地址),而不是變量所表示的內存之值。操作數在DS。這二條指令都是16位操作。
4.指令LES REG,SRC
其功能為 REG ← [SRC],ES ← [SRC+2]。 而指令LDS REG,SRC的第二個目的操作數在DS。這二條指令都是16位操作。
5.輸入/輸出指令
IN AL,PORTAL←[PORT]
IN AX,PORTAX←[PORT+1:PORT]
IN AL,DXAL←[PORT DX]
IN AX,DXAX←[PORT DX+1:PORT DX]
PORT為8位端口地址,PORTDX表示DX中存放16位端口地址。[PORT+l:PORT]表示一個16位數據,其高8位由PORT+l端口提供;其低8位由PORT端口提供。OUT指令與IN指令相似,僅二個操作數交換一下,例如OUT PORT,AL。
二、算術運算指令
算術運算指令有20條,可以分為4組,如表3-2所示。
(一)數據類型
8086的算術運算可以處理4種類型的數:無符號二進制數、帶符號二進制數壓縮的BCD碼(十進制數)和非壓縮的BCD碼(十進制數),如表3—3所示。
注意點
(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=1;否則,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碼進行算術運算時,低半字節為0000B~100lB,高半字節為0000B,對于除法運算,被除數應在AX中,且AH、AL都是一字節的非壓縮BCD碼。
(10)ASCII修正指令AAA、AAS以及AAM用于二進制加法、減法及乘法指令之后,而ADD指令用于二進制除法指令之前,即用AAD指令對被除數先行修正。
(11)CMP指令執行減法操作,但結果不回送,只根據結果修改標志寄存器。
三、位處理指令
(一)指令功能簡介
(1)邏輯“與”指令AND用來清除或保留目的操作數中某些位,欲清除的位同“0”相“與”,稱為“屏蔽”;欲保留的位同“1”相“與”;自身相“與”,其值不變,但CF清零。
(2)邏輯“或”指令OR用來進行數的組合,同“O”相“或”,其值不變;同“1”“或”,則置“1”;自身相“或”,其值不變,但CF清零。
(3)邏輯“異或”指令XOR可用來將目的操作數中某些位取反或保持不變。 同“0”相“異或”,其值不變;同“1”相“異或”,其值取反;自身相“異或”,則清零,且CF也清零。
(4)測試指令TEST用來測試目的操作數中某一位是否為“1”,實際上執行邏輯“與”操作,但結果不回送,只是根據結果修改標志寄存器。
(5)算術右移指令SAR執行后符號位保持不變,右移1次完成帶符號數除2朝小取整操作。
(二)注意點
(1)位處理指令的操作數可以是字節,也可以是字。
(2)求反指令NOT的操作數不能是立即數,其他邏輯指令只有源操作數可以是立即數。
(3)求反指令NOT不影響任何標志位,其余邏輯指令使CF=OF=0,AF不確定,SF、ZF、PF由運算結果定。
(4)循環移位指令和移位指令中的操作數為寄存器(或存儲器),COUNT 只能為1或CL(CL為移位次數,大于1),目的操作數不能為立即數。
(5)移位指令和循環移位指令影響CF,移位指令還影響PF、SF和ZF,當移位計數值為1時OF有意義。
四、程序轉移指令
程序轉移指令有28條,條件轉移指令共有30條,這些指令根據執行指令時CPU標志寄存器的狀態決定是否控制程序轉移,每條指令的測試條件如表3—6所示,若滿足條件,則將控制轉移到指令所規定的目標;若條件不滿足,則繼續順序執行。所有的條件轉移指令都是段內轉移,且是短距離的,即目標必須在當前指令段內,且與下一條指令的第一個字節的距離在-128~+127個字節內。
(二)無條件轉移指令
1.JMP指令
JMP指令無條件地將控制轉移到目標單元,該指令中只有一個操作數,用來指定程序應在哪里繼續下去。可以實現“段內轉移”(包括短轉移和長轉移)以及“段間轉移”;而目的操作數的地址可以從指令本身獲得(“直接轉移”),也可以從指令所規定的存儲器或寄存器中獲得(“間接轉移”)。
2.CALL指令
CALL指令用來調用一個“過程(子程序)”,其格式與JMP指令相似,該指令與JMP指令的區別是:執行該指令時,必需有一個保存斷點的過程,即將CALL指令的下一條指令的偏移地址(若為段間調用,還需加上CS值)保存進棧,以供返回之用。
3.RET指令
RET指令的功能是控制從一個過程返回到調用該過程的CALL指令之后的那條指令,即返回斷點。
(三)重復控制指令
重復控制指令可以用來管理軟件循環的重復過程,這些指令都用CX(寄存器作為計數器,先判斷CX-1是否為零,不為零轉移到目標地址,其目標地址都是相對于該指令本身而言,其間距離只能在-128一+127字節范圍,即它們都是短距離轉移指令。
(四)中斷指令
中斷指令用來允許程序和外部硬設備起動中斷服務程序,若中斷是由軟件及不可屏蔽
中斷產生,則微處理器不執行中斷響應周期。
聲明:
(一)由于考試政策等各方面情況的不斷調整與變化,本網站所提供的考試信息僅供參考,請以權威部門公布的正式信息為準。
(二)本網站在文章內容來源出處標注為其他平臺的稿件均為轉載稿,免費轉載出于非商業性學習目的,版權歸原作者所有。如您對內容、版權等問題存在異議請與本站聯系,我們會及時進行處理解決。
相關推薦
2022年浙江自考《當代中國政治制度》復習筆記匯總
09-152023年浙江自考西方行政學說史復習資料:西方行政學的產生
03-022023年10月浙江自考傳播學概論復習資料:有限效果論
08-302022年浙江自考中國古代文學史(一)第三編第九章復習資料
10-31自考輔導資料:2019年10月《美學》知識點-崇高的內涵與特點
09-172023年4月浙江自考中外教育簡史復習筆記:英國近代教育制度
12-08自考輔導資料:2021年10月《學前教育史》—論幼稚師范教育
06-05自考輔導資料:2021年10月《學前教育史》—雅典的學前教育
06-072022年10月浙江自考《政治經濟學》重點復習第十三章
07-062023年4月浙江自考新聞學概論復習筆記:堅持和實現正確的輿論導向
12-02