微機(jī)原理第三章 8086指令系統(tǒng)之2_第1頁(yè)
微機(jī)原理第三章 8086指令系統(tǒng)之2_第2頁(yè)
微機(jī)原理第三章 8086指令系統(tǒng)之2_第3頁(yè)
微機(jī)原理第三章 8086指令系統(tǒng)之2_第4頁(yè)
微機(jī)原理第三章 8086指令系統(tǒng)之2_第5頁(yè)
已閱讀5頁(yè),還剩66頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第三章 8086指令系統(tǒng)之2v三、邏輯運(yùn)算及移位指令三、邏輯運(yùn)算及移位指令 1.邏輯運(yùn)算指令邏輯運(yùn)算指令 取反指令取反指令 NOT OPRD 功能功能:按位取反再送回 不影響標(biāo)志位。 “與與”指令指令 AND OPRD1,OPRD2 兩操作數(shù)均可以是通用寄存器或存儲(chǔ)器, 源操作數(shù)還可以是立即數(shù)。 功能功能:兩操作數(shù)按位進(jìn)行“與”運(yùn)算,結(jié)果存入目的操作數(shù)。 對(duì)標(biāo)志位影響對(duì)標(biāo)志位影響:使C,O標(biāo)志清零,P、S、Z反映操作結(jié)果,對(duì)A標(biāo)志未定義。 AND AL,9FHAND AX,BXAND SI,BPAND DX,BUFFERSI+BX某一操作數(shù),自己與自己相“與”,操作數(shù)不變,進(jìn)位標(biāo)志CF清0若使

2、某一操作數(shù)的若干位不變,則維持不變的位與1相與;若干位置0,則置0的位與0相與例; 把數(shù)字9的ASCII碼轉(zhuǎn)化為相應(yīng)的二進(jìn)制數(shù)MOV AL,39HAND AL, 0FH 測(cè)試指令測(cè)試指令 TEST OPRD1,OPRD2 功能功能:兩操作數(shù)按位進(jìn)行“與”運(yùn)算,但結(jié)果不保留。只是用于影響標(biāo)志位。 對(duì)標(biāo)志位影響和與指令相同。 通常用于檢測(cè)一些條件是否滿足,又不改變?cè)胁僮鲾?shù),后加條件轉(zhuǎn)移指令 TEST AL, 01H TEST AX,8000H JNZ THERE JNZ THERE THERE: THERE: TEST CX,0FFFFH JZ THERE THERE:“或或”指令指令 OR O

3、PRD1,OPRD2 功能功能:兩操作數(shù)按位進(jìn)行“或”運(yùn)算,結(jié)果存入目的操作數(shù)。對(duì)標(biāo)志位影響對(duì)標(biāo)志位影響:使C,O標(biāo)志清零,P、S、Z反映操作結(jié)果,對(duì)A標(biāo)志未定義。一個(gè)操作數(shù)自身相或,不改變操作數(shù)的值,但可使進(jìn)位標(biāo)志CF清0若使一個(gè)操作數(shù)若干位不變,則維持不變的位與0相或,置1的這些位與1相或。例:AND AL,7FH JNP NEXT OR AL,80HNEXT:“異或異或”指令指令 XOR OPRD1,OPRD2功能功能:兩操作數(shù)按位進(jìn)行“異或”運(yùn)算,結(jié)果存入目的操作數(shù)。對(duì)標(biāo)志位影響對(duì)標(biāo)志位影響:使C,O標(biāo)志清零,P、S、Z反映操作結(jié)果,對(duì)A標(biāo)志未定義。異或指令是操作數(shù)清0的有效辦法XOR

4、 AX,AXXOR SI,SI 2. 移位和循環(huán)指令 四條移位指令: 算術(shù)左移指令 SAL OPRD,CNT 邏輯左移指令 SHL OPRD,CNT 算術(shù)右移指令 SAR OPRD,CNT 邏輯右移指令 SHR OPRD,CNT操作數(shù)OPRD可以是寄存器或存儲(chǔ)器,CNT是移位位數(shù),可以是1或CL。其中,SAL和SHL兩指令在功能上完全一樣。示意如下:CF算術(shù)左移和邏輯左移指令00注意注意:當(dāng)移1位時(shí),若最高位發(fā)生變化,則OF=1,否則OF=0。對(duì)A標(biāo)志未定義,其他標(biāo)志反映結(jié)果特征。CFCF邏輯右移指令移位過(guò)程算術(shù)右移指令移位過(guò)程保持符號(hào)位不變10001000100010001000100010

5、001111XCF操作數(shù)1000100010001000100010001000111110在SHL/SAL指令移位1位后在SHL/SAL指令移位10位后001000100010001000111100000000000001000100010001000100010001000111X操作數(shù)(正數(shù))CF001000100010001000100010001000111在SAR指令移位1位后11000100010001000100010001000111X操作數(shù)(負(fù)數(shù))CF在SAR指令移位1位后11100010001000100010001000100011110001000100010001

