匯編語言程序設(shè)計(jì)-第5章基本匯編語言程序設(shè)計(jì)ppt課件_第1頁
匯編語言程序設(shè)計(jì)-第5章基本匯編語言程序設(shè)計(jì)ppt課件_第2頁
匯編語言程序設(shè)計(jì)-第5章基本匯編語言程序設(shè)計(jì)ppt課件_第3頁
匯編語言程序設(shè)計(jì)-第5章基本匯編語言程序設(shè)計(jì)ppt課件_第4頁
匯編語言程序設(shè)計(jì)-第5章基本匯編語言程序設(shè)計(jì)ppt課件_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第5章根本匯編言語程序設(shè)計(jì)q5.1 匯編言語程序的設(shè)計(jì)步驟q5.2 順序構(gòu)造的程序設(shè)計(jì)q5.3 分支構(gòu)造的程序設(shè)計(jì)q5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)q5.5 子程序設(shè)計(jì)第5章根本匯編言語程序設(shè)計(jì)q5.1 匯編言語程序的設(shè)計(jì)步驟q5.2 順序構(gòu)造的程序設(shè)計(jì)q5.3 分支構(gòu)造的程序設(shè)計(jì)q5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)q5.5 子程序設(shè)計(jì)5.1 匯編言語程序的設(shè)計(jì)步驟n匯編言語程序設(shè)計(jì)的根本步驟n程序的根本構(gòu)造5.1 匯編言語程序的設(shè)計(jì)步驟n一個良好的程序應(yīng)該滿足以下要求:n1程序要構(gòu)造化,簡明、可讀性好,便于調(diào)試。n2執(zhí)行速度快,程序代碼效率高。n3占用存儲空間少。n 匯編言語程序設(shè)計(jì)的根本步驟5.1 匯編

2、言語程序的設(shè)計(jì)步驟n匯編言語程序設(shè)計(jì)的根本步驟:n1.分析題意,確定數(shù)據(jù)構(gòu)造和算法n2.根據(jù)算法繪制程序流程圖n3.根據(jù)流程圖編寫程序n4.調(diào)試程序n 匯編言語程序設(shè)計(jì)的根本步驟5.1 匯編言語程序的設(shè)計(jì)步驟例5.1 在100個字的無符號整數(shù)字中找出最大數(shù)。n 匯編言語程序設(shè)計(jì)的根本步驟5.1 匯編言語程序的設(shè)計(jì)步驟1.分析題意,確定數(shù)據(jù)構(gòu)造和算法1初始化,建立一個數(shù)據(jù)指針指向數(shù)據(jù)區(qū)的首地址;2將第一個數(shù)存入存放器如AX中;3調(diào)整數(shù)據(jù)指針,使其指向下一個數(shù);4將數(shù)據(jù)指針?biāo)傅臄?shù)與存放器AX的內(nèi)容相比較,假設(shè)該數(shù)較大,那么將其存入AX,否那么丟掉;5反復(fù)執(zhí)行3、4兩步,直至將數(shù)組中的數(shù)據(jù)全部處置

3、完。n 匯編言語程序設(shè)計(jì)的根本步驟5.1 匯編言語程序的設(shè)計(jì)步驟2.根據(jù)算法繪制程序流程圖n 匯編言語程序設(shè)計(jì)的根本步驟5.1 匯編言語程序的設(shè)計(jì)步驟3.根據(jù)流程圖編寫程序DATA SEGMENT DATA SEGMENT ARRAY DW 100 DUPARRAY DW 100 DUP? ?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART:START:MOV AXMOV AX,DATADATAMOV DSMOV DS,AXAXLEA SILEA SI,ARRAY

4、 ;ARRAY ;將將ARRAYARRAY的首地址送入數(shù)據(jù)指針的首地址送入數(shù)據(jù)指針SISIMOV CXMOV CX,99 ;99 ;設(shè)置循環(huán)次數(shù)設(shè)置循環(huán)次數(shù)MOV AXMOV AX,SISI ; ;將第一個數(shù)存入將第一個數(shù)存入AXAXNEXT:NEXT:ADD SIADD SI,2 ;2 ;修正數(shù)據(jù)指針指向下一個數(shù)據(jù)修正數(shù)據(jù)指針指向下一個數(shù)據(jù)CMP AXCMP AX,SISI ; ;兩數(shù)比較兩數(shù)比較JAE LOOP1 ;AXJAE LOOP1 ;AXSISI,轉(zhuǎn),轉(zhuǎn)LOOP1LOOP1MOV AXMOV AX,SISI ; ;否那么,將較大數(shù)存入否那么,將較大數(shù)存入AXAXLOOP1: DEC

