版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第5章章 程序設(shè)計(jì)方法程序設(shè)計(jì)方法5.1 概概 述述5.2 順序程序設(shè)計(jì)順序程序設(shè)計(jì)5.3 循環(huán)程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)5.4 分支程序設(shè)計(jì)分支程序設(shè)計(jì)5.5 子程序設(shè)計(jì)子程序設(shè)計(jì)5.6 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)5.7 高級(jí)匯編語(yǔ)言技術(shù)高級(jí)匯編語(yǔ)言技術(shù)5.1 概述概述5.1.1 匯編語(yǔ)言程序設(shè)計(jì)的一般步匯編語(yǔ)言程序設(shè)計(jì)的一般步驟驟5.1.2 流程圖流程圖5.1.1 匯編語(yǔ)言程序設(shè)計(jì)的一般步匯編語(yǔ)言程序設(shè)計(jì)的一般步驟驟匯編語(yǔ)言程序設(shè)計(jì)一般有以下幾個(gè)步匯編語(yǔ)言程序設(shè)計(jì)一般有以下幾個(gè)步驟:驟:1分析問(wèn)題,確定算法分析問(wèn)題,確定算法 數(shù)據(jù)段、變數(shù)據(jù)段、變量等量等2繪制流程圖繪制流程圖3根據(jù)流程圖編制
2、程序根據(jù)流程圖編制程序4調(diào)試程序調(diào)試程序5.1.2 流程圖流程圖1流程圖的概念流程圖的概念流程圖是由特定的幾何圖形、指向線、文流程圖是由特定的幾何圖形、指向線、文字說(shuō)明來(lái)表示數(shù)據(jù)處理的步驟,形象描述字說(shuō)明來(lái)表示數(shù)據(jù)處理的步驟,形象描述邏輯控制結(jié)構(gòu)以及數(shù)據(jù)流程的示意圖。流邏輯控制結(jié)構(gòu)以及數(shù)據(jù)流程的示意圖。流程圖具有簡(jiǎn)潔、明了、直觀的特點(diǎn)。程圖具有簡(jiǎn)潔、明了、直觀的特點(diǎn)。2流程圖符號(hào)表示流程圖符號(hào)表示(1起止框:表示程序起止框:表示程序的開(kāi)始和結(jié)束。的開(kāi)始和結(jié)束。起止框起止框(2判斷框判斷框 (3處理框處理框 (4調(diào)用框調(diào)用框 (5指向線指向線 (6連接框連接框 5.2 順序程序設(shè)計(jì)順序程序設(shè)計(jì)下
3、面舉例說(shuō)明順序程序的設(shè)計(jì)。下面舉例說(shuō)明順序程序的設(shè)計(jì)?!纠吭嚲帉?xiě)一程序計(jì)算以下表達(dá)式的【例】試編寫(xiě)一程序計(jì)算以下表達(dá)式的值。值。=(v-(*+-540)/x式中式中x、v均為有符號(hào)字?jǐn)?shù)據(jù)。均為有符號(hào)字?jǐn)?shù)據(jù)。設(shè)設(shè) x, y, z, v 的值存放在字變量、的值存放在字變量、V中,結(jié)果存放在雙字變量之中,結(jié)果存放在雙字變量之中,程序的流程圖如圖中,程序的流程圖如圖5.1所示。所示。圖圖5.1 5.1 順序運(yùn)算程序流程圖順序運(yùn)算程序流程圖=(v-(*+-540)/xDATASEGMENTX DW200Y DW100Z DW 3000V DW10000W DW 2 DUP(?)(?)DATAENDSC
4、ODESEGMENTASSUME DS:DATA,CS:CODEMIAN PROC FARSTART: MOVAX,DATAMOVDS,AX ;DATAAXMOVAX,X IMULY;(;(X)*(Y)DX:AXMOVCX,AXMOVBX,DX ;(DX:AX)(BX:CX)MOVAX,ZCWD;(;(Z符號(hào)擴(kuò)展符號(hào)擴(kuò)展CWD;(;(V符號(hào)擴(kuò)展符號(hào)擴(kuò)展SUB AX,CXSBB DX,BX;(DX:AX)-(BX:CX)(DX:AX)DIV X;(;(DX:AX)/XADD CX,AXADC BX,DX;(BX:CX)+(DX:AX)(BX:CX)SUB CX,540SBB BX,0;(;(BX
5、:CX)-550(BX:CX)MOVAX,V MOV W,AX;商;商WMOV W+2,DX ;余數(shù);余數(shù)DXW+2MOV AH,4CHINT21HMIAN ENDPCODEENDS;退出;退出DOS 狀態(tài)狀態(tài)END START【例】【例】已知某班學(xué)生的英語(yǔ)成績(jī)按學(xué)號(hào)從已知某班學(xué)生的英語(yǔ)成績(jī)按學(xué)號(hào)從1/0開(kāi)始從小到大的順序排列在開(kāi)始從小到大的順序排列在TAB表中,要查的學(xué)生的學(xué)號(hào)放在表中,要查的學(xué)生的學(xué)號(hào)放在變量變量NO中,查表結(jié)果放在變量中,查表結(jié)果放在變量ENGLISH中。編寫(xiě)程序如下:中。編寫(xiě)程序如下:STACKSEGMENT STACKDB 200 DUP0)STACKENDSDATA
6、SEGMENTTAB DB 80,85,86,71,79,96 DB 83,56,32,66,78,85NO DB 10ENGLIST DB ?DATAENDSCODESEGMENTASSUME DS:DATA, SS: STACK,CS: CODEMAIN PROC FARBEGIN:MOVAX,DATAMOVDS ,AXLEABX,TAB MOVAL,NO80858510-TABNOENGLISTDEL ALXLATTABMOVENGLISH,ALMOVAH,4CHINT 21HMAIN ENDPCODEENDSEND BEGIN80858510-TABNOENGLIST5.3 循環(huán)程序設(shè)
7、計(jì)循環(huán)程序設(shè)計(jì)5.3.1 循環(huán)程序的結(jié)構(gòu)循環(huán)程序的結(jié)構(gòu)5.3.2 單重循環(huán)程序設(shè)計(jì)單重循環(huán)程序設(shè)計(jì)5.3.3 多重循環(huán)程序設(shè)計(jì)多重循環(huán)程序設(shè)計(jì)5.3.1 循環(huán)程序的結(jié)構(gòu)循環(huán)程序的結(jié)構(gòu)1初始化部分初始化部分2循環(huán)體部分循環(huán)體部分3循環(huán)控制部分循環(huán)控制部分LOOP指令指令條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令循環(huán)常見(jiàn)結(jié)構(gòu)如圖所示。循環(huán)常見(jiàn)結(jié)構(gòu)如圖所示。5.3.2 單重循環(huán)程序設(shè)計(jì)單重循環(huán)程序設(shè)計(jì)1計(jì)數(shù)控制計(jì)數(shù)控制 已知循環(huán)次數(shù)已知循環(huán)次數(shù) 類似類似FOR語(yǔ)句語(yǔ)句2條件控制條件控制 通過(guò)某條件控制通過(guò)某條件控制 如:當(dāng)某數(shù)不為零時(shí)循環(huán)如:當(dāng)某數(shù)不為零時(shí)循環(huán) 類似類似WHILE語(yǔ)句語(yǔ)句【例】【例】 試編一程序,把試
8、編一程序,把BX寄存器內(nèi)的二進(jìn)制數(shù)寄存器內(nèi)的二進(jìn)制數(shù)用十六進(jìn)制的形式在屏幕上顯示出來(lái)用十六進(jìn)制的形式在屏幕上顯示出來(lái)1.四位一組轉(zhuǎn)換成十六進(jìn)制四位一組轉(zhuǎn)換成十六進(jìn)制11010101B=D5H2.在屏幕上顯示時(shí),要使用在屏幕上顯示時(shí),要使用ASCII碼碼要顯示要顯示D5必須轉(zhuǎn)成必須轉(zhuǎn)成 44H 35H3.分離十六進(jìn)制的每一位,先輸出最高位分離十六進(jìn)制的每一位,先輸出最高位4.使用使用DOS功能調(diào)用功能調(diào)用 02功能功能 要輸入的字符的要輸入的字符的ASCII碼存入碼存入DL中,功能號(hào)送中,功能號(hào)送AH中中MOV DL,S MOV AH,02 INT 21H 0101 0000 011000111
9、101 00110101 00110000 00110110 3D 35 30 36 ? 5 0 6 44H DD 5 0 6PROGNAME SEGMENTMAIN PROC FARASSUME CS: PROGNAMESTART: PUSH DS SUB AX,AX;AX=0 PUSH AX MOV CH, 4;循環(huán)次數(shù)循環(huán)次數(shù)ROTATE: MOV CL, 4 ; BX=D506H ROL BX, CL ; BX=506DHMOV AL, BL ; BL=6DHAND AL, 0FH ; AL=0DHADD AL, 30H ; AL=3DHCMP AL,3AHJL PRINITADD A
10、L,07H ;AL=3D+07=44HPRINIT: MOV DL, AL ; DL=44HMOV AH, 02HINT 21H ; 在屏幕上輸出在屏幕上輸出DDEC CH;JNZ ROTATE;處理下四個(gè)二進(jìn)制位;處理下四個(gè)二進(jìn)制位RETMAIN ENDPPROGNAME ENDSEND START例:在例:在ADDR單元中存放著數(shù)單元中存放著數(shù)Y的地址,試編的地址,試編制一程序把制一程序把Y中的中的1的個(gè)數(shù)存入的個(gè)數(shù)存入COUNT單元中單元中Y=0 ? 如果如果Y=0則則1的個(gè)數(shù)是的個(gè)數(shù)是0否則,按位判斷否則,按位判斷移位指令移位指令 SF CF Y01101 0101 0010 0110
11、0011010 1010 0100 110001DATA SEGMENTADDR DW NUMBERNUMBER DW 1101010100100110BCOUNT DW ?DATA ENDSMOV CX,0 ; CX做計(jì)數(shù)器做計(jì)數(shù)器MOV BX, ADDR ; BX中存放數(shù)字的地址中存放數(shù)字的地址MOV AX,BX ; AX 中存放二進(jìn)制數(shù)中存放二進(jìn)制數(shù)REPEAT: TEST AX, FFFFH JZ EXIT;如果如果AX=0則結(jié)束則結(jié)束 JNS SHIIFT;SF=0則看下一位則看下一位 INC CX ;SF=1 計(jì)數(shù)器加計(jì)數(shù)器加1 SHIFT: SHL AX,1 JMP REPEAT
12、 附加段中,有一個(gè)首地址為附加段中,有一個(gè)首地址為L(zhǎng)IST的未的未經(jīng)排序的字?jǐn)?shù)組,數(shù)組的第一個(gè)字中,存放經(jīng)排序的字?jǐn)?shù)組,數(shù)組的第一個(gè)字中,存放著數(shù)組的長(zhǎng)度,首地址已經(jīng)存入著數(shù)組的長(zhǎng)度,首地址已經(jīng)存入DI寄存器中,寄存器中,AX中存放著一個(gè)數(shù)。要求編程序,在數(shù)組中存放著一個(gè)數(shù)。要求編程序,在數(shù)組中查找該數(shù),如果找到刪除中查找該數(shù),如果找到刪除71820157911LISTAX=20DI6432105CX=7例:例:DEL_UL PROC NEAR CLD PUSH DI MOV CX, ES:DI;數(shù)組中元素個(gè)數(shù)送數(shù)組中元素個(gè)數(shù)送CX ADD DI,2; 指向第一個(gè)元素指向第一個(gè)元素 REPNE
13、 SCASW;串掃描;串掃描 AL-ES:DI JE DELETE ;找到數(shù)據(jù),刪除之找到數(shù)據(jù),刪除之 POP DI ;沒(méi)找到數(shù)據(jù),還原沒(méi)找到數(shù)據(jù),還原DI的值的值 JMP SHORT EXIT CX 表示還未檢查的元素的表示還未檢查的元素的個(gè)數(shù)個(gè)數(shù)DI 相匹配元素的下一個(gè)元相匹配元素的下一個(gè)元素的地址素的地址DELETE: JCXZ DEC_CNT;數(shù)組在最后一位數(shù)組在最后一位NEXT_EL: MOV BX, ES:DI MOV ES:DI-2,BX ADD DI,2 LOOP NEXT_EL;循環(huán)次數(shù)循環(huán)次數(shù)CXDEC_CNT:POP DI;修改數(shù)據(jù)個(gè)數(shù)修改數(shù)據(jù)個(gè)數(shù) DEC WORD PT
14、R ES:DIEXIT: RETDEL_UL ENDP71820157911LISTAX=20DI6432105CX=77181515791171815779117181579911718157911116123910171921HEAD61239101719212161239101719192161239101717192161239101017192161236910171921NSIEND例:在已排序的數(shù)組的適當(dāng)位置插入數(shù)據(jù)例:在已排序的數(shù)組的適當(dāng)位置插入數(shù)據(jù)MOV AX, 6MOV ARRAY_HEAD-2,FFFFH;X單元存入單元存入-1MOV SI,0COMPARE: CMP A
15、RRAY_ENDSI, AX JLE INSERT MOV BX, ARRAY_ENDSI MOV ARRAY_ENDSI+2,BX SUB SI, 2 JMP COMPARE INSERT: MOV ARRAY_ENDSI+2, AX 12369SISI+2SI-2=SI5.3.3 多重循環(huán)程序設(shè)計(jì)多重循環(huán)程序設(shè)計(jì)【例】在以【例】在以A A為首址的字存儲(chǔ)區(qū)中存放有為首址的字存儲(chǔ)區(qū)中存放有N N個(gè)有符個(gè)有符號(hào)數(shù),編寫(xiě)其程序?qū)⑺鼈儼创蟮叫〉捻樞蚺帕刑?hào)數(shù),編寫(xiě)其程序?qū)⑺鼈儼创蟮叫〉捻樞蚺帕性谠贏 A存儲(chǔ)區(qū)中存儲(chǔ)區(qū)中我們采用冒泡排序算法從第一個(gè)數(shù)開(kāi)始依次對(duì)我們采用冒泡排序算法從第一個(gè)數(shù)開(kāi)始依次對(duì)相鄰
16、兩個(gè)數(shù)進(jìn)行比較,如次序?qū)?,則不交換兩相鄰兩個(gè)數(shù)進(jìn)行比較,如次序?qū)?,則不交換兩數(shù)位置;如次序不對(duì)數(shù)位置;如次序不對(duì), ,則使這兩個(gè)數(shù)交換位置。則使這兩個(gè)數(shù)交換位置??梢钥闯?,第一遍需比較可以看出,第一遍需比較N-1N-1次,此時(shí),次,此時(shí),最小的數(shù)已經(jīng)放到了最后;第二遍比較只需考最小的數(shù)已經(jīng)放到了最后;第二遍比較只需考慮剩下的慮剩下的N-1N-1個(gè)數(shù),即只需比較個(gè)數(shù),即只需比較N-2N-2次;次;第三遍只需比較第三遍只需比較N-3N-3次,次,整個(gè)排序過(guò)整個(gè)排序過(guò)程最多需程最多需N-1N-1遍。遍。數(shù)數(shù)108169032第一遍第一遍108169032 10 168 90 32 10 16 90
17、8 32 10 16 90 32 8 第二遍第二遍169032108第三遍第三遍903216108如下面的如下面的5 5個(gè)數(shù)即是采用冒泡排序比較的例子。個(gè)數(shù)即是采用冒泡排序比較的例子。DATASEGMENTADW 3,-5,6,7,9,2,0,-8, -9,-10,20N=(-A)/2DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX MOV CX,N DEC CXLOOP1:MOVDI,CX;保存外循環(huán)次數(shù)保存外循環(huán)次數(shù) MOVBX,0;?內(nèi)循環(huán)次數(shù)內(nèi)循環(huán)次數(shù)LOOP2:MOVAX,ABX CMPAX,AB
18、X+2 JGECONTINUE XCHG AX,ABX+2 MOV ABX,AX108CONTINU:ADDBX,2 DECCX; JNE LOOP2;LOOP LOOP2 MOVCX,DI LOOPLOOP1 MOVAH,4CH INT 21HCODE ENDSEND START程序運(yùn)行后,程序運(yùn)行后,A中的內(nèi)容如下:中的內(nèi)容如下:20,9,7,6,3,2,0,-5,-8,-9,-10若要對(duì)若要對(duì)N個(gè)無(wú)符號(hào)數(shù)按由大到小的順序個(gè)無(wú)符號(hào)數(shù)按由大到小的順序排列,只需將指令排列,只需將指令“JGE ”改為改為“JAE ”即可。即可。 5.4 分支程序設(shè)計(jì)分支程序設(shè)計(jì)5.4.1 用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序
19、分支用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序分支5.4.2 用跳轉(zhuǎn)表實(shí)現(xiàn)多路分支用跳轉(zhuǎn)表實(shí)現(xiàn)多路分支5.4.1 用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序分支用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序分支編寫(xiě)計(jì)算下面函數(shù)值的程序:編寫(xiě)計(jì)算下面函數(shù)值的程序: 1X0Y= 0X=0 -1XHIGHLOW,HIGH初始化初始化CF=0 查找不成功,查找不成功,Y CF=0退出退出N計(jì)算中間元素下標(biāo)計(jì)算中間元素下標(biāo)MID=LOW+HIGH/2AX=RMID= 勝利勝利LOW=MID+1HIGH=MID-19表示不合法輸入表示不合法輸入 CBW;AL擴(kuò)展到擴(kuò)展到AX XCHG AX, BX ; AX=0 BX=MMOV CX, 10MUL CX; XCHG A
20、X,BX; BX=0 AX=MADD BX, AX; BX=0+MJMP NEW CHAR EXIT: RETDECIBIN ENDP十進(jìn)制數(shù)十進(jìn)制數(shù):1234=(010+1) 10+2) 10+3) 10+4十六進(jìn)制:十六進(jìn)制:=(0A+1) A+2) A+3) A+4=(A+2) A+3) A+4=(CA+3)A+4 =7BA+4=04D2實(shí)際是利用計(jì)算機(jī)內(nèi)部按實(shí)際是利用計(jì)算機(jī)內(nèi)部按16進(jìn)制計(jì)算的結(jié)果。進(jìn)制計(jì)算的結(jié)果。(0 A+D1)A+D2)A+D3) A+D4CRLF PROC NEAR MOV DL,0DH MOV AH,02H INT 21H ;輸出回車符輸出回車符 MOV DL,
21、0AH MOV AH,02H INT 21H;輸出換行符;輸出換行符 RETCRLF ENDP 回車換行子程序回車換行子程序BINIHEX PROC NEAR MOV CH,4ROTATE:MOV CL,4 ROL BX,4 MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL PRINTIT ADD AL,07HPRINTIT: MOV DL,AL MOV AH,02H INT 21H DEC CH JNZ ROTATERETBINIHEX ENDP2.同一個(gè)代碼段中可以通過(guò)變量傳參同一個(gè)代碼段中可以通過(guò)變量傳參DATA SEGMENT ARY DW 1
22、00 DUP(?) COUNT DW 100SUM DW ?DATA ENDSCODE SEGMENTMAIN PROC FAR ASSUME CS: CODE ,DS:DATASATART: PUSH DS XOR AX,AX PUSH AX MOV AX, DATA MOV DS, AX CALL NEAR PTR PROADD :;:;prntsum RETMAIN ENDPPROADD PROC NEAR PUSH AX PUSH CX PUSH SI LEA SI, ARY MOV CX, COUNT XOR AX,AXNEXT: ADD AX,SI ADD SI,2 LOOP NE
23、XTMOV SUM ,AXPOP SIPOP CXPOP AXRETPROADD ENDPCODE ENDS END START5.7 高級(jí)匯編語(yǔ)言技術(shù)高級(jí)匯編語(yǔ)言技術(shù)5.7.1 宏指令宏指令5.7.2 宏指令的使用過(guò)程宏指令的使用過(guò)程5.7.3 宏操作符宏操作符5.7.4 局部符號(hào)偽指令局部符號(hào)偽指令LOCAL5.7.5 宏庫(kù)的使用宏庫(kù)的使用5.7.6 重復(fù)匯編重復(fù)匯編5.7.7 條件匯編條件匯編5.7.1 宏指令宏指令在匯編語(yǔ)言程序設(shè)計(jì)過(guò)程中,可以將具在匯編語(yǔ)言程序設(shè)計(jì)過(guò)程中,可以將具有一定功能,需多次重復(fù)使用,且比較有一定功能,需多次重復(fù)使用,且比較短的程序段定義成一條宏指令。短的程序段
24、定義成一條宏指令。使用宏指令語(yǔ)句可以減少程序書(shū)寫(xiě)錯(cuò)誤,使用宏指令語(yǔ)句可以減少程序書(shū)寫(xiě)錯(cuò)誤,縮短源程序長(zhǎng)度,使源程序編寫(xiě)像高級(jí)縮短源程序長(zhǎng)度,使源程序編寫(xiě)像高級(jí)語(yǔ)言一樣清晰、簡(jiǎn)潔。特別是使用宏庫(kù)語(yǔ)言一樣清晰、簡(jiǎn)潔。特別是使用宏庫(kù)后,可以提高編程效率。后,可以提高編程效率。5.7.2 宏指令的使用過(guò)程宏指令的使用過(guò)程1宏定義宏定義2宏調(diào)用宏調(diào)用3宏擴(kuò)展宏擴(kuò)展1宏定義宏定義(1帶參宏定義帶參宏定義宏指令名宏指令名 MACRO 形參形參1,形參,形參2, .宏體宏體 ENDM(2無(wú)參宏定義無(wú)參宏定義宏指令名宏指令名 MACRO . 宏體宏體 ENDM注:宏指令名即宏的名稱,第一個(gè)字符必須是字注:宏指令
25、名即宏的名稱,第一個(gè)字符必須是字母,其后可以是字母、數(shù)字、下劃線母,其后可以是字母、數(shù)字、下劃線例子:定義一個(gè)宏,完成輸出緩例子:定義一個(gè)宏,完成輸出緩沖區(qū)字符串的功能沖區(qū)字符串的功能print MACRO bufoffset lea dx,bufoffset mov ah,09 int 21h ENDM無(wú)參數(shù)宏無(wú)參數(shù)宏INITSR MACROMOV AX,DATA1MOV DS,AXMOV AX,DATA2MOV ES,AX ENDM2宏調(diào)用宏調(diào)用格式:格式:宏指令名宏指令名 實(shí)參實(shí)參1,實(shí)參,實(shí)參2,例:對(duì)上面的宏定義的三種調(diào)用形式為:例:對(duì)上面的宏定義的三種調(diào)用形式為:PRINTBUF1
26、 ;宏必須先定義再使用,通常;宏必須先定義再使用,通常 ;將宏寫(xiě)在所有代碼之前;將宏寫(xiě)在所有代碼之前PRINTBUF2PRINTBUF33宏擴(kuò)展宏擴(kuò)展+ LEA DX,BUF1+ MOV AH,9+ INT 21H+ LEA DX, BUF2+ MOV AH,9+ INT 21H + LEADX,BUF3+ MOVAH,9+ INT 21H例如:上面三次宏調(diào)用,其展開(kāi)的形式為:例如:上面三次宏調(diào)用,其展開(kāi)的形式為: 在對(duì)源程序匯編時(shí),匯編程序在對(duì)源程序匯編時(shí),匯編程序?qū)γ總€(gè)宏調(diào)用進(jìn)行展開(kāi),列表對(duì)每個(gè)宏調(diào)用進(jìn)行展開(kāi),列表文件會(huì)在宏展開(kāi)指令前用文件會(huì)在宏展開(kāi)指令前用“+”號(hào)指示。在宏展開(kāi)時(shí),用實(shí)際
27、號(hào)指示。在宏展開(kāi)時(shí),用實(shí)際參數(shù)取代形式參數(shù)。不要求形參數(shù)取代形式參數(shù)。不要求形參實(shí)參個(gè)數(shù)相等。實(shí)參多,則參實(shí)參個(gè)數(shù)相等。實(shí)參多,則多余實(shí)參不予考慮;若形參多,多余實(shí)參不予考慮;若形參多,則多余形參做則多余形參做“空處置??仗幹?。實(shí)參取代形參時(shí),必須符合匯實(shí)參取代形參時(shí),必須符合匯編指令格式,否則會(huì)提示錯(cuò)誤。編指令格式,否則會(huì)提示錯(cuò)誤。宏的特點(diǎn)宏的特點(diǎn)宏調(diào)用時(shí)可以用實(shí)參代替形參,避免了子程宏調(diào)用時(shí)可以用實(shí)參代替形參,避免了子程序引傳遞參數(shù)帶來(lái)的麻煩。序引傳遞參數(shù)帶來(lái)的麻煩。參數(shù)可以是常數(shù)、寄存器、存儲(chǔ)單元等,甚參數(shù)可以是常數(shù)、寄存器、存儲(chǔ)單元等,甚至可以是指令的操作碼或操作碼的一部分至可以是指令
28、的操作碼或操作碼的一部分工作方式與子程序不同:工作方式與子程序不同:子程序占有自身大小的空間,執(zhí)行時(shí)由主程子程序占有自身大小的空間,執(zhí)行時(shí)由主程序調(diào)用;序調(diào)用;宏則在匯編期間展開(kāi),調(diào)用一次展開(kāi)一次,宏則在匯編期間展開(kāi),調(diào)用一次展開(kāi)一次,因此所占空間也隨著調(diào)用次數(shù)而增大因此所占空間也隨著調(diào)用次數(shù)而增大總結(jié)子程序與宏的異同點(diǎn)總結(jié)子程序與宏的異同點(diǎn)5.7.3 宏定義中的參數(shù)宏定義中的參數(shù)1.可以無(wú)參數(shù)可以無(wú)參數(shù) 例例P2492.可以是操作碼可以是操作碼 、操作數(shù)等、操作數(shù)等例:在程序中定義大小及初值不同的堆棧段。例:在程序中定義大小及初值不同的堆棧段。宏定義如下:宏定義如下:DSTACKMACRO
29、ASTACKSEGMENT STACKDBA dup (?)STACKENDSENDM宏定義:宏定義: FOO MACRO P1,P2,P3 MOV AX,P1 P2 P3 ENDM宏調(diào)用:宏調(diào)用: FOO bx,mul,bx; FOO bx, add, 4宏展開(kāi):宏展開(kāi):mov ax,bx mul bxmov ax,bxadd 4FOO BL3.參數(shù)可以是操作碼或操作數(shù)的一部分,必參數(shù)可以是操作碼或操作數(shù)的一部分,必須在宏定義體中用須在宏定義體中用&作為分隔符作為分隔符&作為形參前綴,把其前后兩個(gè)符號(hào)合并形作為形參前綴,把其前后兩個(gè)符號(hào)合并形成一個(gè)符號(hào),這個(gè)符號(hào)可以是操作碼操
30、作成一個(gè)符號(hào),這個(gè)符號(hào)可以是操作碼操作數(shù)或是一個(gè)字符串?dāng)?shù)或是一個(gè)字符串FO MACRO CON, P1 J&CON STR&P1 ENDMMSG MACRO LAB,NUM,XYZ LAB&NUM DB HELLO, MR&XYZ ENDMFO E, 3展開(kāi):展開(kāi):JE STR3MSG BUF,1,RIGHT展開(kāi):展開(kāi):BUF1 DB “HELLO MR RIGHT”4.%操作符操作符匯編程序?qū)R編程序?qū)?后面的表達(dá)式轉(zhuǎn)換成當(dāng)前基數(shù)后面的表達(dá)式轉(zhuǎn)換成當(dāng)前基數(shù)下的數(shù)。宏調(diào)用時(shí)使用下的數(shù)。宏調(diào)用時(shí)使用msg macro count,string msg&co
31、unt db string endmerrmsg macro text cntr=cntr+1;程序中定義的常量初值程序中定義的常量初值 msg %cntr,text ;在一個(gè)宏定義體中調(diào)在一個(gè)宏定義體中調(diào) ;用另一個(gè)已定義的宏用另一個(gè)已定義的宏 endmDATA1MACRO A, B, C, D DW A, B, CDBD DUP0)ENDM如果宏調(diào)用為:如果宏調(diào)用為:X=10Y=20DATA1%X+2, 5,%X+Y, %Y-5DATA1X+2, 5, X+Y, Y-5則相應(yīng)的宏擴(kuò)展為:則相應(yīng)的宏擴(kuò)展為:+ DW12, 5, 30+ DB 15 DUP0)+ DWX+2, 5, X+Y+
32、DB Y-5 DUP (0)5.7.4 局部符號(hào)偽指令局部符號(hào)偽指令LOCAL當(dāng)宏中使用了標(biāo)號(hào),當(dāng)宏中使用了標(biāo)號(hào),在多次宏調(diào)用后就會(huì)出現(xiàn)多個(gè)在多次宏調(diào)用后就會(huì)出現(xiàn)多個(gè)重復(fù)標(biāo)號(hào),這是不允許的。重復(fù)標(biāo)號(hào),這是不允許的。Local可以解決此問(wèn)題。可以解決此問(wèn)題。格式:格式:Local 標(biāo)號(hào)列表標(biāo)號(hào)列表;宏定義中出現(xiàn)的標(biāo)號(hào);宏定義中出現(xiàn)的標(biāo)號(hào)注:必須是宏定義體的第一句。注:必須是宏定義體的第一句。SUM MACROX,Y LOCALL MOVCX,X MOV BX,Y MOVAX,0L: ADD AX,BX INCBX LOOP L ENDM 兩次調(diào)用宏指令如下:兩次調(diào)用宏指令如下:SUM100,1S
33、UM50,1則宏擴(kuò)展形式為:則宏擴(kuò)展形式為:MOVCX,100MOVBX,1MOVAX,0?0000:ADD AX,BXINCBXLOOP ?0000MOVCX,50MOVBX,10MOVAX,0?0001:ADD AX,BX INCBXLOOP ?00015.7.5 宏庫(kù)的使用宏庫(kù)的使用引入宏庫(kù)的語(yǔ)句格式:引入宏庫(kù)的語(yǔ)句格式:INCLUDE 庫(kù)文件名庫(kù)文件名;include mymacro.lib宏庫(kù)文件的建立:將包含宏的宏庫(kù)文件的建立:將包含宏的文件存成文件存成.lib類型的文件類型的文件即可。即可。假設(shè)已建立一名為假設(shè)已建立一名為MACRO.LIB的宏庫(kù),其內(nèi)容如下:的宏庫(kù),其內(nèi)容如下:
34、INPUTMACROALEADX,AMOVAH,10;10號(hào)系統(tǒng)功能調(diào)用號(hào)系統(tǒng)功能調(diào)用INT21HENDMPRINTMACROALEADX,AMOVAH,9;9號(hào)系統(tǒng)功能調(diào)用號(hào)系統(tǒng)功能調(diào)用INT21HENDMRETURNMACRO MOVAH,2MOVDL,0AHINT21HMOVDL,0DH;回車換行;回車換行INT21HENDMOUT2MACROAMOVDL,AMOVAH,2 ;2號(hào)系統(tǒng)功能調(diào)用號(hào)系統(tǒng)功能調(diào)用INT21HENDMSTACK0 MACRO ASTACKSEGMENTSTACKDBASTACKENDSENDM現(xiàn)要從鍵盤(pán)輸入一串字符到系統(tǒng)緩沖區(qū),現(xiàn)要從鍵盤(pán)輸入一串字符到系統(tǒng)緩沖區(qū)
35、,然后將字符按相反順序打印,然后將字符按相反順序打印,采用調(diào)用宏庫(kù)的辦法,其程序采用調(diào)用宏庫(kù)的辦法,其程序如下:如下:INCLUDEMACRO.LIBSTACK0200DUP (0) ;定義堆棧;定義堆棧段段DATASEGMENTINF01DBINPUT STRING:INF02DBOUTPUT STRING:BUFADB81DB?DB80 DUP0)BUFBDB 81 DUP0)DATAENDSCODESEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATAMOVDS,AXRETURN;輸出回車換行;輸出回車換行PRINT INFO1 ;輸出字符變量;輸出字符變量INFO1代表的代表的字符串字符串INPUT BUFA;鍵盤(pán)輸入字符中到緩沖區(qū);鍵盤(pán)輸入字符中到緩沖區(qū);LEASI,BUFA+1MOVCH,0MOVCL,SIADDSI,CXLEADI,BUFBNEXT:MOV AL,SIMOVDI,ALDECSIINCDILOOPNEXTMOVBYTE PTR DI,RETURN ;輸出回車換行;輸出回車換行PRINTINF02 ;輸出的字符串變量;輸出的字符串變量INF02代表代表PRINTBUFB ;反向輸出輸入字符串;反向輸出輸入字符串MOVAH,5CHINT21HCODEENDSENDSTART5.7.6
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色環(huán)保型社區(qū)門(mén)衛(wèi)管理服務(wù)協(xié)議4篇
- 風(fēng)機(jī)安裝施工方案
- 強(qiáng)夯土方施工方案
- 速度課程設(shè)計(jì)講解
- 2025年度新能源項(xiàng)目公司成立合作協(xié)議書(shū)規(guī)范文本4篇
- 2025年銷售人員保密與反不正當(dāng)競(jìng)爭(zhēng)協(xié)議維護(hù)企業(yè)合法權(quán)益2篇
- 2025年度個(gè)人向公司借款用于房屋維修貸款合同范本3篇
- 2025年度智能房屋租賃管理服務(wù)承包合同書(shū)4篇
- 2025年教育機(jī)構(gòu)廚師團(tuán)隊(duì)聘用及餐飲服務(wù)質(zhì)量標(biāo)準(zhǔn)合同2篇
- 二零二五版民房建筑施工安全生產(chǎn)責(zé)任合同4篇
- 家庭年度盤(pán)點(diǎn)模板
- 2024年公需科目培訓(xùn)考試題及答案
- 2024年江蘇鑫財(cái)國(guó)有資產(chǎn)運(yùn)營(yíng)有限公司招聘筆試沖刺題(帶答案解析)
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)含答案
- 廣西桂林市2023-2024學(xué)年高二上學(xué)期期末考試物理試卷
- 財(cái)務(wù)指標(biāo)與財(cái)務(wù)管理
- 部編版二年級(jí)下冊(cè)道德與法治第三單元《綠色小衛(wèi)士》全部教案
- 保安春節(jié)安全生產(chǎn)培訓(xùn)
- 初一語(yǔ)文上冊(cè)基礎(chǔ)知識(shí)訓(xùn)練及答案(5篇)
- 血液透析水處理系統(tǒng)演示
- GB/T 27030-2006合格評(píng)定第三方符合性標(biāo)志的通用要求
評(píng)論
0/150
提交評(píng)論