版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第三章 程序設(shè)計(jì)的基本技術(shù)3.13.13.23.23.33.33. 3.5 5順序程序設(shè)計(jì)順序程序設(shè)計(jì)分支程序設(shè)計(jì)分支程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)子程序設(shè)計(jì)子程序設(shè)計(jì)3. 3.4 4串處理程序設(shè)計(jì)串處理程序設(shè)計(jì)3. 3.6 6宏功能程序設(shè)計(jì)宏功能程序設(shè)計(jì)2 順序程序順序程序是最簡(jiǎn)單的程序,它的執(zhí)行是最簡(jiǎn)單的程序,它的執(zhí)行順序和程序中指令的順序完全一致順序和程序中指令的順序完全一致3.1 3.1 順序程序設(shè)計(jì)順序程序設(shè)計(jì)3 格式:格式:MUL source IMUL source ;符號(hào)整數(shù)乘法;符號(hào)整數(shù)乘法3.1.1 3.1.1 乘除法指令乘除法指令1.1.乘法指令乘法指令MULMUL和
2、符號(hào)整數(shù)乘法指令和符號(hào)整數(shù)乘法指令I(lǐng)MULIMULl源操作數(shù)源操作數(shù) source source可以是字節(jié)、字或雙字,可為寄可以是字節(jié)、字或雙字,可為寄存器或存儲(chǔ)器操作數(shù),不能為立即數(shù)存器或存儲(chǔ)器操作數(shù),不能為立即數(shù)l目的操作數(shù)是目的操作數(shù)是ALAL、AXAX,視,視sourcesource的類型屬性決定的類型屬性決定是是ALAL、AXAXl在乘法指令之前必須將目的操作數(shù)送在乘法指令之前必須將目的操作數(shù)送AL(AL(字節(jié)乘字節(jié)乘) )或或AX(AX(字乘字乘) )41616位乘法指令所執(zhí)行的操作是位乘法指令所執(zhí)行的操作是ALAL或或AXAX乘以乘以sourcesource,乘積放回到,乘積放回
3、到AXAX或或DXDX和和AXAX,如下圖所,如下圖所示示ALsourc8AXAXsourc16AXDX3.1.1 3.1.1 乘除法指令乘除法指令5 格式:格式: DIV source IDIV source ;符號(hào)整數(shù)除法;符號(hào)整數(shù)除法注:注:l源操作數(shù)源操作數(shù)sourcesource可以是字、字節(jié)或雙字,可為可以是字、字節(jié)或雙字,可為REGREG或或MEMMEM, ,不能為立即數(shù)不能為立即數(shù)l目的操作數(shù)是目的操作數(shù)是AXAX或或DXDX和和AXAX2.2.除法指令除法指令DIVDIV和符號(hào)整數(shù)除法指令和符號(hào)整數(shù)除法指令I(lǐng)DIVIDIV3.1.1 3.1.1 乘除法指令乘除法指令61616
4、位除法指令所執(zhí)行的操作如下圖所示位除法指令所執(zhí)行的操作如下圖所示ALsourc8AXAXsourc16AXDXAHDX3.1.1 3.1.1 乘除法指令乘除法指令7 3.3. 擴(kuò)展指令擴(kuò)展指令CBWCBW和和CWDCWD要把一個(gè)要把一個(gè)8 8位二進(jìn)制數(shù)除以一個(gè)位二進(jìn)制數(shù)除以一個(gè)8 8位二進(jìn)制數(shù)位二進(jìn)制數(shù), ,要有一要有一個(gè)個(gè)1616位二進(jìn)制數(shù)在位二進(jìn)制數(shù)在AXAX中中. .所以做所以做8 8位除以位除以8 8位的除法前位的除法前先要把先要把8 8位被除數(shù)擴(kuò)展為位被除數(shù)擴(kuò)展為1616位位, ,做做1616位除以位除以1616位的除位的除法前要把法前要把1616位被除數(shù)擴(kuò)展為位被除數(shù)擴(kuò)展為3232
5、位位, ,做做3232位除以位除以3232位的位的除法前要把除法前要把3232位被除數(shù)擴(kuò)展為位被除數(shù)擴(kuò)展為6464位位. .這種擴(kuò)展對(duì)于無(wú)這種擴(kuò)展對(duì)于無(wú)符號(hào)數(shù)除法只需將符號(hào)數(shù)除法只需將AHAH或或DXDX清清0 0,而對(duì)符號(hào)整數(shù)除法則,而對(duì)符號(hào)整數(shù)除法則要通過(guò)擴(kuò)展符號(hào)位來(lái)把被除數(shù)擴(kuò)展。要通過(guò)擴(kuò)展符號(hào)位來(lái)把被除數(shù)擴(kuò)展。3.1.1 3.1.1 乘除法指令乘除法指令8l 兩指令都隱含操作數(shù)兩指令都隱含操作數(shù)l 在做在做8 8位除以位除以8 8位、位、1616位除以位除以1616位、位、 32 32位除以位除以3232位的除法之前,應(yīng)先擴(kuò)展位的除法之前,應(yīng)先擴(kuò)展ALAL、AXAX中的被除數(shù)中的被除數(shù)l
6、 擴(kuò)展指令和符號(hào)整數(shù)除法僅對(duì)補(bǔ)碼數(shù)適用擴(kuò)展指令和符號(hào)整數(shù)除法僅對(duì)補(bǔ)碼數(shù)適用格式:格式:CBW ; ; ALAL的最高位擴(kuò)展至的最高位擴(kuò)展至AHAH CWD ; ; AXAX的最高位擴(kuò)展至的最高位擴(kuò)展至DXDX3.1.1 3.1.1 乘除法指令乘除法指令9如:有一符號(hào)字?jǐn)?shù)組變量如:有一符號(hào)字?jǐn)?shù)組變量ARRAYARRAY,第,第1 1個(gè)字是個(gè)字是被除數(shù)被除數(shù),第第2 2個(gè)字是除數(shù),接著存放商和余個(gè)字是除數(shù),接著存放商和余數(shù),其程序段為:數(shù),其程序段為: MOV SIMOV SI,OFFSET ARRAYOFFSET ARRAYMOV AXMOV AX,SISICWDCWDIDIV WORD PTR
7、 2IDIV WORD PTR 2SISIMOV 4MOV 4SISI,AXAXMOV 6MOV 6SISI,DXDX3.1.1 3.1.1 乘除法指令乘除法指令103.1.2 BCD3.1.2 BCD數(shù)調(diào)整指令數(shù)調(diào)整指令用二進(jìn)制數(shù)算術(shù)運(yùn)算指令對(duì)用二進(jìn)制數(shù)算術(shù)運(yùn)算指令對(duì)BCDBCD數(shù)進(jìn)行運(yùn)算,會(huì)得到不數(shù)進(jìn)行運(yùn)算,會(huì)得到不正確的正確的BCDBCD數(shù)。如:數(shù)。如: 0000 0011B+0000 1001B= 0000 1100B0000 0011B+0000 1001B= 0000 1100B 0000 1001B+0000 0111B= 0001 0000B 0000 1001B+0000 0
8、111B= 0001 0000B若再加上若再加上6 6,就可以得到正確的,就可以得到正確的BCDBCD數(shù):數(shù): 0000 1100B+0000 0110B= 0001 0010B 0000 1100B+0000 0110B= 0001 0010B 0001 0000B+0000 0110B= 0001 0110B 0001 0000B+0000 0110B= 0001 0110B對(duì)對(duì)BCDBCD數(shù)使用二進(jìn)制數(shù)算術(shù)運(yùn)算指令進(jìn)行運(yùn)算,然后執(zhí)數(shù)使用二進(jìn)制數(shù)算術(shù)運(yùn)算指令進(jìn)行運(yùn)算,然后執(zhí)行一條專用調(diào)整指令來(lái)處理行一條專用調(diào)整指令來(lái)處理BCDBCD數(shù)的結(jié)果數(shù)的結(jié)果11 1.BCD1.BCD數(shù)加法調(diào)整指令數(shù)
9、加法調(diào)整指令DAADAA和和AAAAAA格式:格式: DAA功能:功能:將將ALAL中的和調(diào)整為正確的壓縮中的和調(diào)整為正確的壓縮BCDBCD數(shù)數(shù)調(diào)整規(guī)則調(diào)整規(guī)則: : (AL(AL0FH)90FH)9或或AF=1AF=1,則,則ALAL加加6;6; (ALAL0F0H)90H0F0H)90H或或CF=1,CF=1,則則ALAL加加60H.60H.3.1.2 BCD3.1.2 BCD數(shù)調(diào)整指令數(shù)調(diào)整指令(1 1)壓縮)壓縮BCDBCD數(shù)加法調(diào)整數(shù)加法調(diào)整12 注:注:l該指令操作數(shù)隱含為該指令操作數(shù)隱含為AL,AL,即只能對(duì)即只能對(duì)ALAL中的操作數(shù)中的操作數(shù)據(jù)調(diào)整據(jù)調(diào)整l對(duì)結(jié)果調(diào)整時(shí)要用到對(duì)結(jié)
10、果調(diào)整時(shí)要用到CF,AFCF,AF標(biāo)志,所以調(diào)整指令標(biāo)志,所以調(diào)整指令應(yīng)緊跟應(yīng)緊跟BCDBCD數(shù)加法指令數(shù)加法指令lDAADAA指令會(huì)影響標(biāo)志指令會(huì)影響標(biāo)志如如: MOV AX: MOV AX,3456H3456H ADD AL ADD AL,AH AH ;ALAL8AH,AF8AH,AF0,CF0,CF0 0 DAA DAA ;ALAL90H90H 0011 0100 0101 0110 1000 1010 0110 1001 00003.1.2 BCD3.1.2 BCD數(shù)調(diào)整指令數(shù)調(diào)整指令13 格式:格式: AAA功能:將功能:將ALAL中的和調(diào)整為正確的非壓縮中的和調(diào)整為正確的非壓縮BC
11、DBCD數(shù)送數(shù)送AXAX調(diào)整規(guī)則調(diào)整規(guī)則: : (AL(AL0FH)90FH)9或或AF=1,AF=1,則則 (AL+6) (AL+6)0FHAL ,AH+1AH 0FHAL ,AH+1AH ; 否則,否則,ALAL0FH AL 0FH AL ,AHAH不變不變. .(2 2)非壓縮)非壓縮BCDBCD數(shù)加法調(diào)整數(shù)加法調(diào)整3.1.2 BCD3.1.2 BCD數(shù)調(diào)整指令數(shù)調(diào)整指令14注:注:l同同DAADAA,AAAAAA的操作數(shù)也隱含為的操作數(shù)也隱含為AL,AL,且要緊跟加法指且要緊跟加法指令令lAAAAAA調(diào)整后的存放規(guī)律可理解為調(diào)整后的個(gè)位數(shù)送調(diào)整后的存放規(guī)律可理解為調(diào)整后的個(gè)位數(shù)送AL,
12、AL,十位數(shù)十位數(shù)( (即進(jìn)位即進(jìn)位) )加到加到AHAH中中. .故執(zhí)行該指令前故執(zhí)行該指令前AHAH應(yīng)清應(yīng)清0 0如:將兩個(gè)如:將兩個(gè)BCDBCD數(shù)的數(shù)的ASCIIASCII碼相加,得到和的碼相加,得到和的ASCIIASCII碼:碼: MOV ALMOV AL,35H35H ; ; 5 5 ADD ALADD AL,39H39H ; ; 9 9,AL=6EH,AL=6EH MOV AHMOV AH,0 0 AAA AAA ;AX=0104HAX=0104H OR AX,3030HOR AX,3030H ; AX=3134H ; AX=3134H 即即14143.1.2 BCD3.1.2 B
13、CD數(shù)調(diào)整指令數(shù)調(diào)整指令15例例3.1 3.1 求兩個(gè)字變量求兩個(gè)字變量W1W1和和W2W2中壓縮中壓縮BCDBCD數(shù)之和,存入字?jǐn)?shù)之和,存入字節(jié)變量節(jié)變量SUMSUM中。中。 如:如:8931+5678=146098931+5678=14609W1 DW 8931HW1 DW 8931HW2 DW 5678HW2 DW 5678HSUM DB 3 DUP(0)SUM DB 3 DUP(0)MOV AL , BYTE PTR W1MOV AL , BYTE PTR W1 ;ALAL31H31HADDADD AL , BYTE PTR W2AL , BYTE PTR W2 ; AL; ALA9H
14、,CF=0,AF=0A9H,CF=0,AF=0DAA DAA ;ALAL09H,CF=109H,CF=1 MOV SUM , AL MOV SUM , AL ;存?zhèn)€位和十位;存?zhèn)€位和十位MOV AL , BYTE PTR W1+1MOV AL , BYTE PTR W1+1 ;ALAL89H89HADC ADC AL , BYTE PTR W2+1 AL , BYTE PTR W2+1 ; AL; ALE0H, CF=0,AF=1E0H, CF=0,AF=1DAADAA ;ALAL46H, CF=146H, CF=1MOV SUM+1MOV SUM+1,AL AL ;存百位和千位;存百位和千位
15、MOV SUM+2,0 MOV SUM+2,0 ; ;處理向萬(wàn)位的進(jìn)位處理向萬(wàn)位的進(jìn)位RCL SUM+2,1RCL SUM+2,116 格式:格式: DASDAS功能:功能:將將ALAL中的差調(diào)整為正確的壓縮中的差調(diào)整為正確的壓縮BCDBCD數(shù)數(shù)調(diào)整規(guī)則調(diào)整規(guī)則: : (AL(AL0FH)90FH)9或或AF=1AF=1,則,則ALAL減減6;6; (ALAL0F0H)90H0F0H)90H或或CF=1,CF=1,則則ALAL減減60H.60H.如:如: MOV AXMOV AX,5643H5643H SUB AL SUB AL,AHAH ;AL=DEHAL=DEH,有借位,有借位 DAS D
16、AS ;AL=78HAL=78H,保持借位,即,保持借位,即134-56134-562.BCD2.BCD數(shù)減法調(diào)整指令數(shù)減法調(diào)整指令DASDAS和和AASAAS(1 1)壓縮)壓縮BCDBCD數(shù)減法調(diào)整數(shù)減法調(diào)整3.1.2 BCD3.1.2 BCD數(shù)調(diào)整指令數(shù)調(diào)整指令17 格式:格式: AASAAS功能:將功能:將ALAL中的差調(diào)整為正確的非壓縮中的差調(diào)整為正確的非壓縮BCDBCD數(shù)送數(shù)送AXAX調(diào)整規(guī)則調(diào)整規(guī)則: : (AL(AL0FH)90FH)9或或AF=1,AF=1,則則 (AL-6) (AL-6)0FHAL ,AH-1AH 0FHAL ,AH-1AH ; 否則,否則,ALAL0FH
17、AL 0FH AL ,AHAH不變不變. .如:如: MOV AXMOV AX,0806H0806H SUB AL SUB AL,07H07H ;AX=08FFHAX=08FFH AASAAS ;AX=0709HAX=0709H(2 2)非壓縮)非壓縮BCDBCD數(shù)減法調(diào)整數(shù)減法調(diào)整3.1.2 BCD3.1.2 BCD數(shù)調(diào)整指令數(shù)調(diào)整指令18 格式:格式: AAM功能:功能:將將ALAL中小于中小于64H64H的的二進(jìn)制數(shù)變換為非壓縮二進(jìn)制數(shù)變換為非壓縮BCDBCD數(shù)數(shù)送送AXAX調(diào)整規(guī)則調(diào)整規(guī)則: : AL / 0AH AHAL / 0AH AH(十位),(十位), AL MOD 0AH A
18、LAL MOD 0AH AL(個(gè)位)(個(gè)位)如如: MOV AL: MOV AL,63H63H AAM AAM ;AX=0909HAX=0909H3.3.非壓縮非壓縮BCDBCD數(shù)乘除法調(diào)整指令數(shù)乘除法調(diào)整指令A(yù)AMAAM和和AADAAD(1 1)乘法調(diào)整)乘法調(diào)整3.1.2 BCD3.1.2 BCD數(shù)調(diào)整指令數(shù)調(diào)整指令19 格式:格式: AAD功能:將功能:將AXAX中的兩位中的兩位非壓縮非壓縮BCDBCD數(shù)變換成二進(jìn)制數(shù)數(shù)變換成二進(jìn)制數(shù)集集中在中在ALAL中中如:如: MOV AX MOV AX,0906H0906H MOV DL MOV DL,06H06H AAD AAD ;AX=006
19、0HAX=0060H DIV DL DIV DL ;AL=10H,AH=0AL=10H,AH=0 MOV DL MOV DL,AH AH ;存余數(shù);存余數(shù) AAM AAM ;AX=0106HAX=0106H(2 2)除法調(diào)整)除法調(diào)整注:注:l此指令可對(duì)被除數(shù)進(jìn)行預(yù)此指令可對(duì)被除數(shù)進(jìn)行預(yù)調(diào)整調(diào)整l加、減和乘法調(diào)整在相應(yīng)加、減和乘法調(diào)整在相應(yīng)運(yùn)算操作之后進(jìn)行,而除運(yùn)算操作之后進(jìn)行,而除法的調(diào)整在除法操作之前法的調(diào)整在除法操作之前進(jìn)行進(jìn)行. .3.1.2 BCD3.1.2 BCD數(shù)調(diào)整指令數(shù)調(diào)整指令20例例3.53.5 (教材(教材P96P96)從鍵盤鍵入)從鍵盤鍵入0 09 9的任一自然數(shù)的任一
20、自然數(shù)N N,求其立方值并顯示求其立方值并顯示. .INPUT DB INPUT DB Please Input NPlease Input N(0 09 9):): LFB DB LFB DB 0 01 18 827276464125125 DB DB 216216343343512512729729 N DB 0N DB 0 MOV DX MOV DX,OFFSET INPUTOFFSET INPUT MOV AH MOV AH,9 9 INT 21H INT 21H 顯示顯示提示信息提示信息建立建立立方表立方表方法:可用乘法運(yùn)算實(shí)現(xiàn),也可用查表法實(shí)現(xiàn)方法:可用乘法運(yùn)算實(shí)現(xiàn),也可用查表法實(shí)
21、現(xiàn). .3.1.3 3.1.3 順序程序設(shè)計(jì)舉例順序程序設(shè)計(jì)舉例21MOV AHMOV AH,1 1INT 21HINT 21HMOV NMOV N,ALALMOV AHMOV AH,2 2MOV DLMOV DL,0AH0AHINT 21HINT 21HMOV DL,NMOV DL,NAND DLAND DL,0FH0FHMOV CLMOV CL,2 2SHL DLSHL DL,CLCLMOV DHMOV DH,0 0ADD DXADD DX,OFFSET LFBOFFSET LFBMOV AHMOV AH,9 9INT 21HINT 21HN N4 4DXDX顯示(顯示(LFBLFB4 4
22、N N)單元的內(nèi)容,直到單元的內(nèi)容,直到結(jié)束結(jié)束輸出換行輸出換行鍵入一個(gè)數(shù)鍵入一個(gè)數(shù)N N22第三章 程序設(shè)計(jì)的基本技術(shù)3. 3.1 13.33.33. 3.5 5順序程序設(shè)計(jì)順序程序設(shè)計(jì)分支程序設(shè)計(jì)分支程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)子程序設(shè)計(jì)子程序設(shè)計(jì)3. 3.4 4串處理程序設(shè)計(jì)串處理程序設(shè)計(jì)3. 3.6 6宏功能程序設(shè)計(jì)宏功能程序設(shè)計(jì)3. 3.2 223 順序程序是按指令的書寫(存放)順順序程序是按指令的書寫(存放)順序執(zhí)行,而實(shí)際情況需要根據(jù)不同的條件序執(zhí)行,而實(shí)際情況需要根據(jù)不同的條件做不同的處理,形成分支做不同的處理,形成分支. .匯編中的分支匯編中的分支的條件往往是通過(guò)標(biāo)志的不
23、同狀態(tài)而反映的條件往往是通過(guò)標(biāo)志的不同狀態(tài)而反映的的. .常用改變標(biāo)志指令和轉(zhuǎn)移指令實(shí)現(xiàn)分常用改變標(biāo)志指令和轉(zhuǎn)移指令實(shí)現(xiàn)分支支. .3.2 3.2 分支程序設(shè)計(jì)分支程序設(shè)計(jì)24通用格式:通用格式:JcondJcond short_lableshort_lable操作:若滿足條件,則操作:若滿足條件,則OFFSETOFFSET short_lableIPshort_lableIP, ,實(shí)現(xiàn)轉(zhuǎn)移;否則順序執(zhí)行實(shí)現(xiàn)轉(zhuǎn)移;否則順序執(zhí)行. .lshort_lableshort_lable 短標(biāo)號(hào),條件轉(zhuǎn)移是相對(duì)轉(zhuǎn)移指令,短標(biāo)號(hào),條件轉(zhuǎn)移是相對(duì)轉(zhuǎn)移指令,即從當(dāng)前地址到目標(biāo)地址的偏移量為即從當(dāng)前地址到目標(biāo)地
24、址的偏移量為-128-128127127(從本指令則為(從本指令則為-126-126+129,+129,因?yàn)闂l件轉(zhuǎn)移指令均因?yàn)闂l件轉(zhuǎn)移指令均為雙字節(jié)指令),故為雙字節(jié)指令),故只能實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移只能實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移. .3.2.1 3.2.1 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令25 僅判斷一個(gè)標(biāo)志位實(shí)現(xiàn)轉(zhuǎn)移僅判斷一個(gè)標(biāo)志位實(shí)現(xiàn)轉(zhuǎn)移. .參見教材:參見教材:PF=0PF=0奇轉(zhuǎn)移奇轉(zhuǎn)移JNP/JPOJNP/JPOPF=1PF=1偶轉(zhuǎn)移偶轉(zhuǎn)移 JP/JPEJP/JPEOF=0OF=0無(wú)溢出轉(zhuǎn)移無(wú)溢出轉(zhuǎn)移JNOJNOOF=1OF=1溢出轉(zhuǎn)移溢出轉(zhuǎn)移JOJOSF=0SF=0為正轉(zhuǎn)移為正轉(zhuǎn)移JNSJNSSF=1SF=1
25、為負(fù)轉(zhuǎn)移為負(fù)轉(zhuǎn)移JSJSCF=0CF=0無(wú)進(jìn)無(wú)進(jìn)( (借借) )位轉(zhuǎn)移位轉(zhuǎn)移JNCJNCCF=1CF=1有進(jìn)有進(jìn)( (借借) )位轉(zhuǎn)移位轉(zhuǎn)移JCJCZF=0ZF=0不相等不相等/ /不等于不等于0 0轉(zhuǎn)移轉(zhuǎn)移JNE/JNZJNE/JNZZF=1ZF=1相等相等/ /等于等于0 0轉(zhuǎn)移轉(zhuǎn)移JE/JZJE/JZ標(biāo)志設(shè)置標(biāo)志設(shè)置功能功能指令助記符指令助記符1.1.簡(jiǎn)單條件轉(zhuǎn)移指令簡(jiǎn)單條件轉(zhuǎn)移指令3.2.1 3.2.1 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令26如:如: JZ/JE S_LABJZ/JE S_LAB為零為零/ /相等轉(zhuǎn)移相等轉(zhuǎn)移 操作:測(cè)試前面操作結(jié)果為操作:測(cè)試前面操作結(jié)果為0 0則轉(zhuǎn)移,即判則轉(zhuǎn)
26、移,即判ZF=1ZF=1轉(zhuǎn)移轉(zhuǎn)移. .lJZ , JEJZ , JE為等價(jià)助記符,任寫一種均可為等價(jià)助記符,任寫一種均可. .如:如: MOV BX , 0FFFFH MOV BX , 0FFFFH INC BX ; ZF=1 INC BX ; ZF=1 JZ NEXT ; JZ NEXT ; 為為0 0轉(zhuǎn)移到轉(zhuǎn)移到NEXTNEXT NEXTNEXT: 3.2.1 3.2.1 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令27如:如:MOV BL , 1 ; MOV BL , 1 ; CMP BL , 5 ; ZF=0 CMP BL , 5 ; ZF=0 JE NEXT ; JE NEXT ; 比較結(jié)果相等則轉(zhuǎn)移到
27、比較結(jié)果相等則轉(zhuǎn)移到NEXTNEXT ;不相等順序執(zhí)行;不相等順序執(zhí)行NEXTNEXT:注:注: 此類指令,均只測(cè)試前面的操作結(jié)果所設(shè)標(biāo)此類指令,均只測(cè)試前面的操作結(jié)果所設(shè)標(biāo)志,指令本身不影響標(biāo)志志,指令本身不影響標(biāo)志. .所以,在條件轉(zhuǎn)移指令所以,在條件轉(zhuǎn)移指令前,一定有一條能正確影響標(biāo)志的指令前,一定有一條能正確影響標(biāo)志的指令. .3.2.1 3.2.1 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令28 2.2.無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令 條件轉(zhuǎn)移常依據(jù)兩個(gè)數(shù)的關(guān)系來(lái)決定,兩個(gè)數(shù)的條件轉(zhuǎn)移常依據(jù)兩個(gè)數(shù)的關(guān)系來(lái)決定,兩個(gè)數(shù)的關(guān)系除相等與否,還有大小之分,比較大小時(shí),要區(qū)關(guān)系除相等與否,還有大小之分
28、,比較大小時(shí),要區(qū)分是無(wú)符號(hào)數(shù)還是符號(hào)數(shù),否則答案不明確分是無(wú)符號(hào)數(shù)還是符號(hào)數(shù),否則答案不明確. .如:如:0FFH00H ?0FFH00H ? 視為無(wú)符號(hào)數(shù)視為無(wú)符號(hào)數(shù) 0FFH=255 00H 0FFH=255 00H ; 視為符號(hào)數(shù)視為符號(hào)數(shù) 0FFH= -1 0FFH= -1 00H . 00H .所以,應(yīng)將兩種類型的數(shù)分開比較:所以,應(yīng)將兩種類型的數(shù)分開比較:對(duì)無(wú)符號(hào)數(shù)使用術(shù)語(yǔ):低于對(duì)無(wú)符號(hào)數(shù)使用術(shù)語(yǔ):低于/ /高于高于 B Below/elow/A Abovebove;對(duì)帶符號(hào)數(shù)使用術(shù)語(yǔ):小于對(duì)帶符號(hào)數(shù)使用術(shù)語(yǔ):小于/ /大于大于 L Less/ess/G Greaterreate
29、r3.2.1 3.2.1 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令29 無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令有無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令有4 4條:條: 指令助記符指令助記符 功能功能 JB/JNAEJB/JNAE 低于低于/ /不高于等于轉(zhuǎn)移不高于等于轉(zhuǎn)移 JNB/JAEJNB/JAE 不低于不低于/ /高于等于轉(zhuǎn)移高于等于轉(zhuǎn)移 JA/JNBEJA/JNBE 高于高于/ /不低于等于轉(zhuǎn)移不低于等于轉(zhuǎn)移 JNA/JBEJNA/JBE 不高于不高于/ /低于等于轉(zhuǎn)移低于等于轉(zhuǎn)移3.2.1 3.2.1 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令30 3.3.符號(hào)數(shù)條件轉(zhuǎn)移指令符號(hào)數(shù)條件轉(zhuǎn)移指令 符號(hào)數(shù)條件轉(zhuǎn)移指令有符號(hào)數(shù)條件轉(zhuǎn)移指令有4 4條(條(P9
30、4P94,表,表3 33 3):): 指令助記符指令助記符 功能功能 JL/JNGEJL/JNGE 小于小于/ /不大于等于轉(zhuǎn)移不大于等于轉(zhuǎn)移 JNL/JGEJNL/JGE 不小于不小于/ /大于等于轉(zhuǎn)移大于等于轉(zhuǎn)移 JG/JNLE JG/JNLE 大于大于/ /不小于等于轉(zhuǎn)移不小于等于轉(zhuǎn)移 JNG/JLE JNG/JLE 不大于不大于/ /小于等于轉(zhuǎn)移小于等于轉(zhuǎn)移3.2.1 3.2.1 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令31 格式:格式:JMP targetJMP target操作:將控制轉(zhuǎn)向目的標(biāo)號(hào)操作:將控制轉(zhuǎn)向目的標(biāo)號(hào)targettarget: targettarget在段內(nèi)在段內(nèi): targe
31、t: target的偏移地址的偏移地址IPIP target target在段外在段外: target: target的偏移地址的偏移地址IPIP target target的段首址的段首址CS CS 條件轉(zhuǎn)移范圍為條件轉(zhuǎn)移范圍為-128-128+127,+127,而無(wú)條件轉(zhuǎn)移指令而無(wú)條件轉(zhuǎn)移指令沒(méi)有范圍限制沒(méi)有范圍限制. . 在分支程序中往往需要它將各分支在分支程序中往往需要它將各分支重新匯集到一起重新匯集到一起. .3.2.2 3.2.2 無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令1.1.無(wú)條件直接轉(zhuǎn)移指令無(wú)條件直接轉(zhuǎn)移指令32 格式格式: : JMP JMP destdest 操作操作: : 目的操作
32、數(shù)為寄存器目的操作數(shù)為寄存器寄存器內(nèi)容送寄存器內(nèi)容送IPIP 目的操作數(shù)為字變量目的操作數(shù)為字變量字變量?jī)?nèi)容送字變量?jī)?nèi)容送IP IP 目的操作數(shù)為雙字變量目的操作數(shù)為雙字變量雙字變量?jī)?nèi)容送雙字變量?jī)?nèi)容送CSCS和和IPIP 如:如: JMP NEXT JMP NEXT ;無(wú)條件轉(zhuǎn)移轉(zhuǎn)到;無(wú)條件轉(zhuǎn)移轉(zhuǎn)到NEXTNEXT NEXT: NEXT: 如:如: JMP WORD PTRBX JMP WORD PTRBX ;即(;即( BX BX ) IPIP 2. 2. 無(wú)條件間接轉(zhuǎn)移指令無(wú)條件間接轉(zhuǎn)移指令3.2.2 3.2.2 無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令33l分支實(shí)現(xiàn)的基本方法有兩種分支實(shí)現(xiàn)的基本方
33、法有兩種: :一種是利用比較轉(zhuǎn)一種是利用比較轉(zhuǎn)移指令實(shí)現(xiàn)分支;一種是利用跳轉(zhuǎn)表實(shí)現(xiàn)分支移指令實(shí)現(xiàn)分支;一種是利用跳轉(zhuǎn)表實(shí)現(xiàn)分支. .l視比較對(duì)象,正確選擇合適的轉(zhuǎn)移指令視比較對(duì)象,正確選擇合適的轉(zhuǎn)移指令. .l要為每個(gè)分支安排正確出口要為每個(gè)分支安排正確出口. .l凡是可共用的部分,應(yīng)盡量放在公共程序段中以凡是可共用的部分,應(yīng)盡量放在公共程序段中以使程序簡(jiǎn)短使程序簡(jiǎn)短. .l在調(diào)試分支程序時(shí),應(yīng)使用多組數(shù)據(jù),分別對(duì)各在調(diào)試分支程序時(shí),應(yīng)使用多組數(shù)據(jù),分別對(duì)各種分支進(jìn)行反復(fù)測(cè)試種分支進(jìn)行反復(fù)測(cè)試. .3.2.3 3.2.3 分支程序設(shè)計(jì)舉例分支程序設(shè)計(jì)舉例34例例3.103.10 某工廠的產(chǎn)品有
34、某工廠的產(chǎn)品有8 8種不同的加工處理程序種不同的加工處理程序P0P0P7P7,根據(jù)鍵盤輸入,做不同的處理,若是,根據(jù)鍵盤輸入,做不同的處理,若是0 07 7以外的以外的鍵,則退出加工處理鍵,則退出加工處理 此例可以用兩種方法實(shí)現(xiàn)此例可以用兩種方法實(shí)現(xiàn): :一種是用逐一比較判斷一種是用逐一比較判斷, ,逐逐次比較轉(zhuǎn)移實(shí)現(xiàn)二叉分支、整體上實(shí)現(xiàn)多分支次比較轉(zhuǎn)移實(shí)現(xiàn)二叉分支、整體上實(shí)現(xiàn)多分支; ; 另一另一種是跳轉(zhuǎn)表法種是跳轉(zhuǎn)表法, ,直接實(shí)現(xiàn)多分支直接實(shí)現(xiàn)多分支. .35 方法一方法一逐一比較法逐一比較法. .簡(jiǎn)單,條理清楚,易于實(shí)現(xiàn),但簡(jiǎn)單,條理清楚,易于實(shí)現(xiàn),但轉(zhuǎn)移范圍只能是:轉(zhuǎn)移范圍只能是:1
35、28128127127 INPUT DB Input( 0INPUT DB Input( 07): $7): $ MOV DX , OFFSET INPUTMOV DX , OFFSET INPUT ; ;顯示提示顯示提示 MOV AH , 9MOV AH , 9 INT 21HINT 21H MOV AH , 1 MOV AH , 1 ;等待鍵入一個(gè)字符;等待鍵入一個(gè)字符 INT 21HINT 21H CMP AL , CMP AL , 0 0 ;為;為0 0字符則轉(zhuǎn)字符則轉(zhuǎn)P0P0 JE P0JE P0 CMP AL , CMP AL , 1 1 ;為;為1 1字符則轉(zhuǎn)字符則轉(zhuǎn)P1P1 J
36、E P1JE P136CMP AL ,CMP AL ,2 2JE P2 JE P2 CMP AL ,CMP AL ,3 3JE P3 JE P3 CMP AL ,CMP AL ,4 4 JE P4JE P4CMP AL ,CMP AL ,5 5JE P5JE P5CMP AL ,CMP AL ,6 6JE P6JE P6CMP AL ,CMP AL ,7 7JE P7JE P7JMP DOWNJMP DOWN ;不是;不是0 07 7則退出程序則退出程序 37P0: MOV DL ,P0: MOV DL , 0 0 ;鍵入;鍵入0 0則顯示則顯示0 0以替代以替代P0P0程序程序 JMP EX
37、ITJMP EXITP1: MOV DL ,P1: MOV DL , 1 1 ;鍵入;鍵入1 1則顯示則顯示1 1以替代以替代P1P1程序程序 JMP EXITJMP EXIT P7: MOV DL ,P7: MOV DL , 7 7 JMP EXIT JMP EXITEXIT: MOV AH ,2EXIT: MOV AH ,2 INT 21H INT 21HDOWN: RETDOWN: RET ;分支程序一定要注意匯合到結(jié)束處;分支程序一定要注意匯合到結(jié)束處 38方法二:跳轉(zhuǎn)表法方法二:跳轉(zhuǎn)表法 利用無(wú)條件的間接轉(zhuǎn)移指令可實(shí)現(xiàn)遠(yuǎn)距離的多分支利用無(wú)條件的間接轉(zhuǎn)移指令可實(shí)現(xiàn)遠(yuǎn)距離的多分支( (間
38、接跳轉(zhuǎn)至不同分支的入口處間接跳轉(zhuǎn)至不同分支的入口處) ) 在數(shù)據(jù)區(qū)造一地址表,存放不同的分支入口地址;在數(shù)據(jù)區(qū)造一地址表,存放不同的分支入口地址; 設(shè)表的首地址為設(shè)表的首地址為PTABPTAB,每一個(gè),每一個(gè) PTAB P0PTAB P0入口地址占一個(gè)字單元,入口地址占一個(gè)字單元, 2 P12 P1PPi i的入口地址的入口地址PTABPTAB2 2i i 4 P24 P2若將若將2 2i iBXBX,則,則JMP PTABBXJMP PTABBX : 可轉(zhuǎn)到可轉(zhuǎn)到P Pi i入口處入口處39INPUT DB INPUT DB INPUTINPUT(0 07 7):):$ $ PTAB DW
39、P0,P1,P2,P3,P4,P5,P6,P7 PTAB DW P0,P1,P2,P3,P4,P5,P6,P7 ;定義地址表;定義地址表 LEA DX , INPUTLEA DX , INPUT ;顯示提示;顯示提示 MOV AH , 9 MOV AH , 9 INT 21H INT 21H MOV AH , 1 MOV AH , 1 ;等待鍵入;等待鍵入0 07 7的數(shù)字的數(shù)字 INT 21HINT 21H CMP AL , CMP AL , 0 0 ;檢查輸入數(shù)據(jù),不是;檢查輸入數(shù)據(jù),不是0 07 7則退出則退出 JB EXITJB EXIT CMP AL CMP AL , 7 7 JA
40、EXIT JA EXIT AND AX AND AX ,0FH0FH ; i i2 2BXBX ADD AX ADD AX ,AX AX MOV BX MOV BX ,AXAX JMP PTABBX JMP PTABBX ;(;(PTABPTAB2 2i i)PiPiIPIPEXITEXIT:RETRET40P0P0: MOV DLMOV DL, 0 0 ;鍵入;鍵入0 0則顯示則顯示0 0以替代以替代P0P0程序程序 JMP DOWNJMP DOWNP1: MOV DLP1: MOV DL, 11 ;鍵入;鍵入1 1則顯示則顯示1 1以替代以替代P1P1程序程序 JMP DOWNJMP DO
41、WN P7: MOV DL ,P7: MOV DL , 7 7 DOWN: MOV AH , 2DOWN: MOV AH , 2 INT 21H INT 21H JMP EXIT JMP EXIT鍵入的鍵入的ASCASC碼為無(wú)符號(hào)數(shù),碼為無(wú)符號(hào)數(shù),所以,用所以,用JBJB、JAJA等指令而不能用等指令而不能用JGJG、JLJL等等. .41第三章 程序設(shè)計(jì)的基本技術(shù)3. 3.1 13. 3.2 23. 3.5 5順序程序設(shè)計(jì)順序程序設(shè)計(jì)分支程序設(shè)計(jì)分支程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)子程序設(shè)計(jì)子程序設(shè)計(jì)3. 3.4 4串處理程序設(shè)計(jì)串處理程序設(shè)計(jì)3. 3.3 342四部分:四部分: 循環(huán)準(zhǔn)備循
42、環(huán)準(zhǔn)備(循環(huán)(循環(huán)初始化)初始化) 建地址指針、置計(jì)數(shù)初值、設(shè)置必要的常數(shù)、對(duì)工建地址指針、置計(jì)數(shù)初值、設(shè)置必要的常數(shù)、對(duì)工作寄存器及工作單元置初值或清作寄存器及工作單元置初值或清0 0等等. . 循環(huán)體循環(huán)體 重復(fù)執(zhí)行的部分,循環(huán)的核心重復(fù)執(zhí)行的部分,循環(huán)的核心. . 循環(huán)的修改循環(huán)的修改 修改計(jì)數(shù)器、寄存器、地址指針、恢復(fù)某些參數(shù)修改計(jì)數(shù)器、寄存器、地址指針、恢復(fù)某些參數(shù). .循環(huán)控制循環(huán)控制 判斷控制循環(huán)是否結(jié)束或繼續(xù)判斷控制循環(huán)是否結(jié)束或繼續(xù). .3.33.3 循環(huán)程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)43循環(huán)程序的具體循環(huán)程序的具體結(jié)構(gòu)流程結(jié)構(gòu)流程有兩種:有兩種:初始化初始化循環(huán)體循環(huán)體修改修改結(jié)束循
43、環(huán)?結(jié)束循環(huán)?YN(a a)先執(zhí)行,后判斷)先執(zhí)行,后判斷至少執(zhí)行一次循環(huán)體至少執(zhí)行一次循環(huán)體初始化初始化循環(huán)體循環(huán)體修改修改進(jìn)入循環(huán)?進(jìn)入循環(huán)?YN(b b)先判斷,后執(zhí)行)先判斷,后執(zhí)行可以不執(zhí)行循環(huán)體可以不執(zhí)行循環(huán)體3.3.1 3.3.1 循環(huán)程序的基本結(jié)構(gòu)循環(huán)程序的基本結(jié)構(gòu)44循環(huán)控制方法最常見的有兩種:循環(huán)控制方法最常見的有兩種: 計(jì)數(shù)控制計(jì)數(shù)控制 循環(huán)次數(shù)已知,故可用某個(gè)寄存器循環(huán)次數(shù)已知,故可用某個(gè)寄存器或單元作為計(jì)數(shù)器,或單元作為計(jì)數(shù)器, 用計(jì)數(shù)器的值來(lái)控制循環(huán)的用計(jì)數(shù)器的值來(lái)控制循環(huán)的結(jié)束與否結(jié)束與否. . 條件控制條件控制 循環(huán)次數(shù)未知,即循環(huán)次數(shù)與循環(huán)循環(huán)次數(shù)未知,即循環(huán)
44、次數(shù)與循環(huán)體的執(zhí)行情況有關(guān),通過(guò)條件測(cè)試指令來(lái)測(cè)試是體的執(zhí)行情況有關(guān),通過(guò)條件測(cè)試指令來(lái)測(cè)試是否滿足循環(huán)條件,以控制循環(huán)是否結(jié)束否滿足循環(huán)條件,以控制循環(huán)是否結(jié)束. .3.3.1 3.3.1 循環(huán)程序的基本結(jié)構(gòu)循環(huán)程序的基本結(jié)構(gòu)45此類指令的特點(diǎn)是:此類指令的特點(diǎn)是: 循環(huán)次數(shù)由循環(huán)次數(shù)由 CXCX計(jì)數(shù)器控制計(jì)數(shù)器控制. .循環(huán)指令本身不循環(huán)指令本身不影響標(biāo)志影響標(biāo)志. . 同條件轉(zhuǎn)移指令一樣,重復(fù)控制指令也是相同條件轉(zhuǎn)移指令一樣,重復(fù)控制指令也是相對(duì)轉(zhuǎn)移指令,重復(fù)控制指令的目的地址必須在本對(duì)轉(zhuǎn)移指令,重復(fù)控制指令的目的地址必須在本指令地址的指令地址的126126129129字節(jié)的范圍之內(nèi)字節(jié)
45、的范圍之內(nèi). .3.3.2 3.3.2 重復(fù)控制指令重復(fù)控制指令46 LOOPLOOP指令指令格式:格式: LOOP short-LOOP short-lablelable操作操作:CXCX1CX1CX, 當(dāng)當(dāng)CX0CX0則轉(zhuǎn)則轉(zhuǎn)short-short-lablelable 所指指令;所指指令; 否則順序執(zhí)行否則順序執(zhí)行. .注:注:l在使用在使用LOOPLOOP指令前,必須把循環(huán)次數(shù)送入指令前,必須把循環(huán)次數(shù)送入CXCX. .lLOOP LOOP shotr-lableshotr-lable= =l若若CX=0CX=0,則循環(huán)要進(jìn)行,則循環(huán)要進(jìn)行6553665536次次. . DEC CXD
46、EC CXJNZ short-JNZ short-lablelable3.3.2 3.3.2 重復(fù)控制指令重復(fù)控制指令47 LOOPZ / LOOPELOOPZ / LOOPE指令指令格式:格式: LOOPZ / LOOPE short-LOOPZ / LOOPE short-lablelable操作:操作:CXCX1 CX ,1 CX , 當(dāng)當(dāng)CX0 ,CX0 ,且且ZF=1ZF=1則轉(zhuǎn)移;否則順序執(zhí)行則轉(zhuǎn)移;否則順序執(zhí)行. .l注:本指令不影響注:本指令不影響ZF,ZFZF,ZF由前面指令設(shè)定由前面指令設(shè)定. .即前即前面比較結(jié)果相等面比較結(jié)果相等. .3.3.2 3.3.2 重復(fù)控制指令
47、重復(fù)控制指令48 格式:格式: LOOPNZ/LOOPNE short-LOOPNZ/LOOPNE short-lablelable操作:操作:CXCX1 CX , 1 CX , 當(dāng)當(dāng)CX0 ,CX0 ,且且ZF=0ZF=0則轉(zhuǎn)移;否則順序執(zhí)行則轉(zhuǎn)移;否則順序執(zhí)行. .格式:格式:JCXZ short-JCXZ short-lablelable操作:操作:CX=0CX=0轉(zhuǎn)移轉(zhuǎn)移, ,否則順序執(zhí)行否則順序執(zhí)行. .l注:指令本身不作減操作,本指令一般用在循環(huán)的注:指令本身不作減操作,本指令一般用在循環(huán)的開始處,當(dāng)開始處,當(dāng)CX=0,CX=0,則跳過(guò)循環(huán)則跳過(guò)循環(huán). . LOOPNZ / LOO
48、PNELOOPNZ / LOOPNE指令指令 JCXZJCXZ指令指令3.3.2 3.3.2 重復(fù)控制指令重復(fù)控制指令49 ( (注意循環(huán)結(jié)構(gòu)注意循環(huán)結(jié)構(gòu), ,防止死循環(huán))防止死循環(huán))下面通過(guò)幾個(gè)例題介紹循環(huán)控制下面通過(guò)幾個(gè)例題介紹循環(huán)控制l計(jì)數(shù)控制計(jì)數(shù)控制l條件控制條件控制3.3.3 3.3.3 單重循環(huán)程序設(shè)計(jì)舉例單重循環(huán)程序設(shè)計(jì)舉例50例例3.113.11 計(jì)算計(jì)算 Z=X+Y, XZ=X+Y, X、Y Y 為雙字變量為雙字變量. .X DD 72345678HX DD 72345678HY DD 90ABCDEFHY DD 90ABCDEFHZ DB 5 DUPZ DB 5 DUP(0
49、 0) MOV CX,4MOV CX,4 ; ;設(shè)計(jì)數(shù)初值設(shè)計(jì)數(shù)初值 MOV SI,0MOV SI,0 ;地址指針;地址指針 AND AX,AXAND AX,AX;清;清CFCFAGAIN: MOV AL,BYTE PTR XSIAGAIN: MOV AL,BYTE PTR XSI ADC AL,BYTE PTR YSI ADC AL,BYTE PTR YSI MOV ZSI,AL MOV ZSI,AL INC SI INC SI ; ;指下一個(gè)字節(jié)指下一個(gè)字節(jié) LOOP AGAINLOOP AGAIN;計(jì)數(shù)控制;計(jì)數(shù)控制 MOV ZSI,0MOV ZSI,0 ; ;處理向處理向 RCL ZS
50、I,1RCL ZSI,1 萬(wàn)位進(jìn)位萬(wàn)位進(jìn)位分析:按照由低到高字節(jié)相加分析:按照由低到高字節(jié)相加. .最后的和可能占最后的和可能占5 5個(gè)字節(jié)個(gè)字節(jié). .用一個(gè)雙字變量所占的字節(jié)數(shù)用一個(gè)雙字變量所占的字節(jié)數(shù)4 4作為循環(huán)體的控制條件作為循環(huán)體的控制條件, ,為計(jì)數(shù)控制為計(jì)數(shù)控制. .51例例3.19 3.19 將存儲(chǔ)器中的將存儲(chǔ)器中的1616位無(wú)符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)位無(wú)符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),并顯示結(jié)果制數(shù),并顯示結(jié)果分析分析: : N N1010取其余數(shù)取其余數(shù), ,則為十進(jìn)制數(shù),重復(fù)直到商為則為十進(jìn)制數(shù),重復(fù)直到商為0.0. 它是次數(shù)未知的循環(huán)它是次數(shù)未知的循環(huán). .為條件控制循環(huán)為條
51、件控制循環(huán). . 將余數(shù)將余數(shù) ASC ASC ,送顯示緩沖區(qū),用,送顯示緩沖區(qū),用9 9號(hào)功能顯示即可號(hào)功能顯示即可. . BINARY DW 55H BINARY DW 55H OBUF DB 6 DUP(0) OBUF DB 6 DUP(0) 52 MOV BX ,OFFSET OBUF+5MOV BX ,OFFSET OBUF+5 ; BX; BX指向低位字符地址指向低位字符地址 MOV BYTE PTRBX,$MOV BYTE PTRBX,$ MOV AX ,BINARYMOV AX ,BINARY MOV CX ,10MOV CX ,10AGAIN: MOV DX ,0AGAIN:
52、 MOV DX ,0 ;被除數(shù)擴(kuò)展(無(wú)號(hào)符數(shù)擴(kuò)展);被除數(shù)擴(kuò)展(無(wú)號(hào)符數(shù)擴(kuò)展) DIV CXDIV CX ;余數(shù);余數(shù)DXDX,商,商AXAX ADD DL ,30HADD DL ,30H ;十進(jìn)制數(shù)轉(zhuǎn)換為;十進(jìn)制數(shù)轉(zhuǎn)換為ASCASC DEC BXDEC BX ;修改地址指針;修改地址指針 MOV BX ,DLMOV BX ,DL ;存十進(jìn)制數(shù)字串;存十進(jìn)制數(shù)字串 OR AX ,AXOR AX ,AX ;商為;商為0?0? JNZ AGAINJNZ AGAIN MOV DX ,BX MOV DX ,BX ; ;顯示顯示 MOV AH ,9MOV AH ,9 INT 21HINT 21H ret
53、 ret53多重循環(huán)即循環(huán)體內(nèi)再套有循環(huán)多重循環(huán)即循環(huán)體內(nèi)再套有循環(huán). .例例3.223.22 對(duì)字節(jié)變量對(duì)字節(jié)變量BUFBUF中存放的中存放的n 個(gè)字節(jié)符號(hào)數(shù)排序個(gè)字節(jié)符號(hào)數(shù)排序3.3.4 3.3.4 多重循環(huán)程序設(shè)計(jì)舉例多重循環(huán)程序設(shè)計(jì)舉例l將第將第1 1個(gè)單元中的數(shù)與其后個(gè)單元中的數(shù)與其后n n1 1個(gè)單元中的個(gè)單元中的數(shù)逐個(gè)比較,每次比較之后總是把較大的數(shù)數(shù)逐個(gè)比較,每次比較之后總是把較大的數(shù)放在一個(gè)寄存器中,經(jīng)過(guò)放在一個(gè)寄存器中,經(jīng)過(guò)n n1 1次比較之后得次比較之后得到到n n個(gè)數(shù)中的最大數(shù),存入第個(gè)數(shù)中的最大數(shù),存入第1 1個(gè)單元。接著個(gè)單元。接著將第將第2 2個(gè)單元中的數(shù)與其后
54、的個(gè)單元中的數(shù)與其后的n n2 2個(gè)單元中個(gè)單元中的數(shù)逐個(gè)比較,經(jīng)過(guò)的數(shù)逐個(gè)比較,經(jīng)過(guò)n n2 2次比較得到次比較得到n n1 1個(gè)個(gè)數(shù)的最大數(shù)數(shù)的最大數(shù)( (亦即亦即n n個(gè)數(shù)中的第個(gè)數(shù)中的第2 2大數(shù)大數(shù)) )存入第存入第2 2個(gè)單元個(gè)單元. .54BUF DB 20 ,19 BUF DB 20 ,19 ,250250COUNT EQU $-BUFCOUNT EQU $-BUF MOV SI ,OFFSET BUF MOV SI ,OFFSET BUF MOV DX ,COUNT-1MOV DX ,COUNT-1 ;外循環(huán)初始化;外循環(huán)初始化 OUTSID: MOV CX ,DX OUTS
55、ID: MOV CX ,DX ; ; 內(nèi)循環(huán)初始化內(nèi)循環(huán)初始化 PUSH SIPUSH SI ; ;保存第一個(gè)數(shù)地址保存第一個(gè)數(shù)地址 MOV AL ,SIMOV AL ,SI ; ;取第一個(gè)數(shù)取第一個(gè)數(shù)INSIDEINSIDE:INC SIINC SI CMP AL CMP AL ,SI SI JNC NEXCHG JNC NEXCHG XCHG SI XCHG SI ,ALALNEXCHGNEXCHG:LOOP INSIDELOOP INSIDE ; ;內(nèi)循環(huán)修改控制內(nèi)循環(huán)修改控制 POP SIPOP SI MOV SI MOV SI ,ALAL ;存;存maxmax至第一單元至第一單元 I
56、NC SIINC SI DEC DX DEC DX ;外循環(huán)修改控制;外循環(huán)修改控制 JNZ OUTSIDJNZ OUTSID ret ret前一個(gè)數(shù)前一個(gè)數(shù)ALAL后一個(gè)數(shù),后一個(gè)數(shù),則不交換;否則將則不交換;否則將maxALmaxAL55第三章 程序設(shè)計(jì)的基本技術(shù)3. 3.1 13.33.33. 3.2 2順序程序設(shè)計(jì)順序程序設(shè)計(jì)分支程序設(shè)計(jì)分支程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)子程序設(shè)計(jì)子程序設(shè)計(jì)3. 3.4 4串處理程序設(shè)計(jì)串處理程序設(shè)計(jì)3. 3.5 556 對(duì)于大型的復(fù)雜的程對(duì)于大型的復(fù)雜的程序序, ,往往是根據(jù)程序要實(shí)往往是根據(jù)程序要實(shí)現(xiàn)的若干主要功能將程現(xiàn)的若干主要功能將程序化分為
57、若干個(gè)相對(duì)獨(dú)序化分為若干個(gè)相對(duì)獨(dú)立的模塊。確定各模塊立的模塊。確定各模塊的入口及出口參數(shù),為的入口及出口參數(shù),為各模塊分配不同的名字各模塊分配不同的名字(入口地址),然后對(duì)每一模塊編制獨(dú)立的程序段(入口地址),然后對(duì)每一模塊編制獨(dú)立的程序段子程序,最后將這些子程序根據(jù)調(diào)用關(guān)系連成子程序,最后將這些子程序根據(jù)調(diào)用關(guān)系連成一個(gè)整體一個(gè)整體AA1A2A3A11 A12 A13A31A323.5 3.5 子程序設(shè)計(jì)子程序設(shè)計(jì)57 子程序的調(diào)用與返回,實(shí)質(zhì)上就是控制程序子程序的調(diào)用與返回,實(shí)質(zhì)上就是控制程序的轉(zhuǎn)移,但不能使用前面的轉(zhuǎn)移指令的轉(zhuǎn)移,但不能使用前面的轉(zhuǎn)移指令轉(zhuǎn)移指令轉(zhuǎn)移指令轉(zhuǎn)走后,不再回到原
58、來(lái)的地方,但子程序必須回轉(zhuǎn)走后,不再回到原來(lái)的地方,但子程序必須回到原來(lái)地方(斷點(diǎn))繼續(xù)執(zhí)行到原來(lái)地方(斷點(diǎn))繼續(xù)執(zhí)行. .為此提供專用的調(diào)為此提供專用的調(diào)用指令和返回指令用指令和返回指令1.1.主程序與子程序間的主程序與子程序間的轉(zhuǎn)返轉(zhuǎn)返3.5.1 3.5.1 子程序的概念子程序的概念58l參數(shù)參數(shù)主主子程序互相傳遞的信息子程序互相傳遞的信息( (可以是信息可以是信息本身或信息的地址本身或信息的地址),),分兩類分兩類: : 入口參數(shù)入口參數(shù)主程序提供給子程序以便加工處理主程序提供給子程序以便加工處理的信息的信息 原始數(shù)據(jù)原始數(shù)據(jù). . 出口參數(shù)出口參數(shù)經(jīng)子程序加工處理后送回給主程序經(jīng)子程序
59、加工處理后送回給主程序的信息的信息處理結(jié)果處理結(jié)果. .l傳遞方式傳遞方式為了傳遞參數(shù)為了傳遞參數(shù), ,約定一種主子雙方都約定一種主子雙方都能接受的參數(shù)傳遞方式能接受的參數(shù)傳遞方式: :2.2.主程序與子程序間的主程序與子程序間的參數(shù)傳遞參數(shù)傳遞3.5.1 3.5.1 子程序的概念子程序的概念59 (1 1)寄存器法)寄存器法 主程序與子程序間傳遞的參數(shù)都在約定的寄存主程序與子程序間傳遞的參數(shù)都在約定的寄存器中器中傳遞傳遞單元在單元在CPUCPU內(nèi)部?jī)?nèi)部. . 在調(diào)用子程序前主程序?qū)⑷肟趨?shù)送約定寄存在調(diào)用子程序前主程序?qū)⑷肟趨?shù)送約定寄存器中器中, ,子程序直接從這些寄存器中取得參數(shù)進(jìn)行計(jì)子
60、程序直接從這些寄存器中取得參數(shù)進(jìn)行計(jì)算處理算處理, ,經(jīng)加工處理后得到的結(jié)果經(jīng)加工處理后得到的結(jié)果( (出口參數(shù)出口參數(shù)) )也放也放在約定寄存器中在約定寄存器中 , ,返回主程序后返回主程序后, ,主程序直接到該主程序直接到該寄存器中取得結(jié)果寄存器中取得結(jié)果. .該法簡(jiǎn)單該法簡(jiǎn)單直觀直觀, ,信息傳遞快信息傳遞快, ,但寄存器個(gè)數(shù)有限但寄存器個(gè)數(shù)有限, ,所以適用于參數(shù)較少的情況所以適用于參數(shù)較少的情況. .3.5.1 3.5.1 子程序的概念子程序的概念60 入口和出口參數(shù)都放在堆棧中入口和出口參數(shù)都放在堆棧中傳遞單元在傳遞單元在SSSS段段. . 調(diào)用前調(diào)用前, ,入口參數(shù)由主程序送入堆
溫馨提示
- 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版南京租賃房屋租賃押金退還合同4篇
- 2025年度農(nóng)業(yè)科技示范園區(qū)建設(shè)合同8篇
- 2025年個(gè)人房產(chǎn)測(cè)繪與房地產(chǎn)營(yíng)銷服務(wù)合同
- 二零二五年度高端定制實(shí)木地板采購(gòu)供應(yīng)合同4篇
- 2025年度鎳礦出口退稅與物流服務(wù)合同范本4篇
- 二零二五年度新型暖氣材料研發(fā)與應(yīng)用推廣合同范本4篇
- 2025年度門面租賃合同租賃保證金管理范本4篇
- 2025年度租賃車輛保險(xiǎn)代繳服務(wù)合同4篇
- 2025年度個(gè)人二手房交易產(chǎn)權(quán)過(guò)戶合同2篇
- 2025年度木屋建造與木材加工質(zhì)量控制合同3篇
- 多重耐藥菌病人的管理-(1)課件
- (高清版)TDT 1056-2019 縣級(jí)國(guó)土資源調(diào)查生產(chǎn)成本定額
- 環(huán)境監(jiān)測(cè)對(duì)環(huán)境保護(hù)的意義
- 2023年數(shù)學(xué)競(jìng)賽AMC8試卷(含答案)
- 神經(jīng)外科課件:神經(jīng)外科急重癥
- 2024年低壓電工證理論考試題庫(kù)及答案
- 2023年十天突破公務(wù)員面試
- 《瘋狂動(dòng)物城》中英文對(duì)照(全本臺(tái)詞)
- 醫(yī)院住院醫(yī)師規(guī)范化培訓(xùn)證明(樣本)
- 小學(xué)六年級(jí)語(yǔ)文閱讀理解100篇(及答案)
- 氣功修煉十奧妙
評(píng)論
0/150
提交評(píng)論