5、 CXLOOP1: DEC CXJNZ NEXTJNZ NEXTMOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 匯編言語程序設(shè)計(jì)的根本步驟5.1 匯編言語程序的設(shè)計(jì)步驟4.調(diào)試程序兩個階段:靜態(tài)檢查上機(jī)運(yùn)轉(zhuǎn)調(diào)試n 程序的根本構(gòu)造5.1 匯編言語程序的設(shè)計(jì)步驟1.順序構(gòu)造2.分支構(gòu)造3.循環(huán)構(gòu)造n 程序的根本構(gòu)造5.1 匯編言語程序的設(shè)計(jì)步驟1.順序構(gòu)造n 程序的根本構(gòu)造5.1 匯編言語程序的設(shè)計(jì)步驟2.分支構(gòu)造n 程序的根本構(gòu)造5.1 匯編言語程序的設(shè)計(jì)步驟3.循環(huán)構(gòu)造第5章根本匯編言語程序設(shè)計(jì)q5.

6、1 匯編言語程序的設(shè)計(jì)步驟q5.2 順序構(gòu)造的程序設(shè)計(jì)q5.3 分支構(gòu)造的程序設(shè)計(jì)q5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)q5.5 子程序設(shè)計(jì)5.2 順序構(gòu)造的程序設(shè)計(jì)例5.2 將一字?jǐn)?shù)據(jù)從數(shù)據(jù)段的某個單元傳送到另一個單元。分析:由于8086.8088指令系統(tǒng)不允許在存儲器與存儲器之間直接傳送數(shù)據(jù),所以必需借助CPU內(nèi)部的通用存放器AX、BX、CX、DX等,先將存儲單元中的字?jǐn)?shù)據(jù)傳送到存放器,再將其由存放器傳送到存儲器的另一個字單元。5.2 順序構(gòu)造的程序設(shè)計(jì)DATA SEGMENTFIRST DW 1234HSECOND DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,D

7、S:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,F(xiàn)IRSTMOV SECOND,AXMOV AH,4CHINT 21HCODE ENDSEND START5.2 順序構(gòu)造的程序設(shè)計(jì)例5.3 將鍵盤輸入的小寫字母用大寫字母顯示出來。分析:此標(biāo)題涉及三個知識點(diǎn):1輸入:在8086.8088指令系統(tǒng)中,字符的輸入是由DOS21H中斷的01H子功能來實(shí)現(xiàn)的,命令序列如下:MOV AH,01HINT 21H其作用是從鍵盤接納一個字符并將該字符的ASCII碼存入存放器AL中。 5.2 順序構(gòu)造的程序設(shè)計(jì)2輸出:在8086.8088指令系統(tǒng)中,字符的輸出是由DOS21H中斷的

8、02H子功能來實(shí)現(xiàn)的,命令序列如下:MOV AH,02HINT 21H其作用是將存放器DL中所存放的字符進(jìn)展顯示輸出,故在執(zhí)行該命令序列之前,應(yīng)先將被輸出字符的ASCII碼存入DL中。3小寫字母向大寫字母的轉(zhuǎn)換:將小寫字母的ASCII碼值減去20H即可得到對應(yīng)大寫字母的ASCII碼值。5.2 順序構(gòu)造的程序設(shè)計(jì)CODE SEGMENTASSUME CS:CODESTART:MOV AH,01HINT 21HSUB AL,20HMOV DL,ALMOV AH,02HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START第5章根本匯編言語程序設(shè)計(jì)q5.1 匯編言語程序

9、的設(shè)計(jì)步驟q5.2 順序構(gòu)造的程序設(shè)計(jì)q5.3 分支構(gòu)造的程序設(shè)計(jì)q5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)q5.5 子程序設(shè)計(jì)5.3 分支構(gòu)造的程序設(shè)計(jì)n雙分支構(gòu)造的程序設(shè)計(jì)n多分支程序設(shè)計(jì)n 雙分支構(gòu)造的程序設(shè)計(jì)5.3 分支構(gòu)造的程序設(shè)計(jì)框架構(gòu)造:先行指令JXX 標(biāo)號1指令序列1JMP 標(biāo)號2 ;轉(zhuǎn)到出口標(biāo)號1:指令序列2標(biāo)號2:功能:JXX條件成立時(shí)轉(zhuǎn)到標(biāo)號1處執(zhí)行指令序列2,否那么執(zhí)行指令序列1,然后跳轉(zhuǎn)到標(biāo)號2的程序出口處。n 雙分支構(gòu)造的程序設(shè)計(jì)5.3 分支構(gòu)造的程序設(shè)計(jì)例5.4 比較兩個帶符號數(shù)的大小,把大數(shù)存入MAX單元。分析:比較兩數(shù)可用CMP指令,而帶符號數(shù)的比較結(jié)果可由標(biāo)志位SF、OF