6、000100010001111x操作數(shù)CF在SHR指令右移1位后010001000100010001000100010001111在SHR指令右移10位后000000000010001000100010001000100v四條循環(huán)指令 循環(huán)左移指令 ROL OPRD, CNT 循環(huán)右移指令 ROR OPRD,CNT CFCF操作數(shù)操作數(shù)注意注意:當(dāng)循環(huán)移1位時(shí),若最高位發(fā)生變化,則O=1,否則O=0。此指令只影響C和O標(biāo)志注意注意:當(dāng)循環(huán)移1位時(shí),若最高位發(fā)生變化,則O=1,否則O=0。此指令只影響C和O標(biāo)志 帶進(jìn)位C循環(huán)左移指令(大循環(huán)左移) RCL OPRD, CNTCF帶進(jìn)位C循環(huán)右移指

7、令(大循環(huán)右移) RCL OPRD, CNTCF操作數(shù)操作數(shù)注意注意:當(dāng)循環(huán)移1位時(shí),若最高位發(fā)生變化,則O=1,否則O=0。此指令只影響C和O標(biāo)志注意注意:當(dāng)循環(huán)移1位時(shí),若最高位發(fā)生變化,則O=1,否則O=0。此指令只影響C和O標(biāo)志移位指令的作用v用來(lái)改變數(shù)據(jù)格式,有時(shí)用來(lái)提供程序 控制功能(例如根據(jù)移位后的CF狀態(tài)作JC或JNC轉(zhuǎn)移,或一些專門(mén)的運(yùn)算功能。注意:左移n位與乘以2n 等效,例如: 62 2 0000011010000011000同樣,右移n位與除以2n 等效,如果是邏輯右移,除法是無(wú)符號(hào)的;如果是算術(shù)右移,則除法是帶符號(hào)的(保持最高位不變,并做符號(hào)的擴(kuò)展)應(yīng)用大循環(huán)指令可以

8、實(shí)現(xiàn)多字節(jié)整體移位功能。例:編程實(shí)現(xiàn)將例:編程實(shí)現(xiàn)將AL中的數(shù)乘以中的數(shù)乘以10vSAL AL, 1 ; 將AL中數(shù)左移1位,得2xvMOV BL, AL; 2x保存在BL中.vMOV CL, 2 ; 移位次數(shù)送入CLvSAL AL,CL ; 2x左移2位,得8xvADD AL, BL ; 2x 加上8x,AL中為10 xv四、串操作指令 串操作指令 : 數(shù)據(jù)傳送類(lèi)指令每次只能傳送一個(gè)數(shù)據(jù),若要傳送大批數(shù)據(jù)就需要重復(fù)編程,這樣就浪費(fèi)了大量的時(shí)間和空間。 為此8086提供了一組處理主存中連續(xù)存放數(shù)據(jù)串的指令,這就是串操作指令。 規(guī)定:規(guī)定: 源操作數(shù)在DS段,用SI間接尋址; 目的操作數(shù)在ES段

9、,用DI間接尋址; 兩個(gè)地址指針SI和DI在每一個(gè)串操作之后會(huì)自動(dòng)修改:標(biāo)志位標(biāo)志位D0,則作增量修改(加1或2),D=1,則作減量修改(減1或2)。 可以用重復(fù)操作前綴使串操作指令重復(fù)執(zhí)行,重復(fù)的次數(shù)事先存放在CX中,每執(zhí)行一次CX自動(dòng)減1,直到CX=0,則停止。下面流程圖總結(jié)了串操作的過(guò)程。1傳送指令傳送指令MOVS語(yǔ)句格式:語(yǔ)句格式: MOVSB字節(jié)串傳送字節(jié)串傳送 MOVSW字串傳送字串傳送功能:功能:將以SI為指針的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)傳送至以DI為指針的目的地址中去,并自動(dòng)修改指針,使之指向下一個(gè)字節(jié)(或字)存儲(chǔ)單元。即:即:(DS:SI)ES:DI。 當(dāng)當(dāng)DF

10、=0時(shí),(時(shí),(SI)和()和(DI)增量。)增量。 當(dāng)當(dāng)DF=1時(shí),(時(shí),(SI)和()和(DI)減量。)減量。格式:格式: 有重復(fù)前綴的格式:有重復(fù)前綴的格式:REP MOVSB REP MOVSW REP MOVSD功能:除完成基本傳送指令的操作外,需要將傳送元素功能:除完成基本傳送指令的操作外,需要將傳送元素個(gè)數(shù)先送個(gè)數(shù)先送CX,每傳送一個(gè)元素都要自動(dòng)完成每傳送一個(gè)元素都要自動(dòng)完成CX-1 CX操作,操作, 如果如果CX 不為不為0, 傳送后續(xù)元素,直到傳送后續(xù)元素,直到CX-1 0為止。為止。重復(fù)前綴指令不能單獨(dú)使用,重復(fù)前綴指令不能單獨(dú)使用, 它用來(lái)控制緊跟其后的字它用來(lái)控制緊跟其

