版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、14.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 分析問(wèn)題:分析問(wèn)題:通過(guò)詳細(xì)的了解和分析,將一個(gè)實(shí)際問(wèn)題轉(zhuǎn)化為一個(gè)計(jì)通過(guò)詳細(xì)的了解和分析,將一個(gè)實(shí)際問(wèn)題轉(zhuǎn)化為一個(gè)計(jì)算機(jī)可以處理的問(wèn)題。算機(jī)可以處理的問(wèn)題。確定算法確定算法:抽象出描述問(wèn)題的數(shù)學(xué)模型抽象出描述問(wèn)題的數(shù)學(xué)模型,并確定實(shí)現(xiàn)數(shù)學(xué)模型的算法并確定實(shí)現(xiàn)數(shù)學(xué)模型的算法.u 算法就是計(jì)算機(jī)能夠?qū)崿F(xiàn)的操作方法和操作步驟。算法就是計(jì)算機(jī)能夠?qū)崿F(xiàn)的操作方法和操作步驟。u 算法的流程圖描述法:流程圖中較為通用的幾種符號(hào):算法的流程圖描述法:流程圖中較為通用的幾種符號(hào):n基本步驟基本步驟 DSRC 起始框:起始框:執(zhí)行框:執(zhí)行框:判斷框:判斷框:連接符連接符2
2、 起始和終止框是表示程序開(kāi)始和結(jié)束的符號(hào),它總起始和終止框是表示程序開(kāi)始和結(jié)束的符號(hào),它總是在一個(gè)流程圖的開(kāi)頭或結(jié)尾處;是在一個(gè)流程圖的開(kāi)頭或結(jié)尾處; 執(zhí)行框用來(lái)表示須完成的某項(xiàng)功能,它可以是一條執(zhí)行框用來(lái)表示須完成的某項(xiàng)功能,它可以是一條指令或一段程序,但是無(wú)論哪種情況,該框只能有指令或一段程序,但是無(wú)論哪種情況,該框只能有一個(gè)入口和一個(gè)出口;一個(gè)入口和一個(gè)出口; 判斷框是用來(lái)表示程序在此處要根據(jù)不同情況形成判斷框是用來(lái)表示程序在此處要根據(jù)不同情況形成分支,框內(nèi)需寫(xiě)明比較的條件,此框有一個(gè)入口,分支,框內(nèi)需寫(xiě)明比較的條件,此框有一個(gè)入口,兩個(gè)出口;兩個(gè)出口; 連接符是用來(lái)連接兩個(gè)流程框圖的符
3、號(hào),圓形符號(hào)連接符是用來(lái)連接兩個(gè)流程框圖的符號(hào),圓形符號(hào)內(nèi)可寫(xiě)入標(biāo)識(shí)符,不同流程框圖中連接符中的標(biāo)識(shí)內(nèi)可寫(xiě)入標(biāo)識(shí)符,不同流程框圖中連接符中的標(biāo)識(shí)符相同的各點(diǎn)將連接在一起符相同的各點(diǎn)將連接在一起 4.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n基本步驟基本步驟 DSRC 3n 編寫(xiě)程序編寫(xiě)程序 采用匯編語(yǔ)言編寫(xiě)程序應(yīng)注意以下幾個(gè)問(wèn)題:采用匯編語(yǔ)言編寫(xiě)程序應(yīng)注意以下幾個(gè)問(wèn)題: 必須詳細(xì)了解所用必須詳細(xì)了解所用CPU的編程模型、指令系統(tǒng)、尋的編程模型、指令系統(tǒng)、尋址方式及有關(guān)偽指令;址方式及有關(guān)偽指令; 必須進(jìn)行存儲(chǔ)空間和工作單元的合理分配;必須進(jìn)行存儲(chǔ)空間和工作單元的合理分配; 多次使用的程序段可采用子
4、程序或宏指令;多次使用的程序段可采用子程序或宏指令; 盡可能用標(biāo)號(hào)或變量來(lái)代替絕對(duì)地址和常數(shù)。盡可能用標(biāo)號(hào)或變量來(lái)代替絕對(duì)地址和常數(shù)。4.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n基本步驟基本步驟 DSRC 4n 程序檢驗(yàn)程序檢驗(yàn) 程序編好以后,必須經(jīng)過(guò)書(shū)面檢查和上機(jī)調(diào)試,程序編好以后,必須經(jīng)過(guò)書(shū)面檢查和上機(jī)調(diào)試,以便說(shuō)明程序是否正確。檢驗(yàn)時(shí),應(yīng)預(yù)先選擇典型以便說(shuō)明程序是否正確。檢驗(yàn)時(shí),應(yīng)預(yù)先選擇典型數(shù)據(jù),檢查是否可以得到預(yù)期結(jié)果。數(shù)據(jù),檢查是否可以得到預(yù)期結(jié)果。n 編寫(xiě)文檔編寫(xiě)文檔 一個(gè)完整的軟件必須有相應(yīng)的說(shuō)明文件,這不一個(gè)完整的軟件必須有相應(yīng)的說(shuō)明文件,這不僅便于用戶使用,也便于對(duì)程序的維護(hù)
5、和擴(kuò)充。說(shuō)僅便于用戶使用,也便于對(duì)程序的維護(hù)和擴(kuò)充。說(shuō)明文件主要包括程序的功能和使用方法,程序的基明文件主要包括程序的功能和使用方法,程序的基本結(jié)構(gòu)和所采用的主要算法以及程序的必要說(shuō)明和本結(jié)構(gòu)和所采用的主要算法以及程序的必要說(shuō)明和注意事項(xiàng)等。注意事項(xiàng)等。4.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n基本步驟基本步驟 DSRC 5 按照指令執(zhí)行的順序,程序的結(jié)構(gòu)可以劃分成以下三種。按照指令執(zhí)行的順序,程序的結(jié)構(gòu)可以劃分成以下三種。 順序結(jié)構(gòu)順序結(jié)構(gòu):程序按照它編寫(xiě)的順序執(zhí)行,每條指令只執(zhí)行一:程序按照它編寫(xiě)的順序執(zhí)行,每條指令只執(zhí)行一 次,這樣的程序稱為次,這樣的程序稱為“順序結(jié)構(gòu)順序結(jié)構(gòu)”的程序。
6、的程序。 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu):一組指令被反復(fù)地執(zhí)行,這樣的程序稱為:一組指令被反復(fù)地執(zhí)行,這樣的程序稱為“循環(huán)循環(huán)結(jié)結(jié) 構(gòu)構(gòu)”或者或者“重復(fù)結(jié)構(gòu)重復(fù)結(jié)構(gòu)”的程序。的程序。 選擇結(jié)構(gòu)選擇結(jié)構(gòu):根據(jù)某個(gè)條件,一部分指令被執(zhí)行,另一部分指:根據(jù)某個(gè)條件,一部分指令被執(zhí)行,另一部分指 令沒(méi)有被執(zhí)行,這樣的程序稱為令沒(méi)有被執(zhí)行,這樣的程序稱為“選擇結(jié)構(gòu)選擇結(jié)構(gòu)”或或者者 “ “分支結(jié)構(gòu)分支結(jié)構(gòu)”的程序。的程序。 一個(gè)實(shí)際運(yùn)行的程序,常常是由以上三種結(jié)構(gòu)的程序組合一個(gè)實(shí)際運(yùn)行的程序,常常是由以上三種結(jié)構(gòu)的程序組合而成的,上面的三種結(jié)構(gòu)稱為程序的而成的,上面的三種結(jié)構(gòu)稱為程序的“基本結(jié)構(gòu)基本結(jié)構(gòu)”。使用這三。
7、使用這三種基本結(jié)構(gòu),可以編寫(xiě)出任何所需要的程序。種基本結(jié)構(gòu),可以編寫(xiě)出任何所需要的程序。4.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) DSRC 64.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n4.3.1順序程序順序程序DSRC 例例4 4- -3 3- -1 1-1 -1 將存儲(chǔ)器中的二個(gè)字將存儲(chǔ)器中的二個(gè)字節(jié)相加,結(jié)果節(jié)相加,結(jié)果( (和和) )送到另一個(gè)存送到另一個(gè)存儲(chǔ)器單元中。儲(chǔ)器單元中。 此題的算法及思路是此題的算法及思路是: :1 1、先將一個(gè)字節(jié)數(shù)據(jù)從存儲(chǔ)單、先將一個(gè)字節(jié)數(shù)據(jù)從存儲(chǔ)單元送入累加器;元送入累加器;2 2、然后再把累加器的內(nèi)容與第、然后再把累加器的內(nèi)容與第二個(gè)存儲(chǔ)單元的數(shù)據(jù)相加(
8、和不二個(gè)存儲(chǔ)單元的數(shù)據(jù)相加(和不超過(guò)一個(gè)字節(jié));超過(guò)一個(gè)字節(jié));3 3、將結(jié)果(和)再?gòu)睦奂悠魉?、將結(jié)果(和)再?gòu)睦奂悠魉突卮鎯?chǔ)器存放結(jié)果的單元中?;卮鎯?chǔ)器存放結(jié)果的單元中。 74.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n4.3.1順序程序順序程序DSRC DATA SEGMENTBUFFER1 DB 47H,6AHSUM1 DB ?DATA ENDSSTAK SEGMENT PARA STACK STACK DB 10 DUP(0) TOP LABEL WORDSTAK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STAKSTART:MOV AX,DA
9、TA MOV DS,AX MOV AX, STAK MOV SS,AX MOV SP OFFSET TOP MOV AH,BUFFER1 ADD AH,BUFFER1+1 ;兩數(shù)據(jù)相加兩數(shù)據(jù)相加 MOV SUM1,AH ;存放結(jié)果存放結(jié)果 MOV AH,4CH;退出程序退出程序,返回返回DOS INT 21HCODE ENDS END START84.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n4.3.1順序程序順序程序DSRC 例例4 4- -3 3- -1 1-2-2將一字節(jié)壓縮將一字節(jié)壓縮BCDBCD碼轉(zhuǎn)換為兩個(gè)碼轉(zhuǎn)換為兩個(gè)ASCIIASCII1、首先將一字節(jié)壓縮、首先將一字節(jié)壓縮BCD碼從碼
10、從BCDBUF中取入寄存器;中取入寄存器;2、然后將此二位、然后將此二位BCD碼一分為碼一分為二拆開(kāi),形成二位非壓縮的二拆開(kāi),形成二位非壓縮的BCD碼(并使它們的高四位都置碼(并使它們的高四位都置0););3、然后都加以、然后都加以30H,形成二個(gè),形成二個(gè)ASCII碼;碼;4、再按先高后低的次序存入、再按先高后低的次序存入ASCBUF符號(hào)地址的連續(xù)二個(gè)單符號(hào)地址的連續(xù)二個(gè)單元中(此次序正好滿足將來(lái)輸出元中(此次序正好滿足將來(lái)輸出顯示和打印的次序),程序流程顯示和打印的次序),程序流程圖如圖所示:圖如圖所示:94.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n4.3.1順序程序順序程序DSRC DAT
11、A SEGMENTBCDBUF DB 96HASCBUF DB 2 DUP(?)(?)DATA ENDSSTAK SEGMENT PARA STACK STACK DB 10 DUP(0) TOP LABEL WORD STAK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STAKSTART: MOV AX,DATA MOV DS,AX MOV AX, STAK MOV SS,AX MOV SP OFFSET TOP MOV AL,BCDBUF ;AL(BCD BUF) MOV BL,AL ;BL(BCD BUF) MOV CL,4 SHR AL,CL
12、 ;BCD碼中高位移入低位,高位補(bǔ)碼中高位移入低位,高位補(bǔ)0 ADD AL,30H ;形成;形成BCD高位的高位的ASCII碼。碼。 MOV ASCBUF,AL ;送入;送入ASC BUF單元中單元中 AND BL,0FH ;??;取BCD碼低位,高位補(bǔ)碼低位,高位補(bǔ)0 ADD BL,30H ;形成;形成BCD低位的低位的ASCII碼。碼。 MOV ASCBUF+1,BL;送入;送入ASC BUF+1單元中。單元中。 MOV AH,4CH;退出程序退出程序,返回返回DOS INT 21HCODE ENDS END START10n 分支程序結(jié)構(gòu)分支程序結(jié)構(gòu)u 分支程序概念:計(jì)算機(jī)在完成某種運(yùn)算或
13、某個(gè)過(guò)程的分支程序概念:計(jì)算機(jī)在完成某種運(yùn)算或某個(gè)過(guò)程的控制時(shí),經(jīng)常需要根據(jù)不同的情況(條件)實(shí)現(xiàn)不同控制時(shí),經(jīng)常需要根據(jù)不同的情況(條件)實(shí)現(xiàn)不同的功能,這就要求在程序的執(zhí)行過(guò)程中能夠進(jìn)行某種的功能,這就要求在程序的執(zhí)行過(guò)程中能夠進(jìn)行某種條件的判定,并根據(jù)判定結(jié)果決定程序的流向,這就條件的判定,并根據(jù)判定結(jié)果決定程序的流向,這就是分支程序是分支程序 。u 分支程序分類(lèi):分為二分支結(jié)構(gòu)和多分枝結(jié)構(gòu)分支程序分類(lèi):分為二分支結(jié)構(gòu)和多分枝結(jié)構(gòu) 二分支結(jié)構(gòu)只進(jìn)行二中選一的判定,程序中只出現(xiàn)二分支結(jié)構(gòu)只進(jìn)行二中選一的判定,程序中只出現(xiàn)一個(gè)分支;一個(gè)分支; 多分枝結(jié)構(gòu)是進(jìn)行多選一。多分枝結(jié)構(gòu)是進(jìn)行多選一。
14、4.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n4.3.2分支程序分支程序DSRC 114.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 二分支結(jié)構(gòu)只進(jìn)行二中選一的判定,程序中只出現(xiàn)一個(gè)分支;二分支結(jié)構(gòu)只進(jìn)行二中選一的判定,程序中只出現(xiàn)一個(gè)分支;其流程圖如下:其流程圖如下:n4.3.2分支程序分支程序DSRC 124.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 多分枝結(jié)構(gòu)是進(jìn)行多選一,其流程圖如下:多分枝結(jié)構(gòu)是進(jìn)行多選一,其流程圖如下:n4.3.2分支程序分支程序DSRC 134.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n分支程序設(shè)計(jì)分支程序設(shè)計(jì) 分支程序設(shè)計(jì)時(shí)必須注意以下幾個(gè)要點(diǎn):分支程序設(shè)計(jì)時(shí)必須注意以下幾個(gè)要點(diǎn):
15、正確選擇判定條件和相應(yīng)的條件轉(zhuǎn)移指令;正確選擇判定條件和相應(yīng)的條件轉(zhuǎn)移指令; 在編程時(shí)必須保證每條分支都能有完整的結(jié)果;在編程時(shí)必須保證每條分支都能有完整的結(jié)果; 在檢查和調(diào)試時(shí)必須逐條分支進(jìn)行,因?yàn)橐粭l或其在檢查和調(diào)試時(shí)必須逐條分支進(jìn)行,因?yàn)橐粭l或其中幾條分支正確還不足以說(shuō)明整個(gè)程序正確。中幾條分支正確還不足以說(shuō)明整個(gè)程序正確。n4.3.2分支程序分支程序DSRC 144.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n分支程序設(shè)計(jì)分支程序設(shè)計(jì)計(jì)算計(jì)算AX |AX| 的兩種判斷方法:的兩種判斷方法:n4.3.2分支程序分支程序DSRC 154.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n分支程序設(shè)計(jì)分支程序
16、設(shè)計(jì)例例4 3-2-1 求求X的絕對(duì)值,并送回原處。的絕對(duì)值,并送回原處。分析:按題義要求,運(yùn)算結(jié)果分析:按題義要求,運(yùn)算結(jié)果X的值與原給出的的值與原給出的X值關(guān)系如下:值關(guān)系如下: n4.3.2分支程序分支程序DSRC 164.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n4.3.2分支程序分支程序DSRC DATA SEGMENT ;定義數(shù)據(jù)段定義數(shù)據(jù)段XADR DW 3456H , 8192H ;定義數(shù)據(jù)定義數(shù)據(jù)XN EQU 2DATA ENDSSTAK SEGMENT STACK STACK DB 10 DUP(0) TOP LABEL WORD STAK ENDSCODE SEGMENT ;
17、定義代碼段定義代碼段 ASSUME CS:CODE, DS:DATA,SS:STAKSTART: MOV AX, DATA MOV DS, AX MOV AX, STAK MOV SS,AX MOV SP , OFFSET TOP LEA BX, XADR MOV CX, N ;取數(shù)據(jù)取數(shù)據(jù)X ;非負(fù)數(shù)則轉(zhuǎn)非負(fù)數(shù)則轉(zhuǎn) ;否則,取負(fù)否則,取負(fù) MOV AH, 4CH ;退出退出 INT 21HCODE ENDS ENDSTART 17例例4 4- -3 3- -2 2-2 -2 在某串中查找某個(gè)特定字符,找到顯示在某串中查找某個(gè)特定字符,找到顯示Y,未找到顯示未找到顯示N。 DATASEGMEN
18、T STRING DB How are you!,!,welcome to China! N EQU STRINGDATAENDSCODE SEGMENT ASSUME CS:CODE,ES:DATA START:MOVAX,DATA;置;置ES段初值段初值 MOV ES,AX LEA DI,STRING MOV CX,N CLD18 MOV AH,1 INT 21H;從鍵盤(pán)輸入待查字符;從鍵盤(pán)輸入待查字符 REPNE SCASB JZ FOUND;轉(zhuǎn)到找到分支;轉(zhuǎn)到找到分支 MOV DL,N;未找到處理,顯示;未找到處理,顯示N JMP DISP;轉(zhuǎn)到后續(xù)公共位置處;轉(zhuǎn)到后續(xù)公共位置處FOU
19、ND:MOV DL,Y;找到顯示;找到顯示YDISP: MOV AH,2 INT 21H MOV AH,4CH;返回;返回DOS INT 21HCODE ENDS ENDSTART194.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n分支程序設(shè)計(jì)分支程序設(shè)計(jì)例例4 3-2-3 將將4位二進(jìn)制轉(zhuǎn)換成對(duì)應(yīng)的十六進(jìn)制字符位二進(jìn)制轉(zhuǎn)換成對(duì)應(yīng)的十六進(jìn)制字符 本題要求將本題要求將0000轉(zhuǎn)換成轉(zhuǎn)換成0,0001轉(zhuǎn)換成轉(zhuǎn)換成1,1010轉(zhuǎn)換成轉(zhuǎn)換成A,.1111轉(zhuǎn)換成轉(zhuǎn)換成F。二進(jìn)制數(shù)。二進(jìn)制數(shù)X和十六進(jìn)制字符和十六進(jìn)制字符Y之間的轉(zhuǎn)換實(shí)際上是計(jì)算分之間的轉(zhuǎn)換實(shí)際上是計(jì)算分段函數(shù)。段函數(shù)。 n4.3.2分支程序分支
20、程序DSRC MOVAL, X CMPAL, 9 JAALPH ADDAL, 30H JMPDONEALPH: ADDAL, 37HDONE: MOVY, AL0、1、2、3.9的的ASCII為為:30、31、32、3339 A 、 B 、 C . . F 的的ASCII為為:41、42、4346 MOVAL, X ORAL, 30H CMPAL, 9 JBEDONE ADDAL, 7DONE: MOVY, AL20例例4-3-2-4 從鍵盤(pán)輸入一位十六進(jìn)制數(shù),將其轉(zhuǎn)換為數(shù)值。從鍵盤(pán)輸入一位十六進(jìn)制數(shù),將其轉(zhuǎn)換為數(shù)值。在選擇結(jié)構(gòu)程序里,如果可供選擇的程序塊多于兩個(gè),這樣的結(jié)構(gòu)在選擇結(jié)構(gòu)程序里,
21、如果可供選擇的程序塊多于兩個(gè),這樣的結(jié)構(gòu)稱為稱為多分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu),如下圖,如下圖 (b)是匯編語(yǔ)言程序的實(shí)現(xiàn)方法。是匯編語(yǔ)言程序的實(shí)現(xiàn)方法。21例例4-3-2-4 從鍵盤(pán)輸入一位十六進(jìn)制數(shù),將其轉(zhuǎn)換為數(shù)值。從鍵盤(pán)輸入一位十六進(jìn)制數(shù),將其轉(zhuǎn)換為數(shù)值。 CODE SEGMENT ASSUME CS:CODEAGAIN:MOV AH,l INT 21H CMP AL,0 JB AGAIN CMP AL,9 JBE BET0_9 CMP AL,A JB AGAIN CMP AL,F(xiàn) JBE BETA_F JMP AGAINBET0_9:SUB AL,30H JMP EXITBETA_F :
22、SUB AL,37H ;AL中存放轉(zhuǎn)化后中存放轉(zhuǎn)化后 ; 的結(jié)果的結(jié)果EXIT:MOV AH,4CH INT21HCODE ENDSEND AGAIN22n2.4.3分支程序分支程序DSRC 例例4-3-2-5從鍵盤(pán)上輸入數(shù)字從鍵盤(pán)上輸入數(shù)字“1”到到“3”,根據(jù)輸入選擇對(duì)應(yīng)程序塊執(zhí)行。,根據(jù)輸入選擇對(duì)應(yīng)程序塊執(zhí)行。DATASEGMENTPROMPTDB0DH, 0AH, “Input a number (13): $”MSG1 DB0DH, 0AH, “FUNCTION 1 EXECUTED . $”MSG2 DB0DH, 0AH, “FUNCTION 2 EXECUTED . $”MSG3
23、 DB0DH, 0AH, “FUNCTION 3 EXECUTED . $”DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART: MOVAX, DATAMOVDS, AXINPUT: LEADX, PROMPTMOVAH, 9INT21H;輸出提示信息;輸出提示信息MOVAH, 1INT21H;從鍵盤(pán)上輸入一個(gè)數(shù)字;從鍵盤(pán)上輸入一個(gè)數(shù)字(字符字符ASCII ) CMPAL, 1JBINPUT;“0”或非數(shù)字,重新輸入或非數(shù)字,重新輸入JEF123CMPAL, 2JEF2;數(shù)字;數(shù)字“2”,轉(zhuǎn),轉(zhuǎn)F2CMPAL, 3JEF3;數(shù)字;數(shù)字“3”,轉(zhuǎn),轉(zhuǎn)
24、F3JMPINPUT;大于;大于“3”,重新輸入,重新輸入F1:LEADX, MSG1;F1程序塊程序塊JMPOUTPUTF2:LEADX, MSG2;F2程序塊程序塊JMPOUTPUTF3:LEADX, MSG3;F3程序塊程序塊OUTPUT:MOVAH, 9INT21HMOVAX, 4C00HINT21HCODEENDSENDSTART 例4-3-2-5從鍵盤(pán)上輸入數(shù)字“1”到“3”,根據(jù)輸入選擇對(duì)應(yīng)程序塊執(zhí)行。244.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n循環(huán)程序的基本結(jié)構(gòu)循環(huán)程序的基本結(jié)構(gòu)n4.3.3循環(huán)程序循環(huán)程序DSRC 是是否否循環(huán)準(zhǔn)備部分:這是為循環(huán)做準(zhǔn)備的,它不在循環(huán)體內(nèi)。循
25、環(huán)準(zhǔn)備部分:這是為循環(huán)做準(zhǔn)備的,它不在循環(huán)體內(nèi)。循環(huán)工作部分:這部分是循環(huán)程序解題所需的核心程序。循環(huán)工作部分:這部分是循環(huán)程序解題所需的核心程序。這部分程序可以很簡(jiǎn)單,也可以很復(fù)雜,甚至包括循環(huán)結(jié)這部分程序可以很簡(jiǎn)單,也可以很復(fù)雜,甚至包括循環(huán)結(jié)構(gòu)。構(gòu)。調(diào)整部分:這部分主要用來(lái)更新某些數(shù)據(jù),以保證每次循調(diào)整部分:這部分主要用來(lái)更新某些數(shù)據(jù),以保證每次循環(huán)所完成的功能不是完全重復(fù)的。此外,調(diào)整部分還必須環(huán)所完成的功能不是完全重復(fù)的。此外,調(diào)整部分還必須修正循環(huán)控制的參數(shù)。為實(shí)現(xiàn)正常循環(huán),調(diào)整部分是不可修正循環(huán)控制的參數(shù)。為實(shí)現(xiàn)正常循環(huán),調(diào)整部分是不可缺少的。因此,在進(jìn)行循環(huán)程序設(shè)計(jì)時(shí),就必須預(yù)
26、先考慮缺少的。因此,在進(jìn)行循環(huán)程序設(shè)計(jì)時(shí),就必須預(yù)先考慮哪些參數(shù)是需要在循環(huán)過(guò)程中加以調(diào)整的。若需調(diào)整參數(shù)哪些參數(shù)是需要在循環(huán)過(guò)程中加以調(diào)整的。若需調(diào)整參數(shù)為地址,應(yīng)將起始地址放在基址或變址寄存器中,采用寄為地址,應(yīng)將起始地址放在基址或變址寄存器中,采用寄存器間接尋址方式。存器間接尋址方式。 循環(huán)出口判定:循環(huán)程序中至少要有一個(gè)出口判定,以保循環(huán)出口判定:循環(huán)程序中至少要有一個(gè)出口判定,以保證循環(huán)程序正常結(jié)束。證循環(huán)程序正常結(jié)束。254.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 例例43-3-1 編制計(jì)算編制計(jì)算SUM=A1+A2+A3+A4+A5+A6+A7+A8+A9+A10。已知已知A1、A2
27、、A3、A4、A5、A6、A7、A8、A9、A10連續(xù)存連續(xù)存放在以放在以BUFFER為首址的數(shù)據(jù)區(qū)中,每個(gè)數(shù)據(jù)占一個(gè)字節(jié),和為首址的數(shù)據(jù)區(qū)中,每個(gè)數(shù)據(jù)占一個(gè)字節(jié),和SUM不超過(guò)一個(gè)字節(jié)。不超過(guò)一個(gè)字節(jié)。分析分析:這個(gè)求和問(wèn)題的程序設(shè)計(jì)并不困難這個(gè)求和問(wèn)題的程序設(shè)計(jì)并不困難,可以用我們學(xué)過(guò)的順可以用我們學(xué)過(guò)的順序結(jié)構(gòu)方法來(lái)編程,但是序結(jié)構(gòu)方法來(lái)編程,但是10 次加法運(yùn)算指令完全相同,重復(fù)次加法運(yùn)算指令完全相同,重復(fù)10次。用順序編寫(xiě)就比較麻煩了,并且占用大量的時(shí)間和存儲(chǔ)空次。用順序編寫(xiě)就比較麻煩了,并且占用大量的時(shí)間和存儲(chǔ)空間。所以我們采用循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)。注意兩個(gè)問(wèn)題:間。所以我們采用循環(huán)
28、結(jié)構(gòu)的程序設(shè)計(jì)。注意兩個(gè)問(wèn)題:1、必須要設(shè)置控制計(jì)算機(jī)重復(fù)執(zhí)行某公共程序段的指令。、必須要設(shè)置控制計(jì)算機(jī)重復(fù)執(zhí)行某公共程序段的指令。2、必須要對(duì)循環(huán)參數(shù)進(jìn)行修改,以便使相同指令的公共程序段、必須要對(duì)循環(huán)參數(shù)進(jìn)行修改,以便使相同指令的公共程序段能完成不同參數(shù)的操作處理。能完成不同參數(shù)的操作處理。n4.3.3循環(huán)程序循環(huán)程序DSRC 264.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 例例24-4-1 下面我們畫(huà)出程序流程圖,并根據(jù)流程圖編寫(xiě)程序。下面我們畫(huà)出程序流程圖,并根據(jù)流程圖編寫(xiě)程序。n4.3.3循環(huán)程序循環(huán)程序DSRC DATA SEGMENTBUFFER DB 0,2,3,14,5,16,7,
29、8,19,10SUM DB ?DATA ENDSSTAK SEGMENT PARA STACK STACK DB 10 DUP(0) STAK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STAKSTART:MOV AX,DATA MOV DS,AX MOV AX, STAK MOV SS,AX MOV AL,0 ;AL清清0 MOV DI,OFFSET SUM ;DI存放結(jié)果地址存放結(jié)果地址 MOV BX,OFFSET BUFFER;BX操作數(shù)地址操作數(shù)地址 MOV CX,10 ;CX循環(huán)次數(shù)循環(huán)次數(shù) ;是循環(huán)準(zhǔn)備部分是循環(huán)準(zhǔn)備部分LOP: ADD
30、AL,BX ; 循環(huán)工作部分循環(huán)工作部分 INC BX ;修改操作數(shù)地址修改操作數(shù)地址. DEC CX ;循環(huán)計(jì)數(shù)控制循環(huán)計(jì)數(shù)控制 JNZ LOP ;循環(huán)判斷部分循環(huán)判斷部分 MOV DI,AL ;存放結(jié)果存放結(jié)果(和和). MOV AH,4CH ;退出程序退出程序,返回返回DOS INT 21HCODE ENDS END START274.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 例例4 3-3-2 將將ASCII碼表示的碼表示的5位十進(jìn)制數(shù)轉(zhuǎn)換成兩字節(jié)二進(jìn)制數(shù)。位十進(jìn)制數(shù)轉(zhuǎn)換成兩字節(jié)二進(jìn)制數(shù)。分析:設(shè)用分析:設(shè)用ASCII碼表示的碼表示的5位十進(jìn)制數(shù)存放在以位十進(jìn)制數(shù)存放在以ADEC為首地址的數(shù)
31、據(jù)區(qū)中,為首地址的數(shù)據(jù)區(qū)中,轉(zhuǎn)換后的兩字節(jié)二進(jìn)制數(shù)存放在同一數(shù)據(jù)段的轉(zhuǎn)換后的兩字節(jié)二進(jìn)制數(shù)存放在同一數(shù)據(jù)段的RESULT字單元中字單元中。n4.3.3循環(huán)程序循環(huán)程序DSRC 實(shí)際處理算式:實(shí)際處理算式: (30H-30H)*10+(31H-30H)*10+(33H-30H)*10+(30H-30H)*10+(38H-30H)= (0*10)+1*10+3*10+0*10+8= 1*10+13*10+0*10+8=13*10+0*10+8=130*10+8=1308D=051CH=0000010100011100B282.4匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 具體轉(zhuǎn)換算法如下:具體轉(zhuǎn)換算法如下:
32、設(shè)設(shè)AX為存結(jié)果的寄存器為存結(jié)果的寄存器1、AX AX*10 ;按權(quán)相乘,;按權(quán)相乘,2、BX 取一位十進(jìn)制數(shù)的取一位十進(jìn)制數(shù)的ASCII3、BX BX-30H;轉(zhuǎn)換成;轉(zhuǎn)換成094、AX AX+BX;合并結(jié)果;合并結(jié)果5、重復(fù)、重復(fù)14步,直到步,直到5位十進(jìn)制數(shù)處理位十進(jìn)制數(shù)處理完完n2.4.4循環(huán)程序循環(huán)程序DSRC DATA SEGMENTADEC DB 30H,31H,33H,30H,38H;定義;定義5位十進(jìn)制數(shù)位十進(jìn)制數(shù)01308DCOUNT EQU $-ADECRESULT DW ?DATA ENDSSTACK SEGMENT PARA STACKSTACK DB 10DUP(
33、?)(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKTRDEC PROC FARSTART:MOV AX,DATA MOV DS,AX MOV SI,OFFSET ADEC MOV CX,COUNT XOR AX,AX ;結(jié)果寄存器清結(jié)果寄存器清0AGAIN : ADD AX,AX;結(jié)果;結(jié)果*2 MOV BX,AX ADD AX,AX ;結(jié)果;結(jié)果*4 ADD AX,AX;結(jié)果;結(jié)果*8 ADD AX,BX;結(jié)果;結(jié)果*10 MOV BH,0 MOV BL,SI;取一位十進(jìn)制數(shù);取一位十進(jìn)制數(shù) SUB BX,30H ;轉(zhuǎn)換成;
34、轉(zhuǎn)換成09 ADD AX,BX;并入結(jié)果;并入結(jié)果 INC SI ;修改地址;修改地址 LOOP AGAIN ;如未到;如未到5次,則繼續(xù)次,則繼續(xù) MOV RESULT ,AX;存放;存放16位二進(jìn)制結(jié)果位二進(jìn)制結(jié)果 RET ;返回;返回TRDEC ENDPCODE ENDS END START 294.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n多重循環(huán)程序多重循環(huán)程序 多重結(jié)構(gòu)的循環(huán)程序設(shè)計(jì)的基本方法與單重循環(huán)程序多重結(jié)構(gòu)的循環(huán)程序設(shè)計(jì)的基本方法與單重循環(huán)程序設(shè)計(jì)是一致的,應(yīng)分別考慮各重循環(huán)的控制條件及其程序設(shè)計(jì)是一致的,應(yīng)分別考慮各重循環(huán)的控制條件及其程序?qū)崿F(xiàn)。需要特別注意的是,在每次通過(guò)外
35、層循環(huán)再次進(jìn)入實(shí)現(xiàn)。需要特別注意的是,在每次通過(guò)外層循環(huán)再次進(jìn)入內(nèi)層循環(huán)時(shí),初始條件必須重新設(shè)置。內(nèi)層循環(huán)時(shí),初始條件必須重新設(shè)置。n4.3.3循環(huán)程序循環(huán)程序DSRC 304.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 2、例、例43-3-3 在數(shù)據(jù)區(qū)在數(shù)據(jù)區(qū)DATBUF中存放著一組數(shù)據(jù),數(shù)據(jù)的個(gè)數(shù)是中存放著一組數(shù)據(jù),數(shù)據(jù)的個(gè)數(shù)是N,要求,要求對(duì)該數(shù)據(jù)區(qū)中的數(shù)據(jù)按遞增關(guān)系排序。對(duì)該數(shù)據(jù)區(qū)中的數(shù)據(jù)按遞增關(guān)系排序。 算法分析算法分析: :解決這個(gè)問(wèn)題通常采用冒泡排序法。從第一個(gè)數(shù)開(kāi)始依次對(duì)相臨解決這個(gè)問(wèn)題通常采用冒泡排序法。從第一個(gè)數(shù)開(kāi)始依次對(duì)相臨的兩個(gè)數(shù)兩兩進(jìn)行比較,如果次序正確則不做任何操作,否則就
36、將兩個(gè)的兩個(gè)數(shù)兩兩進(jìn)行比較,如果次序正確則不做任何操作,否則就將兩個(gè)數(shù)交換位置。這樣,在做了第一遍的數(shù)交換位置。這樣,在做了第一遍的N-1次比較后,最大的數(shù)已經(jīng)放在次比較后,最大的數(shù)已經(jīng)放在了最后,因此,第二遍比較只需要考慮了最后,因此,第二遍比較只需要考慮N-1個(gè)數(shù)的排序,需要做個(gè)數(shù)的排序,需要做N-2次次比較;第三遍需做比較;第三遍需做N-3次比較,次比較,總共要進(jìn)行,總共要進(jìn)行N-1遍比較才能完成遍比較才能完成排序。排序。假設(shè)有假設(shè)有5 個(gè)數(shù)個(gè)數(shù): 22,34,12 22,34, 78 , 12 , ,78, 34, ,78 n4.3.3循環(huán)程序循環(huán)程序DSRC 314.3匯編語(yǔ)言程序設(shè)
37、計(jì)匯編語(yǔ)言程序設(shè)計(jì) n多重循環(huán)程序多重循環(huán)程序 在很多情況下,數(shù)組可能在比較遍數(shù)并未達(dá)到在很多情況下,數(shù)組可能在比較遍數(shù)并未達(dá)到N-1遍就遍就已經(jīng)整序完畢,而程序仍然要繼續(xù)運(yùn)行到已經(jīng)整序完畢,而程序仍然要繼續(xù)運(yùn)行到N-1遍才能結(jié)束。遍才能結(jié)束。 為了提高效率,可以設(shè)立一個(gè)交換標(biāo)志位,其初值為為了提高效率,可以設(shè)立一個(gè)交換標(biāo)志位,其初值為1。 在進(jìn)入外循環(huán)后,我們首先判斷交換標(biāo)志位,如果為在進(jìn)入外循環(huán)后,我們首先判斷交換標(biāo)志位,如果為1,則設(shè)置內(nèi)循環(huán)的初始條件,進(jìn)入內(nèi)循環(huán),在內(nèi)循環(huán)中,如則設(shè)置內(nèi)循環(huán)的初始條件,進(jìn)入內(nèi)循環(huán),在內(nèi)循環(huán)中,如果交換過(guò)數(shù)據(jù)次序,則將交換標(biāo)志置果交換過(guò)數(shù)據(jù)次序,則將交換標(biāo)
38、志置1,否則置,否則置0;如果為;如果為0,說(shuō)明在內(nèi)循環(huán)過(guò)程中,沒(méi)有交換數(shù)據(jù)的次序,即數(shù)據(jù)已按說(shuō)明在內(nèi)循環(huán)過(guò)程中,沒(méi)有交換數(shù)據(jù)的次序,即數(shù)據(jù)已按要求排序,可以結(jié)束程序。要求排序,可以結(jié)束程序。 假設(shè)有假設(shè)有5 個(gè)數(shù)個(gè)數(shù): 22,34,78 , 34 , ,78 , 34, ,78n4.3.3循環(huán)程序循環(huán)程序DSRC 324.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 程序流程圖:程序流程圖:假設(shè)有假設(shè)有5 個(gè)數(shù)個(gè)數(shù):22,34,56,12,78一、小循環(huán)一、小循環(huán)1、22與與34比較比較, 2234,不交換位置。不交換位置。2、34與與56比較,比較,3412,交換位置。交換位置。22,34,12,5
39、6,78 打一標(biāo)志。打一標(biāo)志。4、56與與78比較,比較,5678,不交換位置。不交換位置。二、大循環(huán)二、大循環(huán)判斷是否有交換標(biāo)志?判斷是否有交換標(biāo)志?1、有:設(shè)置內(nèi)循環(huán)初始條件重新進(jìn)入、有:設(shè)置內(nèi)循環(huán)初始條件重新進(jìn)入內(nèi)循環(huán)。內(nèi)循環(huán)。2、無(wú):、無(wú): 說(shuō)明已排好順序說(shuō)明已排好順序12,22,34,56,78 結(jié)束程序。結(jié)束程序。n4.3.3循環(huán)程序循環(huán)程序DSRC 332.4匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n2.4.4循環(huán)程序循環(huán)程序DSRC STAK SEGMENT PARA STACK STACK DB 10 DUP(0) STAK ENDSDATA SEGMENTDATBUF DB 22
40、, 35, 18, 54, 10, 88 ;共;共N個(gè)數(shù)據(jù),這里給出的是一組隨機(jī)數(shù)個(gè)數(shù)據(jù),這里給出的是一組隨機(jī)數(shù)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA, SS : STAKSTART: MOV AX,DATA MOV DS,AX MOV CX,N ;要排序的數(shù)據(jù)個(gè)數(shù)送;要排序的數(shù)據(jù)個(gè)數(shù)送CX DEC CX ;外循環(huán)計(jì)數(shù)指針,循環(huán)比較;外循環(huán)計(jì)數(shù)指針,循環(huán)比較N-1遍遍 MOV BL,1 ;設(shè)置交換標(biāo)志,初值為;設(shè)置交換標(biāo)志,初值為1LOOP1: CMP BL,0 JZ DONE ;交換標(biāo)志為;交換標(biāo)志為0,說(shuō)明已排序完畢,說(shuō)明已排序完畢 PUS
41、H CX ;進(jìn)入內(nèi)循環(huán)之前,保存外循環(huán)計(jì)數(shù)值;進(jìn)入內(nèi)循環(huán)之前,保存外循環(huán)計(jì)數(shù)值 MOV BL,0 ;設(shè)置進(jìn)入內(nèi)循環(huán)的初始條件;設(shè)置進(jìn)入內(nèi)循環(huán)的初始條件 MOV SI,OFFSET DATBUF ;SI指向指向DATBUF首地址首地址LOOP2: MOV AL,SI CMP AL,SI+1 ;相臨兩數(shù)比較;相臨兩數(shù)比較 JNA NEXT ;不大于則轉(zhuǎn)下一個(gè);不大于則轉(zhuǎn)下一個(gè) XCHG AL,SI+1 ;否則,交換位置;否則,交換位置 MOV SI,AL MOV BL,1 ;數(shù)據(jù)交換后,交換標(biāo)志置;數(shù)據(jù)交換后,交換標(biāo)志置1NEXT: INC SI ;修正數(shù)的位置,為下一次比較作準(zhǔn)備;修正數(shù)的位置,
42、為下一次比較作準(zhǔn)備 LOOP LOOP2 POP CX ;恢復(fù)外循環(huán)計(jì)數(shù)值;恢復(fù)外循環(huán)計(jì)數(shù)值 LOOP LOOP1DONE: MOV AH,4CH INT 21H CODE ENDS END START342.4匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n子過(guò)程及過(guò)程定義子過(guò)程及過(guò)程定義u 子程序子程序子程序是完成確定功能的獨(dú)立的程序段,它可以被其他程子程序是完成確定功能的獨(dú)立的程序段,它可以被其他程序調(diào)用,在完成確定功能后,又可自動(dòng)返回到調(diào)用程序處。序調(diào)用,在完成確定功能后,又可自動(dòng)返回到調(diào)用程序處。使用子程序的優(yōu)缺點(diǎn):使用子程序的優(yōu)缺點(diǎn):l 避免了程序中多次重復(fù)的書(shū)寫(xiě)程序,節(jié)省了內(nèi)存空間;避免了程
43、序中多次重復(fù)的書(shū)寫(xiě)程序,節(jié)省了內(nèi)存空間;l 由于一些常用的子程序可以事先編好,一旦需要時(shí)可以隨由于一些常用的子程序可以事先編好,一旦需要時(shí)可以隨時(shí)調(diào)用,因而也方便了程序的編制和調(diào)試。時(shí)調(diào)用,因而也方便了程序的編制和調(diào)試。l 但子程序的調(diào)用和返回需要占用時(shí)間,并且子程序通常具但子程序的調(diào)用和返回需要占用時(shí)間,并且子程序通常具有一定的通用性和獨(dú)立性,因此在調(diào)用時(shí),需要保存某些有一定的通用性和獨(dú)立性,因此在調(diào)用時(shí),需要保存某些寄存器的內(nèi)容,以防止子程序運(yùn)行過(guò)程中破壞調(diào)用程序已寄存器的內(nèi)容,以防止子程序運(yùn)行過(guò)程中破壞調(diào)用程序已產(chǎn)生的中間結(jié)果,所以子程序在運(yùn)行時(shí)間上將有所損失。產(chǎn)生的中間結(jié)果,所以子程序
44、在運(yùn)行時(shí)間上將有所損失。DSRC 354.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 調(diào)用子程序的程序通常稱為主程序調(diào)用子程序的程序通常稱為主程序 主程序在調(diào)用子程序時(shí),應(yīng)為子程序提供運(yùn)算所需的初始主程序在調(diào)用子程序時(shí),應(yīng)為子程序提供運(yùn)算所需的初始數(shù)據(jù);而子程序返回時(shí),應(yīng)將運(yùn)算結(jié)果以一定的方式提交數(shù)據(jù);而子程序返回時(shí),應(yīng)將運(yùn)算結(jié)果以一定的方式提交給主程序,通常稱為主程序與子程序之間的參數(shù)傳遞。給主程序,通常稱為主程序與子程序之間的參數(shù)傳遞。n子過(guò)程及過(guò)程定義子過(guò)程及過(guò)程定義DSRC 364.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) u 過(guò)程定義過(guò)程定義用用PROC和和ENDP偽指令定義過(guò)程,格式為:偽指令定
45、義過(guò)程,格式為:過(guò)程名過(guò)程名PROC類(lèi)型類(lèi)型 RET過(guò)程名過(guò)程名ENDP過(guò)程的執(zhí)行是由調(diào)用指令過(guò)程的執(zhí)行是由調(diào)用指令CALL調(diào)用后進(jìn)行的,調(diào)用調(diào)用后進(jìn)行的,調(diào)用FAR類(lèi)類(lèi)型的過(guò)程執(zhí)行段間調(diào)用操作,而調(diào)用型的過(guò)程執(zhí)行段間調(diào)用操作,而調(diào)用NEAR類(lèi)型的過(guò)程執(zhí)行類(lèi)型的過(guò)程執(zhí)行段內(nèi)調(diào)用操作。段內(nèi)調(diào)用操作。返回指令執(zhí)行段內(nèi)返回還是段間返回與過(guò)程的類(lèi)型有關(guān),返回指令執(zhí)行段內(nèi)返回還是段間返回與過(guò)程的類(lèi)型有關(guān),若類(lèi)型為若類(lèi)型為FAR,其相應(yīng)的返回指令執(zhí)行段間返回操作;若,其相應(yīng)的返回指令執(zhí)行段間返回操作;若類(lèi)型為類(lèi)型為NEAR,那么,其返回指令執(zhí)行段內(nèi)返回操作。那么,其返回指令執(zhí)行段內(nèi)返回操作。n子過(guò)程及過(guò)程
46、定義子過(guò)程及過(guò)程定義DSRC 374.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) u子程序的調(diào)用和返回子程序的調(diào)用和返回1、段內(nèi)調(diào)用和返回、段內(nèi)調(diào)用和返回 調(diào)用 程 序 和調(diào)用 程 序 和子程序在同一個(gè)子程序在同一個(gè)代碼段的程序結(jié)代碼段的程序結(jié)構(gòu)構(gòu).注意注意:其中主程序其中主程序,子子程序名自已起程序名自已起.程程序 結(jié) 束 偽 指 令序 結(jié) 束 偽 指 令END后必須跟主后必須跟主程序名程序名n子過(guò)程及過(guò)程定義子過(guò)程及過(guò)程定義DSRC CODE SEGMENTMAIN PROC FAR ;定義;定義MAIN主過(guò)程主過(guò)程 CALL SUB1;段內(nèi)調(diào)用子程序;段內(nèi)調(diào)用子程序SUB1 RET MAIN E
47、NDP SUB1 PROC NEAR ;定義定義SUB1段內(nèi)調(diào)用子程序段內(nèi)調(diào)用子程序 RET SUB1 ENDP CODE ENDS END MAIN 384.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) u子程序的調(diào)用和返回子程序的調(diào)用和返回2、段間調(diào)用和返回、段間調(diào)用和返回 調(diào)用程序和子調(diào)用程序和子程序在不同的代碼程序在不同的代碼段的程序結(jié)構(gòu)段的程序結(jié)構(gòu).注意注意:由于由于SUB2既被段既被段間調(diào)用又被段內(nèi)調(diào)間調(diào)用又被段內(nèi)調(diào)用用,所以必須定義為所以必須定義為FAR屬性屬性,另外程序另外程序結(jié)束偽指令結(jié)束偽指令END后后必須跟主程序名必須跟主程序名.n2.4.5子過(guò)程及過(guò)程定義子過(guò)程及過(guò)程定義DSRC
48、 CODE1 SEGMENTMAIN PROC FAR ;定義;定義MAIN主過(guò)程主過(guò)程 CALL FAR PTR SUB2 RET MAIN ENDP CODE1 ENDS CODE2 SEGMENT SUB1 PROC FAR ;定義定義SUB1段間調(diào)用子程序段間調(diào)用子程序 CALL FAR PTR SUB2 RET SUB1 ENDP SUB2 PROC FAR ;定義定義SUB2段間調(diào)用子程序段間調(diào)用子程序 RET SUB2 ENDP CODE2 ENDS END MAIN 394.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n主程序與子程序之間的參數(shù)傳遞主程序與子程序之間的參數(shù)傳遞主程序在調(diào)
49、用子程序之前需要將某些初始數(shù)據(jù)提交給子程主程序在調(diào)用子程序之前需要將某些初始數(shù)據(jù)提交給子程序,而子程序運(yùn)行結(jié)束后也需將結(jié)果返回主程序,這就是序,而子程序運(yùn)行結(jié)束后也需將結(jié)果返回主程序,這就是兩者之間的參數(shù)傳遞;兩者之間的參數(shù)傳遞;主程序給子程序提供的初始數(shù)據(jù)或獲得初始數(shù)據(jù)的信息稱主程序給子程序提供的初始數(shù)據(jù)或獲得初始數(shù)據(jù)的信息稱為子程序的入口參數(shù);為子程序的入口參數(shù);子程序返回主程序的結(jié)果常稱為子程序的出口參數(shù)。子程序返回主程序的結(jié)果常稱為子程序的出口參數(shù)。 n子過(guò)程及過(guò)程定義子過(guò)程及過(guò)程定義DSRC 404.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n主程序與子程序之間的參數(shù)傳遞主程序與子程序之間
50、的參數(shù)傳遞u 寄存器傳遞參數(shù)方式寄存器傳遞參數(shù)方式寄存器傳遞參數(shù)方式是指子程序的入口參數(shù)和出口參數(shù)都是寄存器傳遞參數(shù)方式是指子程序的入口參數(shù)和出口參數(shù)都是通過(guò)寄存器傳遞的。適用于參數(shù)較少的情況通過(guò)寄存器傳遞的。適用于參數(shù)較少的情況,傳遞速度較快傳遞速度較快.例例n子過(guò)程及過(guò)程定義子過(guò)程及過(guò)程定義DSRC 414.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) ;名稱名稱:BCD2;功能功能:將一個(gè)字節(jié)的壓縮將一個(gè)字節(jié)的壓縮BCD碼轉(zhuǎn)換成二進(jìn)制數(shù)碼轉(zhuǎn)換成二進(jìn)制數(shù);所用寄存器所用寄存器:CX;入口參數(shù)入口參數(shù):AL存放兩位存放兩位BCD碼碼;出口參數(shù)出口參數(shù):AL存放二進(jìn)制數(shù)存放二進(jìn)制數(shù);調(diào)用其它子程序調(diào)用其
51、它子程序;無(wú)無(wú) ;*BCD2 PROC FAR ;保護(hù)現(xiàn)場(chǎng)保護(hù)現(xiàn)場(chǎng) MOV CH, AND CH, 0FH ;存低存低8位位 (保留個(gè)位保留個(gè)位,在在CH中中) MOV CL, 4 SHR AL, CL ;高高8位右移位右移4位位 MOV CL, 10 MUL CL ; 高高8位右移位右移4位后乘位后乘10 (AX=AL*CL) ADD , CH ;高高8位右移位右移4位后乘位后乘10加低加低8位位 ; ;恢復(fù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng) RETBCD2 ENDPn子過(guò)程及過(guò)程定義子過(guò)程及過(guò)程定義DSRC 424.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n子過(guò)程及過(guò)程定義子過(guò)程及過(guò)程定義DSRC 例如例如4-4-
52、5-2寄存器傳遞參數(shù)寄存器傳遞參數(shù).求數(shù)組求數(shù)組ARRAY中所有元素之和中所有元素之和(65535)并存于并存于SUM單元中單元中.STAK SEGMENT PARA STACK STACK DB 100 DUP(?)STAK ENDSDATA SEGMENTARRAY DB 1, 2, 3, 4, 5,6,7,8,9,10,11,12,13,14,15,16COUNT EQU $-ARRAYSUM DW ?DATA ENDSCODE SEGMENT ASSUM CS:CODE, DS:DATA,SS:STAKSTART: MOV AX, DATA MOV DS, AX LEA SI, ARR
53、AY; 入口參數(shù)準(zhǔn)備入口參數(shù)準(zhǔn)備,將需要傳遞的參數(shù)送入寄存器將需要傳遞的參數(shù)送入寄存器 MOV CX, COUNT CALL SUM1 ;調(diào)用子程序求和調(diào)用子程序求和,返回值在返回值在AX中中 MOV SUM, AX ;和存于和存于SUM單元單元 MOV AH, 4CH ;返回返回DOS INT 21H434.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) n子過(guò)程及過(guò)程定義子過(guò)程及過(guò)程定義DSRC ;名稱名稱:SUM1;功能功能:求字節(jié)數(shù)組和求字節(jié)數(shù)組和.;所用寄存器所用寄存器:AX,CX,SI;入口參數(shù)入口參數(shù):SI=數(shù)組首址數(shù)組首址,CX=數(shù)組長(zhǎng)度數(shù)組長(zhǎng)度;出口參數(shù)出口參數(shù):AX=數(shù)組和數(shù)組和;調(diào)用
54、其它子程序調(diào)用其它子程序;無(wú)無(wú);* SUM1 PROC NEAR MOV AX , 0 ;數(shù)組和通過(guò)數(shù)組和通過(guò)AX寄存器回送到主程序寄存器回送到主程序 AGAIN: ADD AL, SI ADC AH, 0 INC SI LOOP AGAIN RET SUM1 ENDP CODE ENDS END START 444.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) u 指定內(nèi)存單元參數(shù)傳遞方式指定內(nèi)存單元參數(shù)傳遞方式 參數(shù)直接通過(guò)內(nèi)存單元傳遞。參數(shù)直接通過(guò)內(nèi)存單元傳遞。主程序在調(diào)用前應(yīng)將子程序中所用的數(shù)據(jù)送入指定數(shù)據(jù)區(qū),主程序在調(diào)用前應(yīng)將子程序中所用的數(shù)據(jù)送入指定數(shù)據(jù)區(qū),所需結(jié)果也從指定數(shù)據(jù)區(qū)中取。所需結(jié)
55、果也從指定數(shù)據(jù)區(qū)中取。在進(jìn)入子程序后,子程序則直接從指定數(shù)據(jù)區(qū)中取數(shù)據(jù)和在進(jìn)入子程序后,子程序則直接從指定數(shù)據(jù)區(qū)中取數(shù)據(jù)和存放結(jié)果。此時(shí),子程序必須指出它所用的指定內(nèi)存區(qū)的存放結(jié)果。此時(shí),子程序必須指出它所用的指定內(nèi)存區(qū)的段及有關(guān)變量。段及有關(guān)變量。當(dāng)子程序中所用的數(shù)據(jù)量比較大時(shí),調(diào)用前數(shù)據(jù)轉(zhuǎn)移的工當(dāng)子程序中所用的數(shù)據(jù)量比較大時(shí),調(diào)用前數(shù)據(jù)轉(zhuǎn)移的工作量就比較大,因此指定內(nèi)存單元傳遞參數(shù)的另一種方法作量就比較大,因此指定內(nèi)存單元傳遞參數(shù)的另一種方法是分別在指定單元中存放數(shù)據(jù)的首地址和數(shù)據(jù)長(zhǎng)度,而不是分別在指定單元中存放數(shù)據(jù)的首地址和數(shù)據(jù)長(zhǎng)度,而不是數(shù)據(jù)本身。是數(shù)據(jù)本身。 n子過(guò)程及過(guò)程定義子過(guò)程及過(guò)程定義DSRC 454.3匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) u 指定內(nèi)存單元參數(shù)傳遞方式指定內(nèi)存單元參數(shù)傳遞方式 例例:數(shù)據(jù)段定義二個(gè)數(shù)組數(shù)據(jù)段定義二個(gè)數(shù)組,編寫(xiě)程序?qū)崿F(xiàn)數(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度呈現(xiàn)合集員工管理篇
- 單位管理制度呈現(xiàn)大合集人員管理篇
- 工作轉(zhuǎn)正自我鑒定4篇
- 3D打印在計(jì)算機(jī)維修中的創(chuàng)新應(yīng)用
- 《用色彩畫(huà)心情》課件
- 第3單元+中國(guó)特色社會(huì)主義道路
- 物流行業(yè)顧問(wèn)工作總結(jié)
- 乒乓球比賽的作文匯編10篇
- 輸液室護(hù)士的職責(zé)概述
- 游樂(lè)園前臺(tái)服務(wù)感悟
- 2024時(shí)事政治考試題庫(kù)附參考答案(黃金題型)
- 2024年新“國(guó)九條”及配套政策要點(diǎn)解讀分析報(bào)告
- 2024-2029年中國(guó)大健康行業(yè)市場(chǎng)發(fā)展現(xiàn)狀分析及發(fā)展趨勢(shì)與投資戰(zhàn)略規(guī)劃報(bào)告
- 超星爾雅學(xué)習(xí)通《藝術(shù)哲學(xué)美是如何誕生的(同濟(jì)大學(xué))》2024章節(jié)測(cè)試答案
- 全國(guó)醫(yī)院數(shù)量統(tǒng)計(jì)
- (2024年)長(zhǎng)歌行漢樂(lè)府古詩(shī)PPT語(yǔ)文課件
- GB/T 43674-2024加氫站通用要求
- 倉(cāng)庫(kù)班長(zhǎng)年終總結(jié)及工作計(jì)劃
- 部編人教版二年級(jí)勞動(dòng)教育上冊(cè)期末試卷(帶答案)
- 肛門(mén)手術(shù)的鎮(zhèn)痛研課件
- 中山醫(yī)院報(bào)告查詢app
評(píng)論
0/150
提交評(píng)論