10、來確定,選用的轉(zhuǎn)移指令應(yīng)為JG、JL等。DATA SEGMENT DATA SEGMENT A DW 34A DW 34B DW 65B DW 65MAX DW ?MAX DW ?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART: MOV AXSTART: MOV AX,DATADATAMOV DSMOV DS,AXAXMOV AXMOV AX,A AMOV BXMOV BX,B BCMP AXCMP AX,BXBXJL NEXTJL NEXTMOV MAXMOV

11、 MAX,AXAXJMP EXITJMP EXITNEXT: MOV MAXNEXT: MOV MAX,BXBXEXIT: MOV AHEXIT: MOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START5.3 分支構(gòu)造的程序設(shè)計(jì)n 雙分支構(gòu)造的程序設(shè)計(jì)5.3 分支構(gòu)造的程序設(shè)計(jì)例5.5 比較兩個字符串STRING1和STRING2所含字符能否完全一樣,假設(shè)一樣那么顯示MATCH,假設(shè)不一樣那么顯示NO MATCH。分析:比較兩個字符串可用指令REPE CMPSB,比較后假設(shè)ZF=1,那么兩個字符串完全一樣,假設(shè)ZF=0,那

12、么兩個字符串不完全一樣。字符串的輸出是由DOS21H中斷的09H子功能來實(shí)現(xiàn)的,該子功能要求將被輸出的字符串存入數(shù)據(jù)段中,存儲時(shí)以終了,輸出時(shí)將其首地址存入DX存放器。DATA SEGMENTDATA SEGMENTSTRING1 DB ABCDEFGSTRING1 DB ABCDEFGOUT1 DB MATCHOUT1 DB MATCHOUT2 DB NO MATCHOUT2 DB NO MATCHDATA ENDSDATA ENDSEXTRA SEGMENTEXTRA SEGMENTSTRING2 DBABCDEFGSTRING2 DBABCDEFGEXTRA ENDSEXTRA ENDS

13、CODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATA,ES:EXTRAES:EXTRASTART:MOV AXSTART:MOV AX,DATADATAMOV DSMOV DS,AXAXMOV AXMOV AX,EXTRAEXTRAMOV ESMOV ES,AXAXMOV CXMOV CX,7 ;7 ;字符串長度存入字符串長度存入CXCXLEA SILEA SI,STRING1 ;STRING1STRING1 ;STRING1的首地址存入的首地址存入SISILEA DILEA DI,ES:STRING2;STRI

14、NG2ES:STRING2;STRING2的首地址存入的首地址存入DIDICLD ;CLD ;置方向標(biāo)志置方向標(biāo)志DF=0DF=0REPE CMPSB ;REPE CMPSB ;一樣時(shí)反復(fù)比較一樣時(shí)反復(fù)比較JNZ OUTPUT2 ;JNZ OUTPUT2 ;不匹配,轉(zhuǎn)不匹配,轉(zhuǎn)OUTPUT2OUTPUT2LEA DXLEA DX,OUT1 ;OUT1OUT1 ;OUT1首地址存入首地址存入DXDXMOV AHMOV AH,09H ;09H ;輸出輸出OUT1OUT1INT 21HINT 21HJMP EXIT ;JMP EXIT ;轉(zhuǎn)轉(zhuǎn)EXITEXIT,終了,終了OUTPUT2:LEA DXO

15、UTPUT2:LEA DX,OUT2 ;OUT2OUT2 ;OUT2首地址存入首地址存入DXDXMOV AHMOV AH,09H ;09H ;輸出輸出OUT2OUT2INT 21HINT 21HEXIT: MOV AHEXIT: MOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START5.3 分支構(gòu)造的程序設(shè)計(jì)n 多分支序設(shè)計(jì)5.3 分支構(gòu)造的程序設(shè)計(jì)例5.6 比較兩個無符號整數(shù)A和B,假設(shè)AB那么輸出“,假設(shè)AB那么輸出“B、AB和A=B,按照邏輯分解的方法,我們可先將其歸并為兩個條件:AB和AB和A=B,各分支均可用條件

16、轉(zhuǎn)移指令來實(shí)現(xiàn)。DATA SEGMENTDATA SEGMENTA DW 34A DW 34B DW 56B DW 56DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART: MOV AXSTART: MOV AX,DATADATAMOV DSMOV DS,AXAXMOV AXMOV AX,A AMOV BXMOV BX,B BCMP AXCMP AX,BXBXJAE NEXT1JAE NEXT1MOV DLMOV DL,EXIT: MOV AHEXIT: MOV A