11、后的字符串指令是否重復(fù)。符串指令是否重復(fù)。 MOV SI, OFFSET SOURCE MOV DI, OFFSET DEST MOV CX 100AGAIN: MOVS DEST, SOURCE DEC CX JNZ AGAINMOV SI, OFFSET SOURCEMOV DI, OFFSET DESTMOV CX, 100REP MOVS DEST, SOURCE 例:傳送100個(gè)操作數(shù)2串比較指令串比較指令CMPS 語(yǔ)句格式:語(yǔ)句格式: CMPSB字節(jié)串比較字節(jié)串比較 CMPSW字串比較字串比較功能:功能:將SI所指的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)與DI所指的目的串中的一個(gè)

12、字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)相減,并根據(jù)相減的結(jié)果設(shè)置標(biāo)志,但結(jié)果并不保存。即:即:(SI)()(DI)。)。 修改串指針,使之指向串中的下一個(gè)元素。修改串指針,使之指向串中的下一個(gè)元素。 當(dāng)當(dāng)DF=0時(shí),(時(shí),(SI)和()和(DI)增量。)增量。 當(dāng)當(dāng)DF=1時(shí),(時(shí),(SI)和()和(DI)減量。)減量。3串搜索指令串搜索指令SCASSCAS語(yǔ)句格式:語(yǔ)句格式: SCASB SCASB字節(jié)串搜索字節(jié)串搜索 SCASW SCASW字串搜索字串搜索功能功能:AL(字節(jié))或AX(字)中的內(nèi)容與DI所指的目的串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)相減,根據(jù)相減結(jié)果設(shè)置標(biāo)志位,結(jié)果不保存,即: 字

13、節(jié)操作:(字節(jié)操作:(ALAL)()(DIDI),字操作:(),字操作:(AXAX)(DIDI)。)。 修改指針使之指向串中的下一個(gè)元素。修改指針使之指向串中的下一個(gè)元素。 當(dāng)當(dāng)DF=0DF=0時(shí),(時(shí),(DIDI)增量。)增量。 當(dāng)當(dāng)DF=1DF=1時(shí),(時(shí),(DIDI)減量。)減量。4從源串中取數(shù)指令從源串中取數(shù)指令LODSLODS語(yǔ)句格式:語(yǔ)句格式: LODSB LODSB從字節(jié)串中取數(shù)從字節(jié)串中取數(shù) LODSW LODSW從字串中取數(shù)從字串中取數(shù)功能:功能:將SI所指的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)取出來(lái)送入AL(或AX)中。即: 字節(jié)操作:(字節(jié)操作:(SISI)ALAL,

14、字操作:(,字操作:(SISI)AXAX。 修改指針修改指針SISI,使它指向串中的下一個(gè)元素。,使它指向串中的下一個(gè)元素。 當(dāng)當(dāng)DF=0DF=0時(shí),(時(shí),(SISI)增量。)增量。 當(dāng)當(dāng)DF=1DF=1時(shí),(時(shí),(SISI)減量)減量。5往目的串中存數(shù)指令往目的串中存數(shù)指令STOSSTOS語(yǔ)句格式:語(yǔ)句格式: STOSB STOSB往字節(jié)串中存數(shù)往字節(jié)串中存數(shù) STOSW STOSW往字串中存數(shù)往字串中存數(shù)功能:功能:將AL或AX中的數(shù)據(jù)送入DI所指的目的串中的字節(jié)(或字)存儲(chǔ)單元中。即: 字節(jié)操作:(字節(jié)操作:(ALAL)DIDI,字操作:(,字操作:(AXAX)DIDI。 修改指針修改指

15、針DIDI,使之指向串中的下一個(gè)元素。,使之指向串中的下一個(gè)元素。 當(dāng)當(dāng)DF=0DF=0時(shí),(時(shí),(DIDI)增量)。)增量)。 當(dāng)當(dāng)DF=1DF=1時(shí),(時(shí),(DIDI)減量。)減量。6重復(fù)前綴指令REP REPZ REPNZ(1 1)REPREP REP前綴用在MOVS、STOS 、LODS指令前。功能:功能:每執(zhí)行一次串指令(CX)1,直到(CX)=0,重復(fù)執(zhí)行結(jié)束。(2 2)REPZREPZ 該指令一般用在CMP、SCAS指令前。功能:功能:每執(zhí)行一次串指令(CX)1,并判斷ZF標(biāo)志是否為0,只要(CX)=0或ZF=0,則重復(fù)執(zhí)行結(jié)束。(3 3)REPNZREPNZ 該指令一般用在CM

16、PS、SCAS 指令前。功能功能:每執(zhí)行一次串指令(CX)1,并判斷ZF標(biāo)志是否為0,只要(CX)=0或ZF=1,則重復(fù)執(zhí)行結(jié)束。重復(fù)前綴重復(fù)前綴匯編格式匯編格式執(zhí)行過(guò)程執(zhí)行過(guò)程影響指令影響指令REPREP1)1)若若(CX)(CX)0 0,則退出,則退出, ,否則順序執(zhí)行否則順序執(zhí)行; ;2 2)CX=CX-1CX=CX-1;3 3)執(zhí)行后續(xù)指令;)執(zhí)行后續(xù)指令;4 4)重復(fù)()重復(fù)(1 1)- -(3 3)MOVSMOVS,STOSSTOS,LODSLODSREPE/REPE/REPZREPZ1)1)若若(CX)(CX)0 0或或ZF=0ZF=0,則退出,則退出, ,否則順序否則順序執(zhí)行執(zhí)

