![第三章指令系統(tǒng)及尋址方式3_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/c6bb2eb0-8e79-41a9-be89-ffa29ee54af8/c6bb2eb0-8e79-41a9-be89-ffa29ee54af81.gif)
![第三章指令系統(tǒng)及尋址方式3_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/c6bb2eb0-8e79-41a9-be89-ffa29ee54af8/c6bb2eb0-8e79-41a9-be89-ffa29ee54af82.gif)
![第三章指令系統(tǒng)及尋址方式3_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/c6bb2eb0-8e79-41a9-be89-ffa29ee54af8/c6bb2eb0-8e79-41a9-be89-ffa29ee54af83.gif)
![第三章指令系統(tǒng)及尋址方式3_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/c6bb2eb0-8e79-41a9-be89-ffa29ee54af8/c6bb2eb0-8e79-41a9-be89-ffa29ee54af84.gif)
![第三章指令系統(tǒng)及尋址方式3_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/c6bb2eb0-8e79-41a9-be89-ffa29ee54af8/c6bb2eb0-8e79-41a9-be89-ffa29ee54af85.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、教學(xué)提示在學(xué)習(xí)和應(yīng)用匯編語(yǔ)言進(jìn)行在學(xué)習(xí)和應(yīng)用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)時(shí),有一些經(jīng)常遇程序設(shè)計(jì)時(shí),有一些經(jīng)常遇到的問(wèn)題,例如算術(shù)運(yùn)算、到的問(wèn)題,例如算術(shù)運(yùn)算、代碼轉(zhuǎn)換等,需要掌握代碼轉(zhuǎn)換等,需要掌握第 3 章3.8 控制轉(zhuǎn)移類(lèi)指令控制轉(zhuǎn)移類(lèi)指令控制轉(zhuǎn)移類(lèi)指令用于實(shí)現(xiàn)分支、循環(huán)、過(guò)程用于實(shí)現(xiàn)分支、循環(huán)、過(guò)程調(diào)用調(diào)用等程序結(jié)構(gòu),是僅次于傳送等程序結(jié)構(gòu),是僅次于傳送指令的最常指令的最常用指令用指令( (也稱(chēng)為程序?qū)ぶ贩绞街噶钜卜Q(chēng)為程序?qū)ぶ贩绞街噶? )重點(diǎn)掌握:重點(diǎn)掌握:JMP/Jcc/LOOP CALL/RETINT n/IRET 常用系統(tǒng)功能調(diào)用常用系統(tǒng)功能調(diào)用一般了解:一般了解: LOOPZ/LOO
2、PNZ INTO 控制轉(zhuǎn)移類(lèi)指令通過(guò)控制轉(zhuǎn)移類(lèi)指令通過(guò)改變改變IP(和(和CS)值,值,實(shí)現(xiàn)程序執(zhí)行順序的改變實(shí)現(xiàn)程序執(zhí)行順序的改變3.8.1 無(wú)條件轉(zhuǎn)移指令只要執(zhí)行無(wú)條件轉(zhuǎn)移指令只要執(zhí)行無(wú)條件轉(zhuǎn)移指令JMP,就使程序轉(zhuǎn)到指定的目標(biāo)地址處,就使程序轉(zhuǎn)到指定的目標(biāo)地址處,從目標(biāo)地址處開(kāi)始執(zhí)行那里的指令。若轉(zhuǎn)移距離在從目標(biāo)地址處開(kāi)始執(zhí)行那里的指令。若轉(zhuǎn)移距離在-128127字字節(jié)內(nèi),節(jié)內(nèi),匯編程序就會(huì)自動(dòng)產(chǎn)生一個(gè)短(匯編程序就會(huì)自動(dòng)產(chǎn)生一個(gè)短(SHORT)JMP的兩字節(jié)的兩字節(jié)指令;否則,就會(huì)自動(dòng)產(chǎn)生一個(gè)能在指令;否則,就會(huì)自動(dòng)產(chǎn)生一個(gè)能在32K范圍內(nèi)尋址的范圍內(nèi)尋址的NEAR JMP指令。指令。
3、操作數(shù)操作數(shù)label是要轉(zhuǎn)移到的是要轉(zhuǎn)移到的目標(biāo)地址目標(biāo)地址(目的地址目的地址、轉(zhuǎn)移到的地址轉(zhuǎn)移到的地址)依據(jù)目標(biāo)地址出現(xiàn)的形式,依據(jù)目標(biāo)地址出現(xiàn)的形式,JMP指令分成指令分成4種類(lèi)型:種類(lèi)型:(1) 段內(nèi)直接跳轉(zhuǎn)段內(nèi)直接跳轉(zhuǎn) :JMP NEAR-LABL ; IP+16IP+16位位移量位位移量(2) 段內(nèi)直接跳轉(zhuǎn)短形式段內(nèi)直接跳轉(zhuǎn)短形式: JMP SHORT NEAR-LABL IP+8IP+8位位移量位位移量(3) 段內(nèi)和組內(nèi)間接跳轉(zhuǎn)段內(nèi)和組內(nèi)間接跳轉(zhuǎn): JMP AX ; AX送至送至IP (4) 段間間接跳轉(zhuǎn)段間間接跳轉(zhuǎn): JMP DWORD PTRBPDI ; (5) 段間直接跳轉(zhuǎn)
4、段間直接跳轉(zhuǎn): JMP FAR PTR OPRJMP labelJMP label;程序轉(zhuǎn)向;程序轉(zhuǎn)向labellabel標(biāo)號(hào)指定的地址執(zhí)行。標(biāo)號(hào)指定的地址執(zhí)行。該指令主要修改該指令主要修改IPIP的值的值第 3 章目標(biāo)地址的尋址方式直接尋址方式直接尋址方式n轉(zhuǎn)移地址象立即數(shù)一樣,直轉(zhuǎn)移地址象立即數(shù)一樣,直接在指令的機(jī)器代碼中,就接在指令的機(jī)器代碼中,就是直接尋址方式是直接尋址方式間接尋址方式間接尋址方式n轉(zhuǎn)移轉(zhuǎn)移目標(biāo)目標(biāo)的有效地址的有效地址EA在寄在寄存器或主存單元中,就是通存器或主存單元中,就是通過(guò)寄存器或存儲(chǔ)器的間接尋過(guò)寄存器或存儲(chǔ)器的間接尋址方式址方式第 3 章用標(biāo)號(hào)表達(dá)用標(biāo)號(hào)表達(dá)用寄
5、存器或存儲(chǔ)器用寄存器或存儲(chǔ)器操作數(shù)表達(dá)操作數(shù)表達(dá)目標(biāo)地址的范圍:段內(nèi)段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移近轉(zhuǎn)移(近轉(zhuǎn)移(near)n在當(dāng)前代碼段在當(dāng)前代碼段64KB范圍內(nèi)轉(zhuǎn)移范圍內(nèi)轉(zhuǎn)移( 32KB范圍)范圍)n不需要更改不需要更改CS段地址,段地址,只要改只要改變變IP偏移地址偏移地址段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移短轉(zhuǎn)移(短轉(zhuǎn)移(short)n轉(zhuǎn)移范圍可以用一個(gè)字節(jié)表達(dá),轉(zhuǎn)移范圍可以用一個(gè)字節(jié)表達(dá),在段內(nèi)在段內(nèi)128127范圍的轉(zhuǎn)移范圍的轉(zhuǎn)移代碼段代碼段代碼段代碼段第 3 章目標(biāo)地址的范圍:段間段間轉(zhuǎn)移段間轉(zhuǎn)移遠(yuǎn)轉(zhuǎn)移(遠(yuǎn)轉(zhuǎn)移(far)n從當(dāng)前代碼段跳轉(zhuǎn)到另一個(gè)從當(dāng)前代碼段跳轉(zhuǎn)到另一個(gè)代碼段,可以在代碼段,可以在1MB范圍范圍n
6、需要需要更改更改CS段地址和段地址和IP偏移偏移地址地址n目標(biāo)地址必須用一個(gè)目標(biāo)地址必須用一個(gè)32位數(shù)位數(shù)表達(dá),叫做表達(dá),叫做32位遠(yuǎn)指針位遠(yuǎn)指針,它,它就是指令的邏輯地址就是指令的邏輯地址第 3 章代碼段代碼段代碼段代碼段 實(shí)際編程匯編時(shí),匯編程序會(huì)根據(jù)目標(biāo)地址的距離,實(shí)際編程匯編時(shí),匯編程序會(huì)根據(jù)目標(biāo)地址的距離,自動(dòng)處理自動(dòng)處理成短轉(zhuǎn)移、近轉(zhuǎn)移或遠(yuǎn)轉(zhuǎn)移成短轉(zhuǎn)移、近轉(zhuǎn)移或遠(yuǎn)轉(zhuǎn)移 程序員可用操作符程序員可用操作符short、near ptr 或或far ptr 強(qiáng)制強(qiáng)制段內(nèi)轉(zhuǎn)移直接尋址JMP labelJMP label;IPIP+IPIP+位移量位移量位移量是緊接著位移量是緊接著JMP指令后
7、的那條指令的偏移地址,指令后的那條指令的偏移地址,到目標(biāo)指令的偏移地址的地址位移到目標(biāo)指令的偏移地址的地址位移當(dāng)向地址增大方向轉(zhuǎn)移時(shí),位移量為正;向地址減當(dāng)向地址增大方向轉(zhuǎn)移時(shí),位移量為正;向地址減小方向轉(zhuǎn)移時(shí),位移量為負(fù)小方向轉(zhuǎn)移時(shí),位移量為負(fù)jmp jmp againagain;轉(zhuǎn)移到;轉(zhuǎn)移到againagain處繼續(xù)執(zhí)行處繼續(xù)執(zhí)行again:again:dec cxdec cx;標(biāo)號(hào);標(biāo)號(hào)againagain的指令的指令jmp jmp outputoutput;轉(zhuǎn)向;轉(zhuǎn)向outputoutputoutput:output: mov result,almov result,al;標(biāo)號(hào);標(biāo)號(hào)
8、outputoutput的指令的指令第 3 章實(shí)際為相對(duì)尋址實(shí)際為相對(duì)尋址段內(nèi)轉(zhuǎn)移間接尋址JMP r16/m16 JMP r16/m16 ;IPr16/m16IPr16/m16將一個(gè)將一個(gè)1616位寄存器或主存字單元內(nèi)容送入位寄存器或主存字單元內(nèi)容送入IPIP寄存器,作為新的指令指針,但不修改寄存器,作為新的指令指針,但不修改CSCS寄存寄存器的內(nèi)容器的內(nèi)容jmp axjmp ax;IPAXIPAX等效于等效于MOV IP,AXMOV IP,AXjmp word ptr 2000hjmp word ptr 2000h ;IP2000hIP2000h第 3 章段間轉(zhuǎn)移直接尋址JMP far pt
9、r labelJMP far ptr label;IPlabelIPlabel的偏移地址的偏移地址;CSlabelCSlabel的段地址的段地址將標(biāo)號(hào)所在段的段地址作為新的將標(biāo)號(hào)所在段的段地址作為新的CS值,值,標(biāo)號(hào)在該段內(nèi)的偏移地址作為新的標(biāo)號(hào)在該段內(nèi)的偏移地址作為新的IP值;這值;這樣,程序跳轉(zhuǎn)到新的代碼段執(zhí)行樣,程序跳轉(zhuǎn)到新的代碼段執(zhí)行jmp far ptr othersegjmp far ptr otherseg;遠(yuǎn)轉(zhuǎn)移到代碼段;遠(yuǎn)轉(zhuǎn)移到代碼段2 2的的othersegotherseg第 3 章段間轉(zhuǎn)移間接尋址JMP far ptr memJMP far ptr mem;IPmemIP
10、mem,CSmem+2CSmem+2用一個(gè)雙字存儲(chǔ)單元表示要跳轉(zhuǎn)的目標(biāo)地用一個(gè)雙字存儲(chǔ)單元表示要跳轉(zhuǎn)的目標(biāo)地址。這個(gè)目標(biāo)地址存放在主存中連續(xù)的兩個(gè)址。這個(gè)目標(biāo)地址存放在主存中連續(xù)的兩個(gè)字單元中。其中,低位字送字單元中。其中,低位字送IPIP寄存器,高位寄存器,高位字送字送CSCS寄存器寄存器mov word ptr bx,0mov word ptr bx,0mov word ptr bx+2,1500hmov word ptr bx+2,1500hJMP far ptr bx JMP far ptr bx ;轉(zhuǎn)移到;轉(zhuǎn)移到1500h:01500h:0第 3 章3.8.2 條件轉(zhuǎn)移指令指定的條件
11、指定的條件cc如果成立,程序轉(zhuǎn)移到如果成立,程序轉(zhuǎn)移到由標(biāo)號(hào)由標(biāo)號(hào)label指定的目標(biāo)地址去執(zhí)行指指定的目標(biāo)地址去執(zhí)行指令;條件不成立,則程序?qū)㈨樞驁?zhí)行令;條件不成立,則程序?qū)㈨樞驁?zhí)行下一條指令下一條指令操作數(shù)操作數(shù)label是采用短轉(zhuǎn)移,稱(chēng)為相對(duì)是采用短轉(zhuǎn)移,稱(chēng)為相對(duì)尋址方式尋址方式Jcc labelJcc label ;條件滿足,發(fā)生轉(zhuǎn)移:;條件滿足,發(fā)生轉(zhuǎn)移:IPIPIPIP8 8位位移量位位移量 ;條件不滿足,順序執(zhí)行;條件不滿足,順序執(zhí)行第 3 章第 3 章相對(duì)尋址方式Jcc指令的操作數(shù)指令的操作數(shù)label是一個(gè)標(biāo)號(hào)是一個(gè)標(biāo)號(hào)n一個(gè)一個(gè)8位位移量,表示位位移量,表示Jcc指令后的那
12、條指令后的那條指令的偏移地址,到目標(biāo)指令的偏移地址指令的偏移地址,到目標(biāo)指令的偏移地址的地址位移的地址位移n8位位移量是位位移量是相對(duì)于相對(duì)于當(dāng)前當(dāng)前IP的,且距當(dāng)前的,且距當(dāng)前IP地址地址128127個(gè)單元的范圍之內(nèi),個(gè)單元的范圍之內(nèi),屬于段內(nèi)短距離轉(zhuǎn)移屬于段內(nèi)短距離轉(zhuǎn)移nJcc目標(biāo)地址就采用這種目標(biāo)地址就采用這種相對(duì)尋址方式相對(duì)尋址方式Jcc指令為指令為2個(gè)字節(jié),條件不滿足時(shí)的個(gè)字節(jié),條件不滿足時(shí)的順序執(zhí)行就是當(dāng)前指令偏移指針順序執(zhí)行就是當(dāng)前指令偏移指針I(yè)P加加2第 3 章Jcc指令的分類(lèi)Jcc指令指令是是要利用標(biāo)志位(見(jiàn)要利用標(biāo)志位(見(jiàn)表表)并且執(zhí)行后并且執(zhí)行后不影響標(biāo)志位。根據(jù)不影響標(biāo)
13、志位。根據(jù)利用的標(biāo)志位不同,利用的標(biāo)志位不同,17條指令分條指令分成成4種情況:種情況: 判斷單個(gè)標(biāo)志位狀態(tài)判斷單個(gè)標(biāo)志位狀態(tài) 比較無(wú)符號(hào)數(shù)高低比較無(wú)符號(hào)數(shù)高低 比較有符號(hào)數(shù)大小比較有符號(hào)數(shù)大小 判斷計(jì)數(shù)器判斷計(jì)數(shù)器CX為為0條件轉(zhuǎn)移指令中的條件cc 實(shí)際雖然指令只有實(shí)際雖然指令只有16條條,但卻有但卻有30個(gè)助記符個(gè)助記符 采用多個(gè)助記符,只是為了方便記憶和使用采用多個(gè)助記符,只是為了方便記憶和使用第 3 章判斷單個(gè)標(biāo)志位狀態(tài)這組指令單獨(dú)判斷這組指令單獨(dú)判斷5個(gè)狀態(tài)標(biāo)志之一個(gè)狀態(tài)標(biāo)志之一JZ/JE和和JNZ/JNE:利用零標(biāo)志:利用零標(biāo)志ZF,判斷結(jié),判斷結(jié)果是否為零轉(zhuǎn)移(或相等)果是否為零
14、轉(zhuǎn)移(或相等)JS和和JNS:利用符號(hào)標(biāo)志:利用符號(hào)標(biāo)志SF,判斷結(jié)果是,判斷結(jié)果是正是負(fù)轉(zhuǎn)移正是負(fù)轉(zhuǎn)移JO和和JNO:利用溢出標(biāo)志:利用溢出標(biāo)志OF,判斷結(jié)果是,判斷結(jié)果是否產(chǎn)生溢出轉(zhuǎn)移否產(chǎn)生溢出轉(zhuǎn)移JP/JPE和和JNP/JPO:利用奇偶標(biāo)志:利用奇偶標(biāo)志PF,判,判斷結(jié)果中斷結(jié)果中“1”的個(gè)數(shù)是偶是奇轉(zhuǎn)移的個(gè)數(shù)是偶是奇轉(zhuǎn)移JC/JB/JNAE和和JNC/JNB/JAE:利用進(jìn)位:利用進(jìn)位標(biāo)志標(biāo)志CF,判斷結(jié)果是否進(jìn)位或借位轉(zhuǎn)移,判斷結(jié)果是否進(jìn)位或借位轉(zhuǎn)移例題例題3.39例題例題3.41例題例題3.42例題例題3.43例題例題3.44例例3.39:JZ/JNZ指令指令利用利用ZF標(biāo)志位標(biāo)志
15、位repz cmpsbrepz cmpsb;重復(fù)比較兩個(gè)字符;重復(fù)比較兩個(gè)字符jnz unmatjnz unmat;ZFZF0 0(不等),轉(zhuǎn)移(不等),轉(zhuǎn)移mov al,0mov al,0;順序執(zhí)行(相等);順序執(zhí)行(相等)jmp outputjmp outputunmat:unmat:mov al,0ffhmov al,0ffhoutput:output:mov result,almov result,alrepz cmpsbrepz cmpsb;重復(fù)比較兩個(gè)字符;重復(fù)比較兩個(gè)字符jz matjz mat;ZFZF1 1(相等),轉(zhuǎn)移(相等),轉(zhuǎn)移mov al,0ffhmov al,0ff
16、h;順序執(zhí)行(不等);順序執(zhí)行(不等)jmp outputjmp outputmat:mat:mov al,0mov al,0output:output:mov result,almov result,al例例3.41:JS/JNS指令指令利用利用SF標(biāo)志位標(biāo)志位;計(jì)算計(jì)算|XY|(絕對(duì)值)(絕對(duì)值);X和和Y為存放于為存放于X單元和單元和Y單元的單元的16位操作數(shù)位操作數(shù);結(jié)果存入;結(jié)果存入resultmov ax,Xmov ax,Xsub ax,Ysub ax,Yjns nonnegjns nonnegneg axneg ax;negneg是求補(bǔ)指令是求補(bǔ)指令nonneg:nonneg:
17、mov result,axmov result,ax例例3.42:JO/JNO指令指令利用利用OF標(biāo)志位標(biāo)志位;計(jì)算;計(jì)算XY;X和和Y為存放于為存放于X單元和單元和Y單元的單元的16位操作數(shù)位操作數(shù);若溢出,則轉(zhuǎn)移到;若溢出,則轉(zhuǎn)移到overflow處理處理mov ax,Xmov ax,Xsub ax,Ysub ax,Yjo overflowjo overflow.;無(wú)溢出,結(jié)果正確;無(wú)溢出,結(jié)果正確overflow:overflow: .;有溢出處理;有溢出處理例例3.43:JP/JNP指令指令利用利用PF標(biāo)志位標(biāo)志位;設(shè)字符的;設(shè)字符的ASCII碼在碼在AL寄存器中寄存器中;將字符加上奇
18、校驗(yàn)位;將字符加上奇校驗(yàn)位;在字符;在字符ASCII碼中為碼中為“1”的個(gè)數(shù)已為奇數(shù)時(shí)的個(gè)數(shù)已為奇數(shù)時(shí);則令其最高位為;則令其最高位為“0”;否則令最高位為;否則令最高位為“1”and al,7fhand al,7fh;最高位置;最高位置“0”0”,同時(shí)判斷,同時(shí)判斷“1”1”的個(gè)的個(gè)數(shù)數(shù)jnp nextjnp next;個(gè)數(shù)已為奇數(shù),則轉(zhuǎn)向;個(gè)數(shù)已為奇數(shù),則轉(zhuǎn)向nextnextor al,80hor al,80h;否則,最高位置;否則,最高位置“1”1”next:next:.例例3.44:JC/JNC指令指令利用了利用了CF標(biāo)志位標(biāo)志位;記錄;記錄BX中中1的個(gè)數(shù)的個(gè)數(shù)xor al,alxo
19、r al,al;ALAL0 0,CFCF0 0again:again:test bx,test bx,0ffffh 0ffffh ;等價(jià)于;等價(jià)于 cmp bx,0cmp bx,0je nextje nextshl bx,1shl bx,1jnc againjnc againinc alinc aljmp againjmp againnext:next:.;ALAL保存保存1 1的個(gè)數(shù)的個(gè)數(shù)另一種做法另一種做法記錄記錄BX中中“1”的個(gè)數(shù)的個(gè)數(shù)xor al,alxor al,al;ALAL0 0,CFCF0 0again:again:cmp bx,0cmp bx,0jz nextjz next
20、shl bx,1shl bx,1;也可使用;也可使用 shr bx,1shr bx,1adc al,0adc al,0jmp againjmp againnext:next:.;ALAL保存保存1 1的個(gè)數(shù)的個(gè)數(shù)第 3 章比較無(wú)符號(hào)數(shù)高低無(wú)符號(hào)數(shù)的大小用高(無(wú)符號(hào)數(shù)的大小用高(Above)低)低(Below)表示)表示利用利用CF確定高低、利用確定高低、利用ZF標(biāo)志確定相等標(biāo)志確定相等(Equal)兩數(shù)的高低分成兩數(shù)的高低分成4種關(guān)系:種關(guān)系:大于轉(zhuǎn)移:大于轉(zhuǎn)移:JA ( JNBE )大于等于轉(zhuǎn)移:大于等于轉(zhuǎn)移: JAE (JNB /JNC )小于轉(zhuǎn)移:小于轉(zhuǎn)移:JB (JC /JNAE )小
21、于等于轉(zhuǎn)移:小于等于轉(zhuǎn)移: JBE ( JNA )例例3.45a:比較無(wú)符號(hào)數(shù):比較無(wú)符號(hào)數(shù)CMP ax,bxCMP ax,bx;比較;比較axax和和bxbxJNB nextJNB next;若;若axaxbxbx,轉(zhuǎn)移,轉(zhuǎn)移xchg ax,bxxchg ax,bx;若;若axaxbxbx,交換,交換next:next:.結(jié)果:結(jié)果:AX保存較大的保存較大的無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù)第 3 章比較有符號(hào)數(shù)大小有符號(hào)數(shù)的大(有符號(hào)數(shù)的大(Greater)小()?。↙ess)需)需要組合要組合OF、SF標(biāo)志,并利用標(biāo)志,并利用ZF標(biāo)志確定標(biāo)志確定相等(相等(Equal)兩數(shù)的大小分成兩數(shù)的大小分成4種關(guān)系
22、:種關(guān)系: 大于轉(zhuǎn)移:大于轉(zhuǎn)移: JG (JNLE ) 大于等于轉(zhuǎn)移:大于等于轉(zhuǎn)移: JGE (JNL ) 小于轉(zhuǎn)移:小于轉(zhuǎn)移: JL(JNGE) 小于等于轉(zhuǎn)移:小于等于轉(zhuǎn)移: JLE(JNG)例例3.45b:比較有符號(hào)數(shù):比較有符號(hào)數(shù)CMP ax,bxCMP ax,bx;比較;比較axax和和bxbxJNL nextJNL next;若;若axaxbxbx,轉(zhuǎn)移,轉(zhuǎn)移xchg ax,bxxchg ax,bx;若;若axaxbxbx,交換,交換next:next:.結(jié)果:結(jié)果:AX保存較大的保存較大的有符號(hào)數(shù)有符號(hào)數(shù)第 3 章計(jì)數(shù)器CX為0轉(zhuǎn)移這是一條較特殊的指令這是一條較特殊的指令CX寄存器
23、通常在程序中用做計(jì)數(shù)器寄存器通常在程序中用做計(jì)數(shù)器JCXZ指令用來(lái)判斷計(jì)數(shù)是否為指令用來(lái)判斷計(jì)數(shù)是否為0JCXZ labelJCXZ label ;CXCX0 0,發(fā)生轉(zhuǎn)移:,發(fā)生轉(zhuǎn)移:IPIPIPIP8 8位位移量位位移量 ;CX0CX0,順序執(zhí)行,順序執(zhí)行判斷計(jì)數(shù)器為0(例(例3.36)mov cx,100mov cx,100again:again: movsbmovsb;傳送一個(gè)字節(jié);傳送一個(gè)字節(jié)dec cxdec cx;傳送次數(shù)減;傳送次數(shù)減1 1jnz againjnz again;判斷傳送次數(shù);判斷傳送次數(shù)cxcx是否為是否為0 0;不為;不為0 0(ZF=0ZF=0),則轉(zhuǎn)移;否
24、則,結(jié)束),則轉(zhuǎn)移;否則,結(jié)束第 2 章mov cx,100mov cx,100again:again: jcxz nextjcxz next;判斷傳送次數(shù);判斷傳送次數(shù)cxcx是否為是否為0 0movsbmovsbdec cxdec cxjmp againjmp againnext:next:.cmp cx,0jz next第 3 章3.8.3 循環(huán)指令(loop)LOOP labelLOOP label;CXCXCXCX1 1, CX0CX0,循環(huán)到標(biāo)號(hào),循環(huán)到標(biāo)號(hào)label ,CX=0,label ,CX=0,跳出循環(huán)體執(zhí)行跳出循環(huán)體執(zhí)行LOOPLOOP下面一條指令下面一條指令LOOPE
25、 labelLOOPE label; CXCXCXCX1 1, CX0CX0且且 ZFZF1 1,LOOPZ labelLOOPZ label; 則程序轉(zhuǎn)移到標(biāo)號(hào)則程序轉(zhuǎn)移到標(biāo)號(hào)LabelLabel處繼續(xù)循環(huán)。處繼續(xù)循環(huán)。只要只要 CX=0CX=0或或 ZFZF0 0就會(huì)結(jié)束循環(huán)就會(huì)結(jié)束循環(huán)LOOPNE labelLOOPNE label; CXCXCXCX1 1, CX0CX0且且 ZFZF0 0,LOOPNZ labelLOOPNZ label; 則程序轉(zhuǎn)移到標(biāo)號(hào)則程序轉(zhuǎn)移到標(biāo)號(hào)LabelLabel處繼續(xù)循環(huán)。處繼續(xù)循環(huán)。只要只要 CX=0CX=0或或 ZFZF1 1就會(huì)結(jié)束循環(huán)就會(huì)結(jié)束循
26、環(huán)例例3.46:記錄空格個(gè)數(shù):記錄空格個(gè)數(shù)mov cx,countmov cx,count;設(shè)置循環(huán)次數(shù);設(shè)置循環(huán)次數(shù)mov si,offset stringmov si,offset stringxor bx,bxxor bx,bx;bxbx清清0 0,用于記錄空格數(shù),用于記錄空格數(shù)mov al,20hmov al,20hagain:again:cmp al,es:sicmp al,es:sijnz nextjnz next;ZF=0ZF=0,非空格,轉(zhuǎn)移,非空格,轉(zhuǎn)移inc bxinc bx;ZF=1ZF=1,是空格,個(gè)數(shù)加,是空格,個(gè)數(shù)加1 1next:next:inc siinc si
27、loop againloop again;字符個(gè)數(shù)減;字符個(gè)數(shù)減1 1,不為,不為0 0繼續(xù)循環(huán)繼續(xù)循環(huán)dec cxjnz again第 3 章例: 在一個(gè)含0的字節(jié)數(shù)組中尋找第一個(gè)為0的字節(jié),一旦找到停止搜索 MOV CX,LEN;數(shù)組有個(gè)元素;數(shù)組有個(gè)元素 MOV BX,-1; 設(shè)置數(shù)組指針設(shè)置數(shù)組指針NEXT:INC BX; 指向下一個(gè)元素指向下一個(gè)元素 CMP ARRAYBX,0;判斷數(shù)組元素是否為;判斷數(shù)組元素是否為0 LOOPNE NEXT;ZF0,比較結(jié)果比較結(jié)果不為不為0,重復(fù)循環(huán),重復(fù)循環(huán)第 3 章3.8.4 子程序指令子程序是完成特定功能的一段程序子程序是完成特定功能的一段
28、程序當(dāng)主程序(調(diào)用程序)需要執(zhí)行這個(gè)當(dāng)主程序(調(diào)用程序)需要執(zhí)行這個(gè)功能時(shí),采用功能時(shí),采用CALL調(diào)用指令轉(zhuǎn)移到該調(diào)用指令轉(zhuǎn)移到該子程序的起始處執(zhí)行子程序的起始處執(zhí)行當(dāng)運(yùn)行完子程序功能后,采用當(dāng)運(yùn)行完子程序功能后,采用RET返返回指令回到主程序繼續(xù)執(zhí)行回指令回到主程序繼續(xù)執(zhí)行第 3 章主程序與子程序CALL label主程序主程序RET子程序子程序回到回到CALL指令后的指令指令后的指令處處返回地址返回地址子程序調(diào)用指令CALL指令分成指令分成4種類(lèi)型(類(lèi)似種類(lèi)型(類(lèi)似JMP)CALL label;段內(nèi)調(diào)用、直接尋址;段內(nèi)調(diào)用、直接尋址CALL WORD PTRBX;段內(nèi)寄存器間接尋址;段內(nèi)
29、寄存器間接尋址CALL r16 ;段內(nèi)寄存器直接尋址段內(nèi)寄存器直接尋址CALL far ptr label;段間調(diào)用、直接尋址;段間調(diào)用、直接尋址CALL far ptr mem;段間調(diào)用、間接尋址;段間調(diào)用、間接尋址CALL指令需要保存返回地址:指令需要保存返回地址:n段內(nèi)調(diào)用段內(nèi)調(diào)用是指主程序與子程序均處于同一個(gè)指令段,此是指主程序與子程序均處于同一個(gè)指令段,此時(shí),時(shí),CS內(nèi)容不變,入棧偏移地址內(nèi)容不變,入棧偏移地址IP,IP變成新偏移量變成新偏移量SPSP2,SS:SPIPn段間調(diào)用段間調(diào)用是指主程序與子程序處于不同指令段,是指主程序與子程序處于不同指令段, CS和和IP均發(fā)生變化。同時(shí)
30、,偏移地址均發(fā)生變化。同時(shí),偏移地址IP和段地址和段地址CS入棧入棧SPSP2,SS:SPIPSPSP2,SS:SPCS第 3 章子程序返回指令根據(jù)段內(nèi)和段間、有無(wú)參數(shù),分成根據(jù)段內(nèi)和段間、有無(wú)參數(shù),分成4種類(lèi)型種類(lèi)型RET;無(wú)參數(shù)段內(nèi)返回;無(wú)參數(shù)段內(nèi)返回RET i16;有參數(shù)段內(nèi)返回;有參數(shù)段內(nèi)返回RET;無(wú)參數(shù)段間返回;無(wú)參數(shù)段間返回RET i16;有參數(shù)段間返回;有參數(shù)段間返回需要彈出需要彈出CALL指令壓入堆棧的返回地址指令壓入堆棧的返回地址n段內(nèi)返回段內(nèi)返回出棧偏移地址出棧偏移地址IPIPSS:SP, SPSP2n段間返回段間返回出棧偏移地址出棧偏移地址IP和段地址和段地址CSIPS
31、S:SP,SPSP2CSSS:SP,SPSP2i16參數(shù)的作用參數(shù)的作用第 3 章第 3 章返回指令RET的參數(shù)RET i16;有參數(shù)返回;有參數(shù)返回RET指令可以帶有一個(gè)指令可以帶有一個(gè)為偶數(shù)的為偶數(shù)的立即立即數(shù)數(shù)i16,改變棧頂位置,改變棧頂位置則堆棧指針則堆棧指針SP將增加,即將增加,即SPSP+i16這個(gè)特點(diǎn)使得程序返回時(shí)可以方便地這個(gè)特點(diǎn)使得程序返回時(shí)可以方便地廢除若干執(zhí)行廢除若干執(zhí)行CALL指令以前入棧的指令以前入棧的參數(shù)參數(shù)例例3.47:子程序:子程序;主程序;主程序mov al,0fhmov al,0fh;提供參數(shù);提供參數(shù)ALALcallcall htoasc htoasc
32、;調(diào)用子程序;調(diào)用子程序.;子程序;子程序:將:將ALAL低低4 4位的一位位的一位1616進(jìn)制數(shù)進(jìn)制數(shù)轉(zhuǎn)換轉(zhuǎn)換成成ASCIIASCII碼碼htoasc:htoasc: and al,0fhand al,0fh;只??;只取alal的低的低4 4位位or al,30hor al,30h;alal高高4 4位變成位變成3 3cmp al,39hcmp al,39h;是;是0 09 9,還是,還是0Ah0Ah0Fh0Fhjbe htoendjbe htoendadd al,7add al,7;是;是0Ah0Ah0Fh0Fh,加上,加上7 7htoend:htoend: retret;子程序返回;子程
33、序返回第 3 章CALL應(yīng)用舉例第 3 章斷點(diǎn)處斷點(diǎn)處IP進(jìn)棧,進(jìn)棧,BX+1,BX+0進(jìn)入進(jìn)入IP斷點(diǎn)彈入斷點(diǎn)彈入IP,sp+2進(jìn)入進(jìn)入IPSP+N賦予賦予SP斷點(diǎn)彈入斷點(diǎn)彈入IP,CSCALL DWORD PTRBX斷點(diǎn)彈入斷點(diǎn)彈入IP斷點(diǎn)處斷點(diǎn)處CS進(jìn)棧,進(jìn)棧,IP進(jìn)棧,進(jìn)棧,BX+3,BX+2進(jìn)入進(jìn)入CS,BX+1,BX+0進(jìn)入進(jìn)入IP斷點(diǎn)處斷點(diǎn)處CS進(jìn)棧,進(jìn)棧,IP進(jìn)棧進(jìn)棧SUBN段地址進(jìn)入段地址進(jìn)入CS,SUBN偏移量進(jìn)入偏移量進(jìn)入IP斷點(diǎn)處斷點(diǎn)處IP進(jìn)棧,進(jìn)棧,SUBN進(jìn)入進(jìn)入IP斷點(diǎn)處斷點(diǎn)處IP進(jìn)棧,進(jìn)棧,SI進(jìn)入進(jìn)入IP段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用段間寄存器間接調(diào)用段間寄存器間接
34、調(diào)用返回并釋放堆棧中的返回并釋放堆棧中的N個(gè)單元,個(gè)單元,N應(yīng)為偶數(shù)應(yīng)為偶數(shù)CALL WORD PTRBXCALL SI段內(nèi)寄存器間接調(diào)用段內(nèi)寄存器間接調(diào)用段內(nèi)寄存器直接調(diào)用段內(nèi)寄存器直接調(diào)用段間返回主程序段間返回主程序段內(nèi)返回主程序段內(nèi)返回主程序調(diào)用指令舉例調(diào)用指令舉例CALL SUBNCALL FAR PTR SUBN功能描述功能描述段間直接調(diào)用段間直接調(diào)用RET RET N第 3 章3.8.5 系統(tǒng)中斷功能調(diào)用指令為了方便、減輕用戶編程的負(fù)擔(dān),操作系統(tǒng)提供了許多可供用戶使用的功能為了方便、減輕用戶編程的負(fù)擔(dān),操作系統(tǒng)提供了許多可供用戶使用的功能子程序,使用這些子程序可使用專(zhuān)門(mén)的調(diào)用指令,
35、格式像中斷調(diào)用一樣;子程序,使用這些子程序可使用專(zhuān)門(mén)的調(diào)用指令,格式像中斷調(diào)用一樣; INT NN;整數(shù),是;整數(shù),是0 255之間的功能序號(hào)之間的功能序號(hào)與與CALL指令區(qū)別在于指令區(qū)別在于1、兩者都是中止當(dāng)前程序的執(zhí)行而轉(zhuǎn)入調(diào)用子程序執(zhí)行,差別在于、兩者都是中止當(dāng)前程序的執(zhí)行而轉(zhuǎn)入調(diào)用子程序執(zhí)行,差別在于CALL指令是調(diào)用用戶自編子程序執(zhí)行,而指令是調(diào)用用戶自編子程序執(zhí)行,而INT 指令則是調(diào)用操作系指令則是調(diào)用操作系統(tǒng)子程序執(zhí)行。指令中的統(tǒng)子程序執(zhí)行。指令中的N用于標(biāo)識(shí)功能服務(wù)的類(lèi)型號(hào)。用于標(biāo)識(shí)功能服務(wù)的類(lèi)型號(hào)。2、用戶程序中對(duì)子程序的編制和調(diào)用沒(méi)有任何限制,而功能服務(wù)子程、用戶程序中對(duì)
36、子程序的編制和調(diào)用沒(méi)有任何限制,而功能服務(wù)子程序則有嚴(yán)格的限制,必須受操作系統(tǒng)限制。這里序則有嚴(yán)格的限制,必須受操作系統(tǒng)限制。這里N是查表的索引值。是查表的索引值。稱(chēng)為中斷向量表。稱(chēng)為中斷向量表。3、 INT指令轉(zhuǎn)入功能服務(wù)程序前,指令轉(zhuǎn)入功能服務(wù)程序前,CPU將標(biāo)志寄存器以及當(dāng)前指令的將標(biāo)志寄存器以及當(dāng)前指令的段地址段地址CS和偏移地址量和偏移地址量IP都?jí)喝攵褩?,服?wù)結(jié)束時(shí)返回指令都?jí)喝攵褩?,服?wù)結(jié)束時(shí)返回指令I(lǐng)RET,又從堆棧彈出來(lái)還原給又從堆棧彈出來(lái)還原給IP、 CS寄存器以及標(biāo)志寄存器。而寄存器以及標(biāo)志寄存器。而CALL指指令則只自動(dòng)保護(hù)返回地址令則只自動(dòng)保護(hù)返回地址CS、 IP進(jìn)入
37、堆棧,不保護(hù)標(biāo)志寄存器進(jìn)入進(jìn)入堆棧,不保護(hù)標(biāo)志寄存器進(jìn)入堆棧。堆棧。4、 CALL指令出現(xiàn)的型式多,而指令出現(xiàn)的型式多,而INT指令型式單一指令型式單一第 3 章INT 執(zhí)行的過(guò)程主程序主程序IRET中斷服務(wù)程序中斷服務(wù)程序斷點(diǎn)斷點(diǎn)INT 調(diào)用調(diào)用第 3 章INT 0, IRET指令 INT 0 INT 0溢出中斷,當(dāng)溢出中斷,當(dāng)OF=1OF=1,產(chǎn)生的中斷,其操,產(chǎn)生的中斷,其操作類(lèi)似作類(lèi)似INT NINT N,他的中斷類(lèi)型碼規(guī)定為,他的中斷類(lèi)型碼規(guī)定為4 4,它的中斷向量地址為,它的中斷向量地址為10H10H,所以在,所以在CSCS入棧后,把地址為入棧后,把地址為12H12H的的1 1個(gè)字
38、的內(nèi)個(gè)字的內(nèi)容傳送到容傳送到CSCS,在,在IPIP入棧后,把地址為入棧后,把地址為10H10H的的1 1個(gè)字的內(nèi)容傳送到個(gè)字的內(nèi)容傳送到IPIP。IRET IRET 中斷返回指令,是中斷服務(wù)程序的最中斷返回指令,是中斷服務(wù)程序的最后一條指令,使程序返回到中斷時(shí)的斷點(diǎn)后一條指令,使程序返回到中斷時(shí)的斷點(diǎn)處。處。第 3 章INT 21H 的部分DOS系統(tǒng)功能調(diào)用功能描述AH=01鍵入一個(gè)字符,有顯示回應(yīng)02入口參數(shù)無(wú)出口參數(shù)AL=鍵入字符的ASCII碼顯示屏上顯示一個(gè)字符DL=待顯示字符的ASCII碼06檢測(cè)鍵盤(pán)輸入DL=0FFH無(wú)鍵入時(shí)Z=1,有鍵入時(shí)Z=0 AL=鍵入字符i的ASCII碼顯示
39、DL中的字符DL0FFH, DL=字符的ASCII碼無(wú)09在顯示屏上顯示字符串DS:DX=字符串首地址字符串必須以字符$(24H)結(jié)尾無(wú)4CH程序結(jié)束后返回DOS無(wú)參數(shù)或者AL=0無(wú)第 3 章功能調(diào)用的格式通常按照如下通常按照如下4 4個(gè)步驟進(jìn)行:個(gè)步驟進(jìn)行: 在在AHAH寄存器中設(shè)置系統(tǒng)功能調(diào)用號(hào)寄存器中設(shè)置系統(tǒng)功能調(diào)用號(hào) 在指定寄存器中設(shè)置入口參數(shù)在指定寄存器中設(shè)置入口參數(shù) 執(zhí)行指令執(zhí)行指令I(lǐng)NT 21HINT 21H(或(或ROM-BIOSROM-BIOS的中斷向的中斷向量號(hào))實(shí)現(xiàn)中斷服務(wù)程序的功能調(diào)用量號(hào))實(shí)現(xiàn)中斷服務(wù)程序的功能調(diào)用 根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況根據(jù)出口參數(shù)分析功能
40、調(diào)用執(zhí)行情況注意:由于注意:由于INT n 軟件中斷是由指令本身引發(fā)的,軟件中斷是由指令本身引發(fā)的,因而自然與程序的執(zhí)行同步,何處有因而自然與程序的執(zhí)行同步,何處有INT n 指令,指令,何處就會(huì)發(fā)生軟件中斷,這一特點(diǎn)同硬件中斷和何處就會(huì)發(fā)生軟件中斷,這一特點(diǎn)同硬件中斷和有些異常中斷有明顯區(qū)別,有些異常中斷有明顯區(qū)別,而類(lèi)似子程序調(diào)用而類(lèi)似子程序調(diào)用。第 3 章例如例如01H號(hào)功能是讀取從鍵盤(pán)輸入的字符并即時(shí)在顯示器上顯示號(hào)功能是讀取從鍵盤(pán)輸入的字符并即時(shí)在顯示器上顯示出來(lái),出來(lái),4CH號(hào)功能是用于正常結(jié)束用戶程序,以便返回號(hào)功能是用于正常結(jié)束用戶程序,以便返回DOS系統(tǒng),系統(tǒng),于是顯示鍵盤(pán)輸
41、入的字符時(shí)就不必自行編制鍵盤(pán)輸入和顯示器輸于是顯示鍵盤(pán)輸入的字符時(shí)就不必自行編制鍵盤(pán)輸入和顯示器輸出程序出程序例:編寫(xiě)鍵入并顯示一個(gè)字符的簡(jiǎn)單程序例:編寫(xiě)鍵入并顯示一個(gè)字符的簡(jiǎn)單程序 MOV AH,02H ;將將DOS功能號(hào)裝入功能號(hào)裝入AH INT 21H ;轉(zhuǎn)入轉(zhuǎn)入DOS系統(tǒng)的鍵入顯示子程序系統(tǒng)的鍵入顯示子程序 MOV AH,4CH ;將將DOS功能號(hào)裝入功能號(hào)裝入AH INT 21H ;轉(zhuǎn)入轉(zhuǎn)入DOS系統(tǒng)的返回功能子程序系統(tǒng)的返回功能子程序 第 3 章例:令PC顯示器連續(xù)不斷地顯示從0到9的數(shù)字在在INT 21H軟件中斷中,軟件中斷中,2號(hào)功能調(diào)用是顯示器輸出,將待顯示的字符不斷置于號(hào)功
42、能調(diào)用是顯示器輸出,將待顯示的字符不斷置于DL寄寄存器中再調(diào)用該功能即可實(shí)現(xiàn)連續(xù)顯示。程序段如下:存器中再調(diào)用該功能即可實(shí)現(xiàn)連續(xù)顯示。程序段如下: MOV BL,0 ;初始數(shù)字為初始數(shù)字為0GOON: PUSH BX ;保護(hù)保護(hù) MOV DL, 20H;入口參數(shù),空格字符碼;入口參數(shù),空格字符碼 MOV AH, 2 ;2號(hào)調(diào)用號(hào)調(diào)用 INT 21H ; POP BX ;恢復(fù);恢復(fù)BX MOV AL, BL ; INC AL ;指向下一個(gè)數(shù)字;指向下一個(gè)數(shù)字 DAA ;十進(jìn)制調(diào)整;十進(jìn)制調(diào)整 AND AL,0FH ;屏蔽高四位;屏蔽高四位 MOV BL,AL OR AL,30H ;轉(zhuǎn)換為;轉(zhuǎn)換為
43、ASCII碼碼 MOV DL,AL ;入口參數(shù),;入口參數(shù),AL中待顯字符碼中待顯字符碼 MOV AH,2 ; 2號(hào)調(diào)用號(hào)調(diào)用 INT 21H MOV CX,0FFFFHAGAIN: DEC CX ;延時(shí);延時(shí) JNE AGAIN JMP GOON ;轉(zhuǎn)下一個(gè)字符;轉(zhuǎn)下一個(gè)字符輸入輸出類(lèi)功能調(diào)用向顯示器輸出字符向顯示器輸出字符 字符的輸出字符的輸出 字符串的輸出字符串的輸出從鍵盤(pán)輸入數(shù)據(jù)從鍵盤(pán)輸入數(shù)據(jù) 字符的輸入字符的輸入 字符串的輸入字符串的輸入 按鍵的判斷按鍵的判斷裸機(jī)裸機(jī)匯編語(yǔ)言程序第 3 章第 3 章字符輸出的功能調(diào)用DOS功能調(diào)用功能調(diào)用INT 21Hn功能號(hào):功能號(hào):AH02Hn入
44、口參數(shù):入口參數(shù):DL字符的字符的ASCII碼碼n功能:在顯示器當(dāng)前光標(biāo)位置顯示功能:在顯示器當(dāng)前光標(biāo)位置顯示給定的字符,光標(biāo)右移一個(gè)字符位給定的字符,光標(biāo)右移一個(gè)字符位置。如按置。如按Ctrl-Break或或Ctrl-C則退出則退出例例3.48:顯示問(wèn)號(hào):顯示問(wèn)號(hào);在當(dāng)前顯示器光標(biāo)位置顯示一個(gè)問(wèn)號(hào);在當(dāng)前顯示器光標(biāo)位置顯示一個(gè)問(wèn)號(hào)mov ah,02hmov ah,02h;設(shè)置功能號(hào):;設(shè)置功能號(hào):ah02hah02hmov dl,?mov dl,?;提供入口參數(shù):;提供入口參數(shù):dl?dl?int 21hint 21h;DOSDOS功能調(diào)用:顯示功能調(diào)用:顯示 進(jìn)行字符輸出時(shí),當(dāng)輸出響鈴字符
45、進(jìn)行字符輸出時(shí),當(dāng)輸出響鈴字符(07H)以及退格()以及退格(08H)、回車(chē))、回車(chē)(0DH)和換行()和換行(0AH)字符時(shí),該功)字符時(shí),該功能調(diào)用可以自動(dòng)識(shí)別并能進(jìn)行相應(yīng)處理能調(diào)用可以自動(dòng)識(shí)別并能進(jìn)行相應(yīng)處理第 3 章字符輸出的功能調(diào)用顯示器功能調(diào)用顯示器功能調(diào)用INT 10Hn功能號(hào):功能號(hào):AH0EHn入口參數(shù):入口參數(shù):AL字符的字符的ASCII碼碼BL字符的顏色值(圖形方式)字符的顏色值(圖形方式)BH頁(yè)號(hào)(字符方式)頁(yè)號(hào)(字符方式)通常使通常使BX0n功能:將字符按原屬性在光標(biāo)處顯功能:將字符按原屬性在光標(biāo)處顯示,光標(biāo)自動(dòng)移到下一個(gè)字符位置示,光標(biāo)自動(dòng)移到下一個(gè)字符位置第 3
46、章字符串輸出的功能調(diào)用DOS功能調(diào)用功能調(diào)用INT 21Hn功能號(hào):功能號(hào):AH09Hn入口參數(shù):入口參數(shù):DS:DX欲顯示字符串在主存中的首地址欲顯示字符串在主存中的首地址字符串應(yīng)以字符串應(yīng)以$(24H)結(jié)束)結(jié)束n功能:在顯示器輸出指定的字符串功能:在顯示器輸出指定的字符串可以輸出回車(chē)(可以輸出回車(chē)(0DH)和換行()和換行(0AH)字符產(chǎn)生回車(chē)和換行的作用字符產(chǎn)生回車(chē)和換行的作用例例3.49:顯示字符串:顯示字符串string db Hello,Everybody !,string db Hello,Everybody !,0dh,0ah,0dh,0ah,$;在數(shù)據(jù)段定義要顯示的字符串;
47、在數(shù)據(jù)段定義要顯示的字符串.mov ah,09hmov ah,09h;設(shè)置功能號(hào):;設(shè)置功能號(hào):ah09hah09hmov dx,offset stringmov dx,offset string;提供入口參數(shù):;提供入口參數(shù):dxdx字符串的偏移地址字符串的偏移地址int 21hint 21h;DOSDOS功能調(diào)用:顯示功能調(diào)用:顯示第 3 章字符輸入的功能調(diào)用DOS功能調(diào)用功能調(diào)用INT 21Hn功能號(hào):功能號(hào):AH01Hn出口參數(shù):出口參數(shù):AL字符的字符的ASCII碼碼n功能:獲得按鍵的功能:獲得按鍵的ASCII代碼值代碼值調(diào)用此功能時(shí),若無(wú)鍵按下,則調(diào)用此功能時(shí),若無(wú)鍵按下,則會(huì)一直
48、等待,直到按鍵后才讀取會(huì)一直等待,直到按鍵后才讀取該鍵值該鍵值例例3.50:判斷按鍵:判斷按鍵getkey:getkey: mov ah,01hmov ah,01h;功能號(hào):;功能號(hào):ah01hah01hint 21hint 21h;功能調(diào)用;功能調(diào)用cmp al,Ycmp al,Y ;處理出口參數(shù);處理出口參數(shù)alalje yeskeyje yeskey;是;是“Y”Y”cmp al,Ncmp al,Nje nokeyje nokey;是;是“N”N”jne getkeyjne getkey.yeskey:yeskey: .nokey:nokey:.第 3 章字符輸入的功能調(diào)用鍵盤(pán)功能調(diào)用鍵
49、盤(pán)功能調(diào)用INT 16Hn功能號(hào):功能號(hào):AH0n出口參數(shù):出口參數(shù):AX鍵值代碼鍵值代碼對(duì)于標(biāo)準(zhǔn)對(duì)于標(biāo)準(zhǔn)ASCII碼按鍵:碼按鍵:ALASCII碼,碼,AH掃描碼;掃描碼;對(duì)于擴(kuò)展按鍵:對(duì)于擴(kuò)展按鍵:AL00H,AH鍵擴(kuò)展碼;鍵擴(kuò)展碼;對(duì)于對(duì)于alt小鍵盤(pán)數(shù)字按鍵:小鍵盤(pán)數(shù)字按鍵:ALASCII碼,碼,AH00H此功能類(lèi)同此功能類(lèi)同DOS功能功能01H,會(huì)一直等,會(huì)一直等待按鍵待按鍵例例3.51:字符輸入輸出:字符輸入輸出mov ah,0mov ah,0;鍵盤(pán)功能調(diào)用(;鍵盤(pán)功能調(diào)用(int 16hint 16h)int 16hint 16h;alal按鍵的按鍵的ASCIIASCII碼碼mo
50、v bx,0mov bx,0;顯示功能調(diào)用(;顯示功能調(diào)用(int 10hint 10h)mov ah,0ehmov ah,0ehint 10hint 10h;顯示;顯示第 3 章字符串輸入的功能調(diào)用DOS功能調(diào)用功能調(diào)用INT 21Hn功能號(hào):功能號(hào):AH0AHn入口參數(shù):入口參數(shù):DS:DX緩沖區(qū)首地址緩沖區(qū)首地址執(zhí)行該功能調(diào)用時(shí),用戶按鍵,最后執(zhí)行該功能調(diào)用時(shí),用戶按鍵,最后用回車(chē)確認(rèn)用回車(chē)確認(rèn)本調(diào)用可執(zhí)行全部標(biāo)準(zhǔn)鍵盤(pán)編輯命令;本調(diào)用可執(zhí)行全部標(biāo)準(zhǔn)鍵盤(pán)編輯命令;用戶按回車(chē)鍵結(jié)束輸入,如按用戶按回車(chē)鍵結(jié)束輸入,如按CtrlBreak或或CtrlC則中止則中止關(guān)鍵要定義好緩沖區(qū)關(guān)鍵要定義好緩
51、沖區(qū)第 3 章緩沖區(qū)的定義第第1字節(jié)字節(jié)事先填入事先填入最多欲接收的字符個(gè)最多欲接收的字符個(gè)數(shù)數(shù)(包括回車(chē)字符,可以是(包括回車(chē)字符,可以是1255)第第2字節(jié)字節(jié)將存放將存放實(shí)際輸入的字符個(gè)數(shù)實(shí)際輸入的字符個(gè)數(shù)(不包括回車(chē)符)(不包括回車(chē)符)第第3字節(jié)字節(jié)開(kāi)始將存放開(kāi)始將存放輸入的字符串輸入的字符串實(shí)際輸入的字符數(shù)多于定義數(shù)時(shí),多實(shí)際輸入的字符數(shù)多于定義數(shù)時(shí),多出的字符丟掉,且響鈴出的字符丟掉,且響鈴擴(kuò)展擴(kuò)展ASCII碼(如功能鍵等)占兩個(gè)字碼(如功能鍵等)占兩個(gè)字節(jié),第節(jié),第1個(gè)為個(gè)為0例例3.52:輸入字符串:輸入字符串bufferbufferdb 81 db 81 ;定義緩沖區(qū);定義緩
52、沖區(qū);第;第1 1個(gè)字節(jié)填入可能輸入的最大字符數(shù)個(gè)字節(jié)填入可能輸入的最大字符數(shù)db 0db 0;存放實(shí)際輸入的字符數(shù);存放實(shí)際輸入的字符數(shù)db 81 dup(0)db 81 dup(0) ;存放輸入的字符串;存放輸入的字符串.mov dx,seg buffermov dx,seg buffer;偽指令;偽指令segseg取得取得bufferbuffer的段地址的段地址mov ds,dxmov ds,dx;設(shè)置數(shù)據(jù)段;設(shè)置數(shù)據(jù)段DSDSmov dx,offset buffermov dx,offset buffermov ah,0ahmov ah,0ahint 21hint 21h第 3 章按鍵
53、判斷的功能調(diào)用DOS功能調(diào)用功能調(diào)用INT 21Hn功能號(hào):功能號(hào):AH0BHn出口參數(shù):出口參數(shù):AL0,當(dāng)前沒(méi)有按鍵;,當(dāng)前沒(méi)有按鍵;ALFFH,當(dāng)前已經(jīng)按鍵。,當(dāng)前已經(jīng)按鍵。n功能:僅判斷當(dāng)前是否有按下的鍵,功能:僅判斷當(dāng)前是否有按下的鍵,設(shè)置設(shè)置AL后退出后退出例例3.53:按任意鍵繼續(xù):按任意鍵繼續(xù).;提示;提示“按任意鍵繼續(xù)按任意鍵繼續(xù)”getkey:getkey: mov ah,0bhmov ah,0bhint 21hint 21hor al,alor al,al;alal0 0?jz getkeyjz getkey;alal0 0,沒(méi)有按鍵,繼續(xù)等待,沒(méi)有按鍵,繼續(xù)等待;等同于
54、如下功能調(diào)用;等同于如下功能調(diào)用mov ah,01hint 21h第 3 章按鍵判斷的功能調(diào)用鍵盤(pán)功能調(diào)用鍵盤(pán)功能調(diào)用INT 16Hn功能號(hào):功能號(hào):AH1n出口參數(shù):若標(biāo)志出口參數(shù):若標(biāo)志ZF1,無(wú)鍵按下;,無(wú)鍵按下;若若ZF0,有鍵按下,且,有鍵按下,且AX鍵值代碼鍵值代碼n功能:此子功能僅判斷是否按鍵,設(shè)置零功能:此子功能僅判斷是否按鍵,設(shè)置零位標(biāo)志位標(biāo)志ZF后退出后退出這兩個(gè)功能調(diào)用都不循環(huán)等待按鍵,這兩個(gè)功能調(diào)用都不循環(huán)等待按鍵,即使有鍵按下,鍵盤(pán)緩沖區(qū)仍然保留即使有鍵按下,鍵盤(pán)緩沖區(qū)仍然保留鍵值并且沒(méi)有被清空,必要時(shí)必須用鍵值并且沒(méi)有被清空,必要時(shí)必須用字符輸入功能取走鍵值清空緩沖區(qū)字符輸入功能取走鍵值清空緩沖區(qū)第 3 章3.9 處理機(jī)控制類(lèi)指令這些指令在特定的情況下,必須使用這些指令在特定的情況下,必須使用對(duì)標(biāo)志位進(jìn)行設(shè)置的指令對(duì)標(biāo)志位進(jìn)行設(shè)置的指令nCLC STC CMCnCLD STDnCLI STI對(duì)對(duì)CPU狀態(tài)進(jìn)行控制的指令狀態(tài)進(jìn)行控制的指令nNOP CS: SS: DS: ES:nLOCK HLT ESC WAIT第 3 章進(jìn)位標(biāo)志操作指令用于任意設(shè)置進(jìn)位標(biāo)志用于任意設(shè)置進(jìn)位標(biāo)志CLCCLC;復(fù)位進(jìn)位標(biāo)志:;復(fù)位進(jìn)位標(biāo)志:CF0CF0STCSTC;置位進(jìn)位標(biāo)志:;置位進(jìn)位標(biāo)志:CF1CF1CMCCMC;求反進(jìn)位標(biāo)志:;求反進(jìn)位標(biāo)志:C
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)策劃辦公用品采購(gòu)合同協(xié)議
- 2025年醫(yī)療器械設(shè)備年維護(hù)服務(wù)合同范例
- 2025年泳池水處理設(shè)備項(xiàng)目申請(qǐng)報(bào)告模板
- 2025年銷(xiāo)售合同范例寶典
- 2025年合作銷(xiāo)售利潤(rùn)分配協(xié)議書(shū)模板
- 2025年微波等離子炬光譜儀項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模范
- 2025年協(xié)同輔導(dǎo)協(xié)議書(shū)
- 2025年個(gè)人信用質(zhì)押合同樣式
- 2025年豪華游輪項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模板
- 2025年上海市電網(wǎng)建設(shè)與施工安全合作協(xié)議
- 海洋氣候預(yù)測(cè)模型創(chuàng)新研究-深度研究
- 2025年湖南工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 小王子-英文原版
- 北師大版六年級(jí)下冊(cè)書(shū)法練習(xí)指導(dǎo)教案教學(xué)設(shè)計(jì)
- 四百字作文格子稿紙(可打印編輯)
- 新能源材料與器件PPT完整全套教學(xué)課件
- 新概念二冊(cè)課文電子版
- 三筆字講座(完整版)
- 如何做好健康沙龍
- 環(huán)錘式碎煤機(jī)使用說(shuō)明書(shū)(參考)
- 工程施工聯(lián)系單范本完整版
評(píng)論
0/150
提交評(píng)論