17、H,02H02HINT 21HINT 21HMOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START5.3 分支構(gòu)造的程序設(shè)計(jì)n 多分支序設(shè)計(jì)5.3 分支構(gòu)造的程序設(shè)計(jì)例5.7 知兩個整數(shù)字節(jié)變量A和B,試編寫完成以下操作的程序: 1假設(shè)兩個數(shù)中只需一個是奇數(shù),那么將奇數(shù)存入ABUF單元,偶數(shù)存入BBUF單元中。2假設(shè)兩個數(shù)均為奇數(shù),那么兩數(shù)分別加1,并存回原變量處。3假設(shè)兩個數(shù)均為偶數(shù),那么兩變量不變。分析:在計(jì)算機(jī)中,數(shù)據(jù)的奇偶性取決于最低位的值,0為偶數(shù),1為奇數(shù)。因此可采用位測試的方法來判別。首先判別A與

18、B能否同種類型的數(shù),不是同種類型,再判別B能否為偶數(shù),由B的類型可確定A的類型,再按要求1進(jìn)展處置;同樣,當(dāng)A、B是同種類型時(shí),也判別B能否為偶數(shù),再按要求2或3進(jìn)展處置。判別A、B兩數(shù)能否同類,可運(yùn)用XOR指令將兩數(shù)異或,假設(shè)結(jié)果的最低位為0,那么兩數(shù)同類。n 多分支程序設(shè)計(jì)5.3 分支構(gòu)造的程序設(shè)計(jì)5.3 分支構(gòu)造的程序設(shè)計(jì)DATA SEGMENTDATA SEGMENTABUF DB AABUF DB ABBUF DB BBBUF DB BDATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:D

19、ATADS:DATASTART:MOV AXSTART:MOV AX,DATADATAMOV DSMOV DS,AXAXMOV ALMOV AL,ABUFABUFMOV BLMOV BL,BBUFBBUFXOR ALXOR AL,BLBLTEST ALTEST AL,01H ;01H ;測試能否同類測試能否同類JZ CLASS ;JZ CLASS ;是同類,轉(zhuǎn)是同類,轉(zhuǎn)CLASSCLASSTEST BLTEST BL,01H ;01H ;不是同類,測試不是同類,測試B B能否偶數(shù)能否偶數(shù)JZ EXIT ;BJZ EXIT ;B是偶數(shù),滿足要求是偶數(shù),滿足要求1 1,轉(zhuǎn),轉(zhuǎn)EXITEXITXCH

20、G BLXCHG BL,ABUF ;BABUF ;B不是偶數(shù),按要求不是偶數(shù),按要求1 1,交換兩,交換兩數(shù)數(shù)MOV BBUFMOV BBUF,BLBLJMP EXIT ;JMP EXIT ;轉(zhuǎn)轉(zhuǎn)EXITEXITCLASS:TEST BLCLASS:TEST BL,01H ;01H ;同類時(shí),測試同類時(shí),測試B B能否偶數(shù)能否偶數(shù)JZ EXIT ;BJZ EXIT ;B是偶數(shù),滿足要求是偶數(shù),滿足要求3 3,轉(zhuǎn),轉(zhuǎn)EXITEXITINC ABUF ;BINC ABUF ;B不是偶數(shù),按要求不是偶數(shù),按要求2 2,兩數(shù)同時(shí)加,兩數(shù)同時(shí)加1 1INC BBUFINC BBUFEXIT:MOV AH

21、EXIT:MOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START第5章根本匯編言語程序設(shè)計(jì)q5.1 匯編言語程序的設(shè)計(jì)步驟q5.2 順序構(gòu)造的程序設(shè)計(jì)q5.3 分支構(gòu)造的程序設(shè)計(jì)q5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)q5.5 子程序設(shè)計(jì)5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)n循環(huán)程序的構(gòu)造n循環(huán)構(gòu)造的程序設(shè)計(jì)方法n 循環(huán)程序的構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)n循環(huán)程序都可由如下三部分組成:n1.設(shè)置循環(huán)的初始形狀n2.循環(huán)體n3.循環(huán)控制部分n 循環(huán)程序的構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)1.設(shè)置循環(huán)的初始形狀循環(huán)程序的初始形狀,應(yīng)該在進(jìn)入循環(huán)體之前