17、行; ;2 2)CX=CX-1CX=CX-1;3 3)執(zhí)行后續(xù)指令;)執(zhí)行后續(xù)指令;4 4)重復(fù)()重復(fù)(1 1)- -(3 3)CMPSCMPS,SCASSCASREPNE/REPNE/REPNZREPNZ1)1)若若(CX)(CX)0 0或或ZF=1ZF=1,則退出,則退出, ,否則順序否則順序執(zhí)行執(zhí)行; ;2 2)CX=CX-1CX=CX-1;3 3)執(zhí)行后續(xù)指令;)執(zhí)行后續(xù)指令;4 4)重復(fù)()重復(fù)(1 1)- -(3 3)CMPSCMPS,SCASSCAS MOV SI, OFFSET STRING1 %操作數(shù)的有效地址送到SI MOV DI, OFFSET STRING2 MOV

18、CX, COUNT %設(shè)置循環(huán)次數(shù) CLD %清除方向標(biāo)志 REPZ CMPSB JNZ UNMAT %若串不相等,在RESULT單元中置0FFH MOV AL,0 %若串相等,在RESULT單元中置0 JMP OUTPUT UNMAT: MOV AL,0FFH OUTPUT:MOV RESULT, AL HLT MOV DI, OFFSET BLOCK ;設(shè)置數(shù)據(jù)塊的地址指針 MOV CX,COUNT ;設(shè)置數(shù)據(jù)塊的長(zhǎng)度 MOV AL,CHAR ;把關(guān)鍵字送入AL CLD ;清除方向標(biāo)志位 REPNE SCASB ; JZ FOUND ;相等轉(zhuǎn)入FOUND MOV DI,0 ;不相等,把0存

19、入DI JMP DONE FOUND: DEC DI ;DI的內(nèi)容減1 MOV POINT,DI MOV BX, OFFSET BLOCK SUB BX,DI MOV DI,BX ;紀(jì)錄存放關(guān)鍵字的地址 DONE: HLT 在字符串中查找是否存在關(guān)鍵字符。若存在,則將記錄關(guān)在字符串中查找是否存在關(guān)鍵字符。若存在,則將記錄關(guān)鍵字符所在地址,否則將寄存器清零。鍵字符所在地址,否則將寄存器清零。v程序如下:CLD;清除方向標(biāo)志DFLEADI,0404H ;目標(biāo)地址0404H送DIMOV CX,0080H ;共有128個(gè)字XORAX,AX;AX清零REPSTOSW;256個(gè)字節(jié)清零例:使0404H開(kāi)始

20、的256個(gè)單元清零。v五、控制轉(zhuǎn)移指令五、控制轉(zhuǎn)移指令 1.調(diào)用和返回指令調(diào)用和返回指令 子程序(或過(guò)程)調(diào)用指令子程序(或過(guò)程)調(diào)用指令: CALL PROC 段內(nèi)調(diào)用目標(biāo)子程序位于現(xiàn)行碼段; 段間調(diào)用目標(biāo)子程序不在現(xiàn)行碼段。 直接調(diào)用目標(biāo)地址直接在指令中; 間接調(diào)用目標(biāo)地址在由指令指定的寄存器或 內(nèi)存單元中。 操作過(guò)程:用堆棧保護(hù)子程序返回地址,即CS(段間)和IP入棧保護(hù);目標(biāo)子程序地址送CS和IP。 最常用的格式:CALL NEAR(FAR) PTR 子程序名 返回指令:返回指令:RET 通常作為子程序或過(guò)程的最后一條指令。用于返回到調(diào)用這個(gè)子程序的斷點(diǎn)處。 段內(nèi)返回將堆棧頂部的一個(gè)字