22、設(shè)置,其目的是保證循環(huán)體可以正常運(yùn)轉(zhuǎn)和終了,詳細(xì)內(nèi)容包括設(shè)置循環(huán)次數(shù)的計(jì)數(shù)值或其他能使循環(huán)終了的條件的初值,以及為循環(huán)體正常任務(wù)而建立的初始形狀等。n 循環(huán)程序的構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)2.循環(huán)體循環(huán)體是整個循環(huán)程序中需求反復(fù)執(zhí)行的程序段,即循環(huán)任務(wù)的主體。它由循環(huán)的任務(wù)部分和修正部分組成。循環(huán)的任務(wù)部分是為完成程序功能而設(shè)計(jì)的主要程序段,循環(huán)的修正部分那么是為保證循環(huán)體在執(zhí)行有限次后可以正常終了而設(shè)置的程序段,普通是對循環(huán)控制參數(shù)進(jìn)展修正,而該參數(shù)的變化通常是有規(guī)律的。n 循環(huán)程序的構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)3.循環(huán)控制部分每個循環(huán)程序必需選擇一個循環(huán)控制條件來控制循環(huán)的運(yùn)轉(zhuǎn)和終了

23、,而合理地選擇這個控制條件就成為循環(huán)程序設(shè)計(jì)的關(guān)鍵問題。n 循環(huán)程序的構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)1循環(huán)次數(shù)知,用循環(huán)次數(shù)作為循環(huán)的控制條件MOV CX,N標(biāo)號: LOOP 標(biāo)號n 循環(huán)程序的構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)2循環(huán)次數(shù)知,但也有能夠運(yùn)用其他特征或條件來使循環(huán)提早終了MOV CX,N標(biāo)號: LOOPZ.LOOPNZ 標(biāo)號n 循環(huán)程序的構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)3循環(huán)次數(shù)是未知的,這時(shí)就要根據(jù)詳細(xì)情況找出控制循環(huán)終了的條件直到型循環(huán):標(biāo)號: 影響條件標(biāo)志位的指令JXX 標(biāo)號 n 循環(huán)程序的構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)當(dāng)型循環(huán):標(biāo)號2:影響條件標(biāo)志位的指令JXX 標(biāo)號1JMP

24、標(biāo)號2標(biāo)號1:n 循環(huán)程序的構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)n設(shè)計(jì)循環(huán)程序的步驟:n1分析問題,確定循環(huán)次數(shù)是知的還是未知的,能否有提早終了循環(huán)的情況,從而決議選用哪一種循環(huán)最恰當(dāng);n 2根據(jù)循環(huán)變化的規(guī)律,確定適宜于循環(huán)設(shè)計(jì)的任務(wù)部分;n 3思索循環(huán)參數(shù)的修正部分,分析并確定參數(shù)的每次修正方法;n 4設(shè)置循環(huán)控制部分及循環(huán)參數(shù)的置初值部分,可根據(jù)循環(huán)程序控制方法的不同,來設(shè)置循環(huán)參數(shù)的初值。n 循環(huán)構(gòu)造的程序設(shè)計(jì)方法5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)兩種根本方式:單循環(huán)構(gòu)造多重循環(huán)構(gòu)造n 循環(huán)構(gòu)造的程序設(shè)計(jì)方法5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)1.單循環(huán)構(gòu)造2.多重循環(huán)構(gòu)造n 循環(huán)構(gòu)造的程序設(shè)計(jì)方法單循環(huán)構(gòu)造

25、5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)例5.8 編程計(jì)算10個整數(shù)之和不思索溢出,并將結(jié)果存入SUM中。分析:這10個整數(shù)可存放在數(shù)組ARRAY中,從而將標(biāo)題轉(zhuǎn)化為對數(shù)組元素求和,根據(jù)數(shù)組元素下標(biāo)的變化規(guī)律來設(shè)計(jì)循環(huán),此題中循環(huán)次數(shù)固定為10次,因此可運(yùn)用LOOP指令。5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)DATA SEGMENTDATA SEGMENTARRAY DW 3ARRAY DW 3,5 5,6 6,7 7,2 2,4 4,1 1,6 6,8 8,9 9SUM DW ?SUM DW ?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME

26、 CS:CODE,DS:DATADS:DATASTART:MOV AXSTART:MOV AX,DATADATAMOV DSMOV DS,AXAXMOV SIMOV SI,0 0 ; ;設(shè)置數(shù)組中第一個元素的偏移量設(shè)置數(shù)組中第一個元素的偏移量MOV CXMOV CX,10 ;10 ;設(shè)置循環(huán)次數(shù)設(shè)置循環(huán)次數(shù)MOV AXMOV AX,0 ;0 ;累加器清累加器清0 0NEXT:ADD AXNEXT:ADD AX,ARRAYARRAYSISI ; ;累加累加ADD SIADD SI,2 ;2 ;計(jì)算下一元素偏移量計(jì)算下一元素偏移量LOOP NEXT ;CX-10LOOP NEXT ;CX-10時(shí)繼

27、續(xù)循環(huán)時(shí)繼續(xù)循環(huán)MOV SUMMOV SUM,AX ;AX ;累加和存入累加和存入SUMSUMMOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 循環(huán)構(gòu)造的程序設(shè)計(jì)方法單循環(huán)構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)例5.9 在ADDR單元中存放著數(shù)Y的地址,試編制一程序把Y中1的個數(shù)存入COUNT單元中。分析:要測出Y中1的個數(shù)就應(yīng)逐位測試,一個比較簡單的方法是用移位的方法把各位依次移到最高位,然后根據(jù)最高有效位能否為1來計(jì)數(shù)。循環(huán)的終了可以用計(jì)數(shù)值16來控制,但思索到數(shù)Y的末幾位全為0如1011010000000

28、000B的特殊情況,循環(huán)應(yīng)能提早終了,且能夠?yàn)榱愦窝h(huán),為了提高程序的執(zhí)行效率,應(yīng)采用當(dāng)型構(gòu)造,以測試數(shù)能否為0來作為終了條件。5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)DATA SEGMENTDATA SEGMENTADDR DW YADDR DW YY DW 0102HY DW 0102HCOUNT DW ?COUNT DW ?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART: MOV AXSTART: MOV AX,DATADATAMOV DSMOV DS,AXAXMOV

29、CXMOV CX,0 ;0 ;計(jì)數(shù)器清計(jì)數(shù)器清0 0MOV BXMOV BX,ADDR ;ADDR ;取取Y Y的地址的地址MOV AXMOV AX,BXBX ; ;將將Y Y存入存入AXAXREPEAT: TEST AXREPEAT: TEST AX,0FFFFH ;0FFFFH ;測試測試Y YJZ EXIT ;JZ EXIT ;假設(shè)假設(shè)Y=0Y=0,轉(zhuǎn),轉(zhuǎn)EXITEXIT終了終了JNS SHIFT ;JNS SHIFT ;假設(shè)假設(shè)SF=0SF=0,轉(zhuǎn),轉(zhuǎn)SHIFTSHIFTINC CX ;SF=1INC CX ;SF=1,計(jì)數(shù)器加,計(jì)數(shù)器加1 1SHIFT: SHL AXSHIFT: S

30、HL AX,1 ;Y1 ;Y邏輯左移邏輯左移1 1位位JMP REPEAT ;JMP REPEAT ;繼續(xù)循環(huán)繼續(xù)循環(huán)EXIT: MOV COUNTEXIT: MOV COUNT,CX ;1CX ;1的個數(shù)存入的個數(shù)存入COUNTCOUNTMOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 循環(huán)構(gòu)造的程序設(shè)計(jì)方法單循環(huán)構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)例5.10 有一串20個字符的字符串存儲于首地址為STRING的存儲區(qū)中,要求在字符串中查找空格ASCII碼為20H,假設(shè)找到那么輸出“FOUND SPACE,

31、否那么輸出“NOT FOUND SPACE。分析:此題可以運(yùn)用查找字符串的指令REPNZ SCASB來實(shí)現(xiàn),也可以用循環(huán)指令來實(shí)現(xiàn)。在此,我們采用循環(huán)指令的方法用CMP指令逐個字符進(jìn)展查找。根據(jù)題意,有兩種能夠性: 1在查找中找到了空格符,此時(shí)ZF=1,應(yīng)該提早終了循環(huán); 2如不斷查找到字符串終了還未找到空格符,那么由于循環(huán)計(jì)數(shù)器CX變?yōu)?而終了循環(huán)。據(jù)此,此題應(yīng)思索運(yùn)用LOOPE或LOOPNE指令。5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)DATA SEGMENTDATA SEGMENTSTRING DB MY PERSONAL COMPUTERSTRING DB MY PERSONAL COMPUTERO

32、UT1 DB FOUND SPACEOUT1 DB FOUND SPACEOUT2 DB NOT FOUND SPACEOUT2 DB NOT FOUND SPACEDATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART:START:MOV AXMOV AX,DATADATAMOV DSMOV DS,AXAXMOV CXMOV CX,20;20;字符串長度存入字符串長度存入CX CX MOV SIMOV SI,-1-1MOV ALMOV AL,20H ;20H ;空格符

33、存入空格符存入ALALNEXT:NEXT:INC SI ;INC SI ;修正地址修正地址CMP ALCMP AL,STRINGSTRINGSISI; ;比較字符比較字符LOOPNE NEXT ;LOOPNE NEXT ;不相等時(shí)反復(fù)不相等時(shí)反復(fù)JNZ NOT FOUND ;ZF=0JNZ NOT FOUND ;ZF=0轉(zhuǎn)到轉(zhuǎn)到NOT_FOUNDNOT_FOUNDMOV DXMOV DX,OFFSET OUT1;OFFSET OUT1;否那么,輸出否那么,輸出OUT1OUT1字字符串符串MOV AHMOV AH,09H09HINT 21HINT 21HJMP EXITJMP EXITNOT F