21、彈回到指令指針I(yè)P中,且SP加2; 段間返回將棧頂?shù)膬蓚€(gè)字分別彈回到IP和CS中,SP加4。注意:注意:CALL 必須與RET指令的返回類(lèi)型相匹配,即,若子程序是段間返回,則CALL指令必須是段間調(diào)用的;若子程序是段內(nèi)返回的,則CALL指令必須是段內(nèi)調(diào)用格式。2. 無(wú)條件轉(zhuǎn)移指令JMP無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令 功能:無(wú)條件轉(zhuǎn)移,執(zhí)行指定標(biāo)號(hào)處的指令。功能:無(wú)條件轉(zhuǎn)移,執(zhí)行指定標(biāo)號(hào)處的指令。 無(wú)條件轉(zhuǎn)移指令的執(zhí)行結(jié)果不影響標(biāo)志位無(wú)條件轉(zhuǎn)移指令的執(zhí)行結(jié)果不影響標(biāo)志位. .用于確定轉(zhuǎn)移指令及用于確定轉(zhuǎn)移指令及CALL指令的轉(zhuǎn)移地址。指令的轉(zhuǎn)移地址。段內(nèi)直接轉(zhuǎn)移段內(nèi)直接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移

22、段間直接轉(zhuǎn)移段間直接轉(zhuǎn)移段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移 CS:IP 控制程序執(zhí)行順序控制程序執(zhí)行順序. 段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移, 指令只修改指令只修改IP內(nèi)容內(nèi)容; 段間轉(zhuǎn)移段間轉(zhuǎn)移, 指令須修改指令須修改CS, IP內(nèi)容內(nèi)容.格式格式1: 1: 段內(nèi)直接轉(zhuǎn)移段內(nèi)直接轉(zhuǎn)移 JMP 標(biāo)號(hào)標(biāo)號(hào) JMP SHORT 標(biāo)號(hào)標(biāo)號(hào)說(shuō)明:段內(nèi)轉(zhuǎn)移(說(shuō)明:段內(nèi)轉(zhuǎn)移(SHORTSHORT)指令偏移量為)指令偏移量為8 8位,允許轉(zhuǎn)移值的范圍位,允許轉(zhuǎn)移值的范圍為為128128+127+127。不含。不含SHORTSHORT的指令,其轉(zhuǎn)移范圍可覆蓋整個(gè)邏輯的指令,其轉(zhuǎn)移范圍可覆蓋整個(gè)邏輯段段. . JMP 寄存器操作數(shù)寄存器

23、操作數(shù); (IP) (EA) JMP 內(nèi)存操作數(shù)內(nèi)存操作數(shù)說(shuō)明:寄存器、內(nèi)存單元存放的是有效地址說(shuō)明:寄存器、內(nèi)存單元存放的是有效地址 所謂所謂“間接間接”,是指當(dāng),是指當(dāng)CPU執(zhí)行指令時(shí)執(zhí)行指令時(shí), 將寄存器或內(nèi)存單將寄存器或內(nèi)存單元內(nèi)的有效地址寫(xiě)入元內(nèi)的有效地址寫(xiě)入IP或或EIP, 從而從而實(shí)現(xiàn)轉(zhuǎn)移實(shí)現(xiàn)轉(zhuǎn)移.格式格式2: 2: 段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移在實(shí)模式下在實(shí)模式下, 80486, 80486一個(gè)邏輯段的體積最大為一個(gè)邏輯段的體積最大為64K64KDS:DS:POINTERPOINTERDW P11; P11, P12DW P11; P11, P12為標(biāo)號(hào)地址為標(biāo)號(hào)地址DW P12;

24、DW P12;CS:CS:對(duì)對(duì)DSDS初始化初始化MOV BX, OFFSET POINTERMOV BX, OFFSET POINTERJMP BX ; (IP) (EA)JMP BX ; (IP) (EA)MOV SI, OFFSET POINTER+2MOV SI, OFFSET POINTER+2JMP SI ; JMP SI ; (IP) (EA)P11: .P12: . JMP 標(biāo)號(hào)標(biāo)號(hào) ; (IP) 跳轉(zhuǎn)的跳轉(zhuǎn)的EA (CS) 跳轉(zhuǎn)的段地址跳轉(zhuǎn)的段地址 說(shuō)明說(shuō)明: 模塊化程序設(shè)計(jì)中模塊化程序設(shè)計(jì)中, 從一個(gè)模塊轉(zhuǎn)移到另一個(gè)模塊從一個(gè)模塊轉(zhuǎn)移到另一個(gè)模塊需需 執(zhí)行段間轉(zhuǎn)移指令執(zhí)行段

25、間轉(zhuǎn)移指令, 此時(shí)段間轉(zhuǎn)移標(biāo)號(hào)要作兩項(xiàng)說(shuō)明此時(shí)段間轉(zhuǎn)移標(biāo)號(hào)要作兩項(xiàng)說(shuō)明: 在轉(zhuǎn)移在轉(zhuǎn)移目標(biāo)模塊目標(biāo)模塊(即被調(diào)用模塊即被調(diào)用模塊)中中用用PUBLIC說(shuō)明為說(shuō)明為“公共變量公共變量”,在本在本模塊模塊(即調(diào)用模塊即調(diào)用模塊)中用中用EXTRN說(shuō)明為說(shuō)明為“外部變量名外部變量名”在模塊設(shè)在模塊設(shè)計(jì)時(shí),從一個(gè)模塊轉(zhuǎn)移到另一個(gè)模塊,用段間直接轉(zhuǎn)移。計(jì)時(shí),從一個(gè)模塊轉(zhuǎn)移到另一個(gè)模塊,用段間直接轉(zhuǎn)移。格式格式3: 3: 段間直接轉(zhuǎn)移段間直接轉(zhuǎn)移例例, DS:ADDR DD 12345678H ; 32位轉(zhuǎn)移地址位轉(zhuǎn)移地址.CS: 對(duì)對(duì)DS初始化初始化JMP ADDR; 1234H CS 5678H IP

26、JMP 內(nèi)存操作數(shù)內(nèi)存操作數(shù) (IP) (EA)(IP) (EA) (CS) (EA+2) (CS) (EA+2) 在實(shí)模式下,段間間接轉(zhuǎn)移指令將段地址和偏移地址送給在實(shí)模式下,段間間接轉(zhuǎn)移指令將段地址和偏移地址送給CS和和IP。格式格式4:4:段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移例例, , JMP DD PTR BXSIJMP DD PTR BXSI3.條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令(1)簡(jiǎn)單條件轉(zhuǎn)移指令(2)無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令(3) 有符號(hào)數(shù)條件轉(zhuǎn)移指令 它們都有通用的語(yǔ)句格式和功能。語(yǔ)句格式語(yǔ)句格式: 標(biāo)號(hào): 操作符 短標(biāo)號(hào)功能:功能:如果條件滿足,則(IP)位移量IP。其中,位移量范圍是127128字

27、節(jié)之間。(1)簡(jiǎn)單條件轉(zhuǎn)移(2)無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令【例】比較無(wú)符號(hào)數(shù)大小,將較大的數(shù)存放【例】比較無(wú)符號(hào)數(shù)大小,將較大的數(shù)存放AXAX寄存器。寄存器。CMPCMPAXAX, BX BX ;(;(AXAX)()(BXBX)JNBJNBNEXTNEXT ;若;若AX=BXAX=BX,轉(zhuǎn)移到,轉(zhuǎn)移到NEXTNEXTXCHGXCHGAXAX,BX BX ;若;若AXBXAX=BXAX=BX,轉(zhuǎn)移到,轉(zhuǎn)移到NEXTNEXTXCHGXCHGAXAX,BXBX;若;若AXBXAXBX,交換,交換NEXTNEXT:設(shè)有10個(gè)字節(jié)屬性的數(shù)據(jù)存放在以2000H單元為首地址的數(shù)據(jù)緩沖器中,試編程實(shí)現(xiàn)找出其中的最大

28、數(shù),并存入2100H單元。MOV BX,2000H MOV AL,BX MOV CX,10LAB:INC BX CMP AL,BX JAE LABLE MOV AL,BX ;讓讓AL中始終存放較大的值中始終存放較大的值LABLE: DEC CX JNZ LAB MOV BX,2100H MOV BX,AL 。4.循環(huán)控制指令循環(huán)控制指令v循環(huán)控制指令用于控制程序的循環(huán),其控制轉(zhuǎn)向的目的地址是在以當(dāng)前IP內(nèi)容為中心的128127的范圍內(nèi),指令采用CX作為計(jì)數(shù)器,每執(zhí)行一次循環(huán),CX內(nèi)容減1,直到為0,循環(huán)結(jié)束。v 8086指令系統(tǒng)中主要有四種循環(huán)控制語(yǔ)句。 (1 1)LOOPLOOP循環(huán)控制指令

29、循環(huán)控制指令 語(yǔ)句格式:語(yǔ)句格式: LOOP LOOP 標(biāo)號(hào)標(biāo)號(hào)功能:(功能:(CXCX)1 01 0,則程序轉(zhuǎn)移(循環(huán)),且目標(biāo)操作,則程序轉(zhuǎn)移(循環(huán)),且目標(biāo)操作數(shù)為數(shù)為IP+IP+偏移量(符號(hào)擴(kuò)展到偏移量(符號(hào)擴(kuò)展到1616位);否則,順序執(zhí)行。位);否則,順序執(zhí)行。說(shuō)明:說(shuō)明:目標(biāo)地址必須在此指令的目標(biāo)地址必須在此指令的127127和和128128字節(jié)的范圍字節(jié)的范圍之內(nèi)之內(nèi) 使用使用LOOPLOOP指令可代替兩條指令:指令可代替兩條指令: DEC CXDEC CX JNE JNE 標(biāo)號(hào)標(biāo)號(hào)(2 2)LOOPZLOOPZ(LOOPELOOPE)循環(huán)控制指令)循環(huán)控制指令 語(yǔ)句格式: L

30、OOPE 短標(biāo)號(hào) LOOPZ 短標(biāo)號(hào) 功能功能:(CX)1 0且ZF=1,則程序轉(zhuǎn)移(循環(huán))到目標(biāo)操作數(shù)IP偏移量(符號(hào)擴(kuò)展到16位);否則,順序執(zhí)行。說(shuō)明說(shuō)明:目標(biāo)地址必須在此指令的127和128字節(jié)的范圍之內(nèi)(3 3)LOOPNZLOOPNZ(LOOPNELOOPNE)循環(huán)控制指令語(yǔ))循環(huán)控制指令語(yǔ)句格式: LOOPNE 短標(biāo)號(hào) LOOPNZ 短標(biāo)號(hào)功能:功能:(CX)10且ZF=0,則程序轉(zhuǎn)移(循環(huán))到目標(biāo)操作數(shù)IP偏移量(符號(hào)擴(kuò)展到16位) ;否則,順序執(zhí)行。說(shuō)明說(shuō)明:目標(biāo)地址必須在此指令的127和128字節(jié)的范圍之內(nèi)(4)測(cè)試測(cè)試CX的值為的值為0轉(zhuǎn)移指令轉(zhuǎn)移指令指令格式:JCXZ