34、OUND:NOT FOUND:MOV DXMOV DX,OFFSET OUT2 ;OFFSET OUT2 ;輸出輸出OUT2OUT2字符串字符串MOV AHMOV AH,09H09HINT 21HINT 21HEXIT:EXIT:MOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 循環(huán)構(gòu)造的程序設(shè)計(jì)方法單循環(huán)構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)例5.11 將正數(shù)N插入一個已排序的字?jǐn)?shù)組的正確位置。該數(shù)組的首地址和末地址分別為ARRAY HEAD和AYYAY END,其中一切數(shù)均為正數(shù)且已按遞增的次序陳列。分析:

35、由于數(shù)組的首地址和末地址都是知的,因此數(shù)組長度可以確定。但是這里只需求插入一個數(shù),并不一定要掃描整個數(shù)組,所以可以用找到應(yīng)插入數(shù)的位置作為循環(huán)的終了條件。此外,為空出要插入數(shù)的位置,其后的全部元素都應(yīng)后移一個字即向地址增大的方向挪動一個字,所以算法上應(yīng)該從數(shù)組的尾部向頭部查找,可逐字取出數(shù)組中的一個數(shù)K與N作比較,如KN,那么把K后移一個字,然后繼續(xù)向前查找;假設(shè)KN,那么把N插入在K之后就可以終了程序了。5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)DATA SEGMENTDATA SEGMENTARRAY HEAD DW 3ARRAY HEAD DW 3,5 5,1414,2323,3636,4545,565

36、6,6767,7878,9999ARRAY END DW 101ARRAY END DW 101N DW 32N DW 32DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART:START:MOV AXMOV AX,DATADATAMOV DSMOV DS,AXAXMOV AXMOV AX,N ;NN ;N送入送入AXAXMOV ARRAY HEAD-2MOV ARRAY HEAD-2,-1;-1;數(shù)組前一字單元置數(shù)組前一字單元置-1-1MOV SIMOV SI,0

37、0LOCATE:LOCATE:CMP ARRAY ENDCMP ARRAY ENDSISI,AX ;KAX ;K與與N N比較比較JLE INSERT ;KNJLE INSERT ;KN,轉(zhuǎn),轉(zhuǎn)INSERTINSERT,插入,插入N NMOV BXMOV BX,ARRAY ENDARRAY ENDSISIMOV ARRAY ENDMOV ARRAY ENDSI+2SI+2,BXBX;KN;KN,K K后移一個字后移一個字SUB SISUB SI,2 ;2 ;預(yù)備取前一個元素預(yù)備取前一個元素JMP LOCATE ;JMP LOCATE ;繼續(xù)查找繼續(xù)查找INSERT:INSERT:MOV ARR

38、AY ENDMOV ARRAY ENDSI+2SI+2,AX;NAX;N插在插在K K之后之后MOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 循環(huán)構(gòu)造的程序設(shè)計(jì)方法單循環(huán)構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)例5.12 設(shè)有數(shù)組X和Y。X數(shù)組中有X1,X2,X10;Y數(shù)組中有Y1,Y2,Y10。試編制程序計(jì)算:Z1=X1+Y1Z2=X2+Y2Z3=X3-Y3Z4=X4-Y4Z5=X5-Y5Z6=X6+Y6Z7=X7-Y7Z8=X8-Y8Z9=X9+Y9Z10=X10+Y10結(jié)果存入Z數(shù)組。n 循環(huán)構(gòu)造的程序設(shè)

39、計(jì)方法單循環(huán)構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)分析:對于這種問題,我們也可用循環(huán)程序構(gòu)造來完成。知循環(huán)計(jì)數(shù)值為10,每次循環(huán)的操作數(shù)是可以順序取出的,但所做的操作卻有不同,這里有兩種操作:加法和減法。為了區(qū)別每次應(yīng)該做哪一種操作,可以設(shè)立標(biāo)志位,如標(biāo)志位為0做加法,為1做減法,這樣進(jìn)入循環(huán)后只需判別標(biāo)志位就可確定應(yīng)該做的操作了。5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)DATA SEGMENTDATA SEGMENTX DW1X DW1,2 2,9 9,8 8,7 7,3 3,6 6,5 5,4 4,1 1Y DW2Y DW2,1 1,2 2,3 3,4 4,2 2,3 3,2 2,1 1,5 5Z DW10DU

40、PZ DW10DUP? ?LOGIC RULE DW00DCH ;LOGIC RULE DW00DCH ;邏輯尺邏輯尺DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART:MOV AXSTART:MOV AX,DATA DATA MOV DSMOV DS,AXAXMOV CXMOV CX,10 ;10 ;設(shè)置循環(huán)次數(shù)設(shè)置循環(huán)次數(shù)MOV BXMOV BX,0 0MOV DXMOV DX,LOGIC RULELOGIC RULEL: L: MOV AXMOV AX,X X