31、oprd測(cè)試條件:若(CX)0,則轉(zhuǎn)移到指定位置,即IP+偏移量(符號(hào)擴(kuò)展到16位)。v注意:注意:4條循環(huán)控制指令均不影響標(biāo)志位。條循環(huán)控制指令均不影響標(biāo)志位。5.中斷指令v分內(nèi)部中斷(也叫軟中斷)、非屏蔽中斷和可屏蔽中斷。中斷指令是內(nèi)部中斷。中斷操作中斷操作是通過(guò)一個(gè)中斷向量表實(shí)現(xiàn)對(duì)一段程序(中斷服務(wù)程序)的間接調(diào)用。中斷向量表存放在內(nèi)存空間的最低端,物理地址為00000H003FFH,共1024個(gè)字節(jié),對(duì)應(yīng)256個(gè)中斷類(lèi)型號(hào)0255。每個(gè)類(lèi)型號(hào)對(duì)應(yīng)4個(gè)字節(jié)的向量,提供中斷處理程序的入口地址。 有3種中斷指令: (1)INT n 操作:保護(hù)3個(gè)字的斷點(diǎn)信息即依次將標(biāo)志寄存器PSW、主程序段

32、地址CS和當(dāng)前程序指針I(yè)P推入堆棧保護(hù)起來(lái),同時(shí)使TF和IF兩標(biāo)志清零。 中斷類(lèi)型號(hào)n乘以4,得到中斷向量地址,把向量的第二個(gè)字送CS,第一個(gè)字送IP,于是控制轉(zhuǎn)到中斷服務(wù)程序。 本指令對(duì)其他標(biāo)志沒(méi)有影響。 (2)溢出中斷指令 INTO 操作:若 INTO指令檢測(cè)到O1,則啟動(dòng)一個(gè)類(lèi)型號(hào)為4 的中斷過(guò)程,即相當(dāng)于執(zhí)行INT 4 指令,否則順序執(zhí)行下一條指令。 該指令的中斷向量地址為:4416,即10H。00010HIPCS中斷向中斷向量表量表00000H003FFH(3)中斷返回指令 IRET 功能:是所有中斷服務(wù)程序的最后一條指令。用于退出中斷過(guò)程,返回到中斷時(shí)的斷點(diǎn)處。 操作:把斷點(diǎn)處的I

33、P、CS以及狀態(tài)標(biāo)志依次彈出堆棧,同時(shí)相應(yīng)的修改堆棧指針SP。六、處理器控制指令六、處理器控制指令v1.標(biāo)志操作指令標(biāo)志操作指令直接對(duì)單個(gè)標(biāo)志位進(jìn)行操作直接對(duì)單個(gè)標(biāo)志位進(jìn)行操作設(shè)進(jìn)位標(biāo)志STC 格式:STC 執(zhí)行的操作:CF 1清除進(jìn)位標(biāo)志CLC 格式: CLC 執(zhí)行的操作:CF 0對(duì)進(jìn)位標(biāo)志取反CMC格式:CMC 執(zhí)行的操作:CF 取反CF清除方向標(biāo)志CLD格式:CLD 執(zhí)行的操作: DF 0設(shè)置方向標(biāo)志STD格式:STD 執(zhí)行的操作: DF 1設(shè)中斷標(biāo)志STI格式:STI 執(zhí)行的操作: IF 1清除中斷標(biāo)志CLI格式:CLI 執(zhí)行的操作: IF 0v2.處理器暫停指令 HLT 功能功能:使

34、CPU進(jìn)入暫停工作狀態(tài)。 用法:用法:常在程序中用于等待中斷 在出現(xiàn)下列3中情況之一時(shí),CPU脫離暫停狀態(tài): (1)在RESET線上有復(fù)位信號(hào)出現(xiàn); (2)在非屏蔽中斷線NMI上有請(qǐng)求信號(hào); (3)在中斷允許情況下(即中斷標(biāo)志IF1),在INTR線上有請(qǐng)求信號(hào)。v3.處理器脫離指令 ESC 功能功能:也叫交權(quán)指令,即處理器把控制權(quán)交給數(shù)值運(yùn)算協(xié)處理器。不影響標(biāo)志位。 v4.處理器等待指令 WAIT功能功能:當(dāng)TEST引線無(wú)效時(shí),使CPU進(jìn)入等待狀態(tài),不進(jìn)行任何操作。但可以被外部中斷源所中斷,中斷操作完成后,仍然回到等待狀態(tài)。此指令不影響標(biāo)志位。v5.總線鎖定指令 LOCK 功能:是指令前綴,用

35、于保證在下一條指令執(zhí)行期間,CPU對(duì)總線的控制權(quán)不被其他主設(shè)備(如DMA控制器)使用。 段寄存器指令段寄存器指令格式格式: : 操作碼助記符操作碼助記符 REG, SRCREG, SRC功能與說(shuō)明功能與說(shuō)明: : 操作碼助記符操作碼助記符:LDS, LES, LFS, LGS, LSS, :LDS, LES, LFS, LGS, LSS, 其后兩位其后兩位字母表段寄存器字母表段寄存器, , 它們是隱含的目標(biāo)寄存器它們是隱含的目標(biāo)寄存器. .將源操作數(shù)高將源操作數(shù)高1616位送隱含的目標(biāo)寄存器位送隱含的目標(biāo)寄存器; ; 若源操作數(shù)是若源操作數(shù)是3232位內(nèi)存操作數(shù)位內(nèi)存操作數(shù), , 則將低則將低

36、1616位送目標(biāo)通用位送目標(biāo)通用寄存器寄存器. .若源操作數(shù)是若源操作數(shù)是4848位內(nèi)存操作數(shù)位內(nèi)存操作數(shù), , 則將低則將低3232位送目標(biāo)通位送目標(biāo)通用寄存器用寄存器DS: ADDR1 DF 1234567890ABHDS: ADDR1 DF 1234567890ABH ADDR2 DD 1A2B3C4DHADDR2 DD 1A2B3C4DH CS: .CS: . LES EBX, ADDR1 LES EBX, ADDR1; ES=1234H, EBX=567890ABH; ES=1234H, EBX=567890ABH LDS SI, ADDR2 LDS SI, ADDR2 ; DS=1

37、A2BH, SI=3C4DH; DS=1A2BH, SI=3C4DH格式:格式: LDS REG,SRC執(zhí)行的結(jié)果:執(zhí)行的結(jié)果:REG (SRC)DS (SRC+2)000200402000:00002000:0200SIDS LDS SI,0200LES(LFS,LGS,LSS)LES(LFS,LGS,LSS)指針?biāo)图拇嫫骱椭羔標(biāo)图拇嫫骱虴S(FS,GS,SS)ES(FS,GS,SS)指令指令格式:格式:LES REG,SRC執(zhí)行的結(jié)果:執(zhí)行的結(jié)果:REG (SRC)ES (SRC+2)000200402000:00002000:0200SIES LES SI,0200作業(yè)v習(xí)題:v 3.2

38、4 ,3.28 , 3.29 , 3.30算術(shù)指令的綜合例子算術(shù)指令的綜合例子計(jì)算計(jì)算(V-(X*Y+Z-540)/X其中其中X,Y,Z,V均為均為16位帶符號(hào)位帶符號(hào)數(shù),已經(jīng)分別裝入數(shù),已經(jīng)分別裝入X,Y,Z,V單元,要求上式的計(jì)算結(jié)單元,要求上式的計(jì)算結(jié)果的商存入果的商存入AX,余數(shù)存入余數(shù)存入DX寄存器。寄存器。程序設(shè)計(jì)考慮的問(wèn)題:程序設(shè)計(jì)考慮的問(wèn)題:1、帶符號(hào)數(shù)的運(yùn)算的指令。、帶符號(hào)數(shù)的運(yùn)算的指令。2、參與運(yùn)算的符號(hào)的擴(kuò)展問(wèn)題。、參與運(yùn)算的符號(hào)的擴(kuò)展問(wèn)題。3、寄存器的占用問(wèn)題。、寄存器的占用問(wèn)題。4、計(jì)算結(jié)果的進(jìn)位問(wèn)題。、計(jì)算結(jié)果的進(jìn)位問(wèn)題。5、計(jì)算的先后順序問(wèn)題。、計(jì)算的先后順序問(wèn)題。算術(shù)指令綜合例子程序算術(shù)指令綜合例子程序MOV AX,XMOV BX

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論