41、BXBXSHR DXSHR DX,1 ;1 ;邏輯尺右移邏輯尺右移1 1位位JC SUBB ;CF=1JC SUBB ;CF=1,轉(zhuǎn),轉(zhuǎn)SUBBSUBBADD AXADD AX,Y YBXBXJMP RESULTJMP RESULTSUBB:SUBB:SUB AXSUB AX,Y YBXBXRESULT:MOV ZRESULT:MOV ZBXBX,AX ;AX ;結(jié)果存入結(jié)果存入Z ZADD BXADD BX,2 2LOOP LLOOP LMOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 循環(huán)構(gòu)造的程序

42、設(shè)計(jì)方法多重循環(huán)構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)n多重循環(huán)指的是循環(huán)的嵌套,即循環(huán)體部分又包含了另一個循環(huán)。多重循環(huán)程序設(shè)計(jì)的根本方法和單循環(huán)的設(shè)計(jì)方法是一致的,應(yīng)分別思索各層循環(huán)的控制條件及其程序?qū)崿F(xiàn),相互之間不能混淆。另外應(yīng)該留意在每次經(jīng)過外層循環(huán)再次進(jìn)入內(nèi)層循環(huán)時(shí),內(nèi)層循環(huán)的初始條件必需重新設(shè)置。特別要留意的是,假設(shè)內(nèi)、外層循環(huán)都運(yùn)用CX做循環(huán)計(jì)數(shù)器,在進(jìn)入內(nèi)層循環(huán)之前一定要先把外層循環(huán)的循環(huán)計(jì)數(shù)器的值保管下來,才干設(shè)置內(nèi)層循環(huán)的次數(shù)。n 循環(huán)構(gòu)造的程序設(shè)計(jì)方法多重循環(huán)構(gòu)造5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)常見的雙重循環(huán)的程序構(gòu)造: 外層循環(huán)初始化MOV CX,外層循環(huán)次數(shù)M LOOP1: ; 外

43、層循環(huán)體的指令MOV DI,CX;保管外層循環(huán)次數(shù) 內(nèi)層循環(huán)初始化MOV CX,內(nèi)層循環(huán)次數(shù)N;設(shè)置內(nèi)層循環(huán)次數(shù)LOOP2: ;內(nèi)層循環(huán)的循環(huán)體LOOP LOOP2;繼續(xù)內(nèi)層循環(huán)MOV CX,DI;恢復(fù)外層循環(huán)的次數(shù) ;外層循環(huán)體的指令序列 LOOP LOOP1;繼續(xù)外層循環(huán)第5章根本匯編言語程序設(shè)計(jì)q5.1 匯編言語程序的設(shè)計(jì)步驟q5.2 順序構(gòu)造的程序設(shè)計(jì)q5.3 分支構(gòu)造的程序設(shè)計(jì)q5.4 循環(huán)構(gòu)造的程序設(shè)計(jì)q5.5 子程序設(shè)計(jì)5.5 子程序設(shè)計(jì)n子程序的定義n子程序的設(shè)計(jì)要求n子程序的參數(shù)傳送及運(yùn)用舉例n 子程序的定義5.5 子程序設(shè)計(jì)過程名 PROC 屬性 過程名 ENDP過程名為標(biāo)

44、識符,其寫法與標(biāo)號的寫法一樣,它代表子程序入口的符號地址;屬性是指子程序的類型屬性,它可以是NEAR或FAR。屬性確實(shí)定原那么如下: 假設(shè)子程序只允許被與它在同一代碼段中的程序調(diào)用,那么屬性應(yīng)設(shè)置為NEAR,否那么,應(yīng)設(shè)置為FAR。n 子程序的定義5.5 子程序設(shè)計(jì)例5.13 調(diào)用程序和子程序在同一代碼段中。CODE SEGMENT;主程序MAIN PROC FAR CALL SUB1RETMAIN ENDP;子程序SUB1 PROC NEARRETSUB1 ENDPCODE ENDS由于調(diào)用程序MAIN和子程序SUB1在同一代碼段中,所以SUB1定義為NEAR屬性,這樣MAIN中對SUB1的調(diào)用和SUB1中的RET就都是NEAR屬性的。但是普通說來,主過程MAIN應(yīng)定義為FAR屬性,這是由于我們把程序的主過程看做是DOS調(diào)用的一個子程序,因此DOS對MAIN的調(diào)用以及MAIN中的RET就是FAR屬性的。n 子程序的定義5

溫馨提示

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

評論

0/150

提交評論