第5章8086匯編語言程序設(shè)計ppt課件_第1頁
第5章8086匯編語言程序設(shè)計ppt課件_第2頁
第5章8086匯編語言程序設(shè)計ppt課件_第3頁
第5章8086匯編語言程序設(shè)計ppt課件_第4頁
第5章8086匯編語言程序設(shè)計ppt課件_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計本章主要內(nèi)容本章主要內(nèi)容 順序程序設(shè)計順序程序設(shè)計1 分支程序設(shè)計分支程序設(shè)計2 循環(huán)程序設(shè)計循環(huán)程序設(shè)計3第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計匯編言語程序設(shè)計概述匯編言語程序設(shè)計概述v80868086匯編言語程序采用模塊化構(gòu)造,通常匯編言語程序采用模塊化構(gòu)造,通常由一個主程序模塊和多個子程序過程由一個主程序模塊和多個子程序過程模塊構(gòu)成。模塊構(gòu)成。v對于簡單程序,只需主程序模塊,沒有子對于簡單程序,只需主程序模塊,沒有子程序模塊。程序模塊。v匯編言語程序有匯編言語程序有3 3

2、種根本構(gòu)造:種根本構(gòu)造:v順序構(gòu)造順序構(gòu)造v分支構(gòu)造分支構(gòu)造v循環(huán)構(gòu)造循環(huán)構(gòu)造第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計程序的質(zhì)量規(guī)范程序的質(zhì)量規(guī)范v衡量程序的質(zhì)量通常有以下幾個規(guī)范:衡量程序的質(zhì)量通常有以下幾個規(guī)范:v程序正確、完好;程序正確、完好;v程序易讀性強;程序易讀性強;v程序的執(zhí)行速度快;程序的執(zhí)行速度快;v程序占內(nèi)存小,程序代碼的行數(shù)少。程序占內(nèi)存小,程序代碼的行數(shù)少。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計匯編言語程序設(shè)計的根本步驟匯編言語程序設(shè)計的根本步驟v 分析問題,籠統(tǒng)出描畫問題的數(shù)學(xué)模型;分析問題,籠統(tǒng)出描畫問題的數(shù)學(xué)模型;v 確定處理問題的算法或

3、算法思想;確定處理問題的算法或算法思想;v 程序模塊劃分程序模塊劃分在處理復(fù)雜實踐問題時在處理復(fù)雜實踐問題時,往往需求把它分成假設(shè)干功能模塊,在進展,往往需求把它分成假設(shè)干功能模塊,在進展功能模塊劃分后,必需確定各功能模塊間的通功能模塊劃分后,必需確定各功能模塊間的通訊問題;訊問題;v 繪制各功能模塊流程圖或構(gòu)造圖;繪制各功能模塊流程圖或構(gòu)造圖;v 分配存儲空間、存放器等任務(wù)單元;分配存儲空間、存放器等任務(wù)單元;第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計匯編言語程序設(shè)計的根本步驟續(xù)匯編言語程序設(shè)計的根本步驟續(xù)v 根據(jù)流程圖,編寫程序;根據(jù)流程圖,編寫程序;v 靜態(tài)檢查,糾正錯誤;靜態(tài)

4、檢查,糾正錯誤;v 上機運轉(zhuǎn)調(diào)試,糾正錯誤,直至測試經(jīng)過;上機運轉(zhuǎn)調(diào)試,糾正錯誤,直至測試經(jīng)過;v 整理資料,建立完好的文檔。整理資料,建立完好的文檔。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計5.15.1順序構(gòu)造程序設(shè)計順序構(gòu)造程序設(shè)計v順序構(gòu)造程序又稱簡單程序。順序構(gòu)造程序又稱簡單程序。v采用這種構(gòu)造的程序,按照指令書寫的順采用這種構(gòu)造的程序,按照指令書寫的順序逐條執(zhí)行,程序的執(zhí)行途徑?jīng)]有分支和序逐條執(zhí)行,程序的執(zhí)行途徑?jīng)]有分支和循環(huán)。循環(huán)。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計順序構(gòu)造程序設(shè)計舉例順序構(gòu)造程序設(shè)計舉例v【例【例5-25-2】編程將內(nèi)存數(shù)據(jù)段字節(jié)】編

5、程將內(nèi)存數(shù)據(jù)段字節(jié)單元單元INDATINDAT存放的一個數(shù)存放的一個數(shù)n n假設(shè)假設(shè)0 n 9 0 n 9 ,以十進制方式在,以十進制方式在屏幕上顯示出來。屏幕上顯示出來。v例如,假設(shè)例如,假設(shè)INSTRINSTR單元存放的是數(shù)單元存放的是數(shù)8 8,那么在屏幕上顯示:,那么在屏幕上顯示:8D8D。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-25-2】程序代碼】程序代碼DATA SEGMENT DATA SEGMENT ; ;數(shù)據(jù)段定義數(shù)據(jù)段定義 INDAT DB 8 INDAT DB 8DATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT

6、; ;代碼段定義代碼段定義 ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX ; ;初始化初始化DSDS第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-25-2】程序代碼】程序代碼( (續(xù)續(xù)) ) MOV DL,INDAT MOV DL,INDAT OR DL,30HOR DL,30H MOV AHMOV AH2 2 INT 21HINT 21H MOV DL,DMOV DL,D MOV AH,2MOV AH,2 INT 2

7、1HINT 21HMOV AH,4CHMOV AH,4CH INT 21H INT 21H CODE ENDSCODE ENDS END START END START第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計5.2 5.2 分支構(gòu)造程序設(shè)計分支構(gòu)造程序設(shè)計v分支構(gòu)造程序利用條件轉(zhuǎn)移指令或跳轉(zhuǎn)表分支構(gòu)造程序利用條件轉(zhuǎn)移指令或跳轉(zhuǎn)表,使程序執(zhí)行完某條指令后,根據(jù)指令執(zhí),使程序執(zhí)行完某條指令后,根據(jù)指令執(zhí)行后形狀標(biāo)志的情況選擇要執(zhí)行哪個程序行后形狀標(biāo)志的情況選擇要執(zhí)行哪個程序段。段。v分支構(gòu)造程序的指令執(zhí)行順序與指令的存分支構(gòu)造程序的指令執(zhí)行順序與指令的存儲順序不一致。儲順序不一致。v轉(zhuǎn)

8、移指令轉(zhuǎn)移指令JMPJMP和和JccJcc可以實現(xiàn)分支構(gòu)造。可以實現(xiàn)分支構(gòu)造。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計分支構(gòu)造的三種方式分支構(gòu)造的三種方式第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計單分支構(gòu)造程序設(shè)計舉例單分支構(gòu)造程序設(shè)計舉例v【例【例5-35-3】編寫程序段,求】編寫程序段,求AXAX中存放的帶符中存放的帶符號數(shù)的絕對值,結(jié)果存號數(shù)的絕對值,結(jié)果存RESRES單元。單元。v v CMP AX,0 CMP AX,0v JGE ISPOSITIVE JGE ISPOSITIVEv NEG NEGAXAXvISPOSITIVE:ISPOSITIVE:v MOV

9、RES,AX MOV RES,AXv v本例采用的是單分支構(gòu)造。特點是:條件本例采用的是單分支構(gòu)造。特點是:條件成立時程序跳轉(zhuǎn);否那么,順序執(zhí)行。成立時程序跳轉(zhuǎn);否那么,順序執(zhí)行。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計雙分支構(gòu)造程序設(shè)計舉例雙分支構(gòu)造程序設(shè)計舉例v【例【例5-45-4】 編程判別編程判別DATDAT單元存放的帶符單元存放的帶符號數(shù)的正負。號數(shù)的正負。v如該數(shù)為負數(shù),那么顯示如該數(shù)為負數(shù),那么顯示“DAT is a “DAT is a negative number!negative number!;否那么顯示;否那么顯示“DAT “DAT is a nonnega

10、tive number!is a nonnegative number!。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-45-4】續(xù)】續(xù)DATA SEGMENT DATA SEGMENT ; ;數(shù)據(jù)段定義數(shù)據(jù)段定義 N DB DAT is a negative number!,$ N DB DAT is a negative number!,$ NN DB DAT is a nonnegative number! $ NN DB DAT is a nonnegative number! $DATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT

11、; ;代碼段定義代碼段定義 ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX ; ;設(shè)置設(shè)置DSDS第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-45-4】續(xù)】續(xù) MOV AX,-3 MOV AX,-3 CMP AX,0 CMP AX,0 JGE ISNN JGE ISNN LEA DX,N LEA DX,N MOV AH,9 MOV AH,9 INT 21H INT 21H JMP FINISH JMP FINISH第第

12、5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-45-4】續(xù)】續(xù)ISNN: ISNN: LEA DX,NNLEA DX,NN MOV AH,9MOV AH,9 INT 21HINT 21HFINISH:FINISH: MOV AH,4CHMOV AH,4CH INT 21HINT 21HCODE CODE ENDSENDS END START END START第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-45-4】續(xù)】續(xù)v【例【例5-45-4】采用的是雙分支構(gòu)造?!坎捎玫氖请p分支構(gòu)造。v采用這種構(gòu)造時,特別要留意第一個分支采用這種構(gòu)造時,特別要留意第一個分支后要

13、利用后要利用JMPJMP指令程序第指令程序第1616行使程序跳行使程序跳轉(zhuǎn)到第二個分支的后面。轉(zhuǎn)到第二個分支的后面。v總結(jié):總結(jié):v首先除第一分支外,第二分支和出口位置首先除第一分支外,第二分支和出口位置用標(biāo)號標(biāo)名用標(biāo)號標(biāo)名v第一分支終了時后要加第一分支終了時后要加JMPJMP指令使程序跳轉(zhuǎn)指令使程序跳轉(zhuǎn)到出口位置到出口位置第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計多分支構(gòu)造程序設(shè)計舉例多分支構(gòu)造程序設(shè)計舉例v【例【例5-55-5】 編程求分段函數(shù)編程求分段函數(shù)Y Y的值。知變量的值。知變量X X為為1616位帶符位帶符號數(shù),分段函數(shù)的值要求保號數(shù),分段函數(shù)的值要求保管到字單元管到字

14、單元Y Y中。函數(shù)定義如中。函數(shù)定義如下:下:1(X 0)Y0(X = 0)1(X 10WHILE I10第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計循環(huán)程序構(gòu)造循環(huán)程序構(gòu)造第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計設(shè)計循環(huán)構(gòu)造程序時,要留意的問題:設(shè)計循環(huán)構(gòu)造程序時,要留意的問題:v選用計數(shù)循環(huán)還是條件循環(huán)?選用計數(shù)循環(huán)還是條件循環(huán)?v采用直到型循環(huán)構(gòu)造還是當(dāng)型循環(huán)構(gòu)造?采用直到型循環(huán)構(gòu)造還是當(dāng)型循環(huán)構(gòu)造?v要綜合思索循環(huán)執(zhí)行的條件和循環(huán)退出的條要綜合思索循環(huán)執(zhí)行的條件和循環(huán)退出的條件:件:v可以用循環(huán)次數(shù)、計數(shù)器、標(biāo)志位、變量值可以用循環(huán)次數(shù)、計數(shù)器、標(biāo)志位、變量值等多種

15、方式來作為循環(huán)的控制條件等多種方式來作為循環(huán)的控制條件v特別留意:特別留意:v不要把初始化部分放到循環(huán)體中。不要把初始化部分放到循環(huán)體中。v循環(huán)體中要有能改動循環(huán)條件的語句。循環(huán)體中要有能改動循環(huán)條件的語句。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計v運用LOOP,LOOPZ,LOOPNZ時均為相對尋址,跳轉(zhuǎn)地址必需在IP+128ip-128之間。否那么可用JMP與三循環(huán)指令結(jié)合控制循環(huán)。LOP:.LOOP ANETJMP BNETANET:JMP LOPBNET: 第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計循環(huán)構(gòu)造程序設(shè)計舉例循環(huán)構(gòu)造程序設(shè)計舉例v【例【例5-65-6】

16、編程顯示以編程顯示以“!結(jié)尾的字符串。!結(jié)尾的字符串。v如:如:“Welcome to “Welcome to MASM!MASM!。只知道循環(huán)終了的條件是該字只知道循環(huán)終了的條件是該字符串以符串以“!終了,不知道字符!終了,不知道字符串的長度,所以,可用條件控串的長度,所以,可用條件控制的方法來控制循環(huán)的次數(shù)。制的方法來控制循環(huán)的次數(shù)。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-65-6】續(xù)】續(xù)DATA SEGMENT DATA SEGMENT MYSTR DB Welcome to MASM! MYSTR DB Welcome to MASM!DATA ENDSDATA

17、 ENDSCODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATA MOV AX,DATA MOV DS,AXMOV DS,AX第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-65-6】續(xù)】續(xù)LEA SI,MYSTRLEA SI,MYSTRNEXTCHAR:NEXTCHAR:MOV DL,SIMOV DL,SIMOV AH,2MOV AH,2INT 21HINT 21HCMP DL,!CMP DL,!JZ FINISHJZ FINISHINC

18、SIINC SIJMP NEXTCHARJMP NEXTCHAR第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-65-6】續(xù)】續(xù)FINISH:FINISH:MOV AH,4CHMOV AH,4CHINT 21HINT 21HCODE ENDSCODE ENDS END STARTEND START第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計計數(shù)循環(huán)程序計數(shù)循環(huán)程序v【例【例5-65-6】 將內(nèi)存數(shù)據(jù)段將內(nèi)存數(shù)據(jù)段INSTRINSTR地址開場存放地址開場存放的一個由字母組成的字符串中的小寫字母全部的一個由字母組成的字符串中的小寫字母全部轉(zhuǎn)換成大寫字母其他字符不變后存至內(nèi)存

19、轉(zhuǎn)換成大寫字母其他字符不變后存至內(nèi)存數(shù)據(jù)段數(shù)據(jù)段OUTSTROUTSTR地址處。地址處。v如原字符串是如原字符串是“hello ASM! 20190601“hello ASM! 20190601,那么,那么轉(zhuǎn)換完后應(yīng)該是轉(zhuǎn)換完后應(yīng)該是“HELLO ASM! 20190601“HELLO ASM! 20190601。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-65-6】續(xù)】續(xù)DATA SEGMENT DATA SEGMENT INSTR INSTR DB hello ASM! 20190601 DB hello ASM! 20190601STRLENSTRLEN EQU $-

20、INSTR EQU $-INSTR OUTSTR OUTSTR DB STRLEN DUP(?) DB STRLEN DUP(?)DATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATAMOV AX,DATAMOV DS,AXMOV DS,AX第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-65-6】續(xù)】續(xù) LEA SI,INSTR LEA SI,INSTRLEA DI,OUTSTRLEA DI,OUTSTRM

21、OV CX,STRLENMOV CX,STRLENNEXTCHAR:NEXTCHAR:MOV AL,SIMOV AL,SICMP AL,aCMP AL,aJB UNCHGJB UNCHG; ;不是小寫字母不是小寫字母, ,那么不轉(zhuǎn)換那么不轉(zhuǎn)換CMP AL,zCMP AL,zJA UNCHGJA UNCHG; ;不是小寫字母不是小寫字母, ,那么不轉(zhuǎn)換那么不轉(zhuǎn)換SUB AL,20HSUB AL,20H; ;將小寫字母轉(zhuǎn)換為大寫字母將小寫字母轉(zhuǎn)換為大寫字母UNCHG:UNCHG:MOVMOVDI,ALDI,ALINC SIINC SIINC DIINC DILOOP NEXTCHARLOOP NE

22、XTCHAR第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-65-6】續(xù)】續(xù)MOV AH,4CHMOV AH,4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計循環(huán)構(gòu)造程序設(shè)計舉例續(xù)循環(huán)構(gòu)造程序設(shè)計舉例續(xù)v【例【例5-75-7】 編程以二進制方式顯示編程以二進制方式顯示BXBX的值假的值假設(shè)為無符號數(shù)。設(shè)為無符號數(shù)。v 假設(shè)假設(shè)(BX)=20(BX)=20,那么顯示:,那么顯示:0000000000010100B0000000000010100B。v分析:分析:v由于知由

23、于知BXBX是是1616位的,因此,循環(huán)的次數(shù)就是位的,因此,循環(huán)的次數(shù)就是1616次次,所以可以采用計數(shù)法控制循環(huán)。,所以可以采用計數(shù)法控制循環(huán)。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-75-7】續(xù)】續(xù)CODE SEGMENT CODE SEGMENT ASSUME CS:CODE ASSUME CS:CODESTART: START: MOV AX,DATAMOV AX,DATA MOV DS,AX MOV DS,AX MOV BX,20 MOV BX,20 MOV CX,16 ; MOV CX,16 ; 計數(shù)器計

24、數(shù)器CX,CX,置初值置初值1616NEXTCHAR:NEXTCHAR: ROL BX,1 ROL BX,1 ; ;顯示順序是從左往右顯示順序是從左往右, , MOV DL,BL MOV DL,BL ; ;要顯示的值僅占最低位要顯示的值僅占最低位D0D0 AND DL,1 AND DL,1 ; ;去除去除D7D7D1D1 OR DL,30H OR DL,30H MOV AH,2 MOV AH,2 INT 21H INT 21H; ;利用利用2 2號號DOSDOS調(diào)用顯示調(diào)用顯示LOOP NEXTCHARLOOP NEXTCHAR; ;循環(huán)執(zhí)行循環(huán)執(zhí)行1616次次FINISH:FINISH:MO

25、V DL,BMOV DL,BMOV AH,2MOV AH,2INT 21HINT 21H; ;利用利用2 2號號DOSDOS調(diào)用調(diào)用, ,顯示顯示BBMOV AH,4CHMOV AH,4CHINT 21HINT 21H ; ; 前往操作系統(tǒng)前往操作系統(tǒng)CODE ENDSCODE ENDSEND STARTEND START第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計v【例【例5-85-8】 編程以十六進制方式顯示編程以十六進制方式顯示BXBX的的值假設(shè)為無符號數(shù)。值假設(shè)為無符號數(shù)。v如如(BX)=20(BX)=20,那么顯示,那么顯示0014H0014H。第第5 5章章 分支與循環(huán)程序

26、設(shè)計分支與循環(huán)程序設(shè)計N第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計CODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATAMOV AX,DATAMOV DS,AX MOV DS,AX MOV BX,20MOV BX,20;BX;BX中存放的是要顯示的數(shù)中存放的是要顯示的數(shù)MOV CH,4MOV CH,4第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-85-8】續(xù)】續(xù)NEXT:NEXT:MOVMOV CL,4 CL,4ROL BX,CL

27、ROL BX,CL ; ;將最高將最高4 4位二進制值移至低位二進制值移至低4 4位位MOV DL,BLMOV DL,BLAND DL,0FHAND DL,0FH; ;僅保管本次要顯示的數(shù)值僅保管本次要顯示的數(shù)值OR DL,30H ;OR DL,30H ;得到要顯示的字符的得到要顯示的字符的ASCIIASCII值值CMP DL,39H ;CMP DL,39H ;是小于是小于99JBE DISPHEXJBE DISPHEXADD DL,7ADD DL,7; ;得到得到10101515所對應(yīng)的字符所對應(yīng)的字符ASCIIASCII值值第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-8

28、5-8】續(xù)】續(xù)DISPHEX:DISPHEX:MOV AH,2MOV AH,2INT 21HINT 21H; ;利用利用DOSDOS功能調(diào)用功能調(diào)用, ,顯示字符顯示字符DEC CHDEC CHJNZ NEXTJNZ NEXT ; ;顯示下一位十六進制數(shù)字顯示下一位十六進制數(shù)字MOV DL,HMOV DL,H; ;顯示字符顯示字符HHMOV AH,2MOV AH,2INT 21HINT 21HMOV AH,4CHMOV AH,4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計v【例【例5

29、-95-9】 編程以十進制方式顯示編程以十進制方式顯示BXBX的值的值假設(shè)為無符號數(shù)。假設(shè)為無符號數(shù)。v如如(BX)=20(BX)=20,那么顯示,那么顯示20D20D。v分析:分析:v本例分兩步實現(xiàn)。本例分兩步實現(xiàn)。v1 1轉(zhuǎn)換并保管結(jié)果。轉(zhuǎn)換并保管結(jié)果。v2 2顯示。顯示。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-95-9】續(xù)】續(xù)v本例分兩步實現(xiàn)。本例分兩步實現(xiàn)。v1 1轉(zhuǎn)換并保管結(jié)果轉(zhuǎn)換并保管結(jié)果v這一步將二進制數(shù)轉(zhuǎn)換為十進制值,即求出十進制這一步將二進制數(shù)轉(zhuǎn)換為十進制值,即求出十進制值各位上的數(shù)字。由于值各位上的數(shù)字。由于1616位二進制數(shù)最大能表示的位二進制數(shù)最

30、大能表示的數(shù)是數(shù)是6553565535,所以,轉(zhuǎn)換后,最多是一個萬位的十進,所以,轉(zhuǎn)換后,最多是一個萬位的十進制數(shù)。轉(zhuǎn)換的步驟就是:把要轉(zhuǎn)換的數(shù)依次除以制數(shù)。轉(zhuǎn)換的步驟就是:把要轉(zhuǎn)換的數(shù)依次除以1000010000,10001000,100100和和1010,分別可以得到萬位數(shù)字、,分別可以得到萬位數(shù)字、千位數(shù)字、百位數(shù)字和十位數(shù)字。除以千位數(shù)字、百位數(shù)字和十位數(shù)字。除以1010得到的余得到的余數(shù)就是個位數(shù)字。程序中,將得到的這些數(shù)字先存數(shù)就是個位數(shù)字。程序中,將得到的這些數(shù)字先存入內(nèi)存指定單元,供顯示模塊運用。入內(nèi)存指定單元,供顯示模塊運用。v2 2顯示顯示v本例程序把轉(zhuǎn)換和顯示分成兩個模塊

31、來實現(xiàn),使得本例程序把轉(zhuǎn)換和顯示分成兩個模塊來實現(xiàn),使得程序的構(gòu)造明晰。程序的構(gòu)造明晰。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-95-9】續(xù)】續(xù)DATA SEGMENT DATA SEGMENT DECNUM DB 5 DUP(?)DECNUM DB 5 DUP(?)DATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART: START: MOV AX,DATAMOV AX,DATAMOV DS,AX MOV DS,AX MOV BX,65

32、530MOV BX,65530; ;要轉(zhuǎn)換的值要轉(zhuǎn)換的值LEA SI,DECNUMLEA SI,DECNUM第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-95-9】續(xù)】續(xù) MOV DX,0 MOV DX,0 MOV AX,BX MOV AX,BXMOV CX,10000MOV CX,10000DIV CXDIV CXMOV SI,AL;MOV SI,AL;求得萬位的值求得萬位的值, ,存入指定單元存入指定單元INC SIINC SIMOV AX,DXMOV AX,DXMOV DX,0MOV DX,0MOV CX,1000MOV CX,1000DIV CXDIV CXMOV S

33、I,AL;MOV SI,AL;求得千位的值求得千位的值, ,存入指定單元存入指定單元第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-95-9】續(xù)】續(xù) INC SI INC SIMOV AX,DXMOV AX,DXMOV DX,0MOV DX,0MOV CX,100MOV CX,100DIV CXDIV CXMOV SI,AL;MOV SI,AL;求得百位的值求得百位的值, ,存入指定單元存入指定單元INC SIINC SIMOV AX,DXMOV AX,DXMOV CL,10MOV CL,10DIV CLDIV CLMOV SI,ALMOV SI,AL; ;求得十位的值求得十位

34、的值, ,存入指定單元存入指定單元第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-95-9】續(xù)】續(xù) INC SI INC SIMOV SI,AHMOV SI,AH ; ;此時此時, ,余數(shù)就是個位的值余數(shù)就是個位的值, ,LEA SI,DECNUMLEA SI,DECNUMMOV CX,5MOV CX,5DISP:DISP:MOVMOVDL,SIDL,SI; ;依次取出十進制數(shù)各位的值依次取出十進制數(shù)各位的值OR DL,30HOR DL,30H; ;將取出的值轉(zhuǎn)換為將取出的值轉(zhuǎn)換為ASCIIASCII值值MOV AH,2MOV AH,2INT 21HINT 21H; ;利用利用

35、DOSDOS功能調(diào)用功能調(diào)用, ,顯示顯示INC SIINC SILOOP DISPLOOP DISP第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計【例【例5-95-9】續(xù)】續(xù) MOV DL,D MOV DL,DMOV AH,2MOV AH,2INT 21HINT 21HMOV AH,4CHMOV AH,4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計條件循環(huán)程序條件循環(huán)程序v假設(shè)循環(huán)次數(shù)預(yù)先不能確定,可謂設(shè)法根據(jù)問題假設(shè)循環(huán)次數(shù)預(yù)先不能確定,可謂設(shè)法根據(jù)問題的特定條件進展循環(huán)控

36、制。如例的特定條件進展循環(huán)控制。如例1 1v例:求例:求12+22+32+12+22+32+。前項的和剛大于前項的和剛大于10001000的項數(shù)的項數(shù)N,N,并將項數(shù)存入到并將項數(shù)存入到T T單元中。單元中。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計DATA SEGMENT DATA SEGMENT T DB ? T DB ?DATA ENDSDATA ENDSCOSEG SEGMENT COSEG SEGMENT ASSUME DS:DATA,CS:COSEGASSUME DS:DATA,CS:COSEGSTART: MOV AX,DATASTART: MOV AX,DATA MO

37、V DS,AX MOV DS,AX MOV CL,0 ; MOV CL,0 ;項數(shù)計數(shù)器項數(shù)計數(shù)器 MOV DL,0 MOV DL,0 ;自然數(shù)計數(shù)器;自然數(shù)計數(shù)器 MOV BX,0 MOV BX,0 ;和;和INCR: INC DL INCR: INC DL ;構(gòu)成一個自然數(shù);構(gòu)成一個自然數(shù)第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計MOV AL,DLMOV AL,DLMOV SH,ALMOV SH,ALMUL AHMUL AHADD BX,AX ADD BX,AX ;計算累加和;計算累加和INC CL INC CL ;計項數(shù);計項數(shù)CMP BX,1000CMP BX,1000JA

38、ATORENJA ATORENJMP INCR JMP INCR ;和;和=1000=1000,繼續(xù)求下一項,繼續(xù)求下一項STOREN:MOV T,CLSTOREN:MOV T,CLMOV AH,4CHMOV AH,4CHINT 21HINT 21HCOSEG ENDSCOSEG ENDS END START END START第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計v【例【例5-105-10】 請用冒泡排序法編程將內(nèi)存請用冒泡排序法編程將內(nèi)存ARRAYARRAY單元開場存儲的一組單元開場存儲的一組8 8位帶符號數(shù)據(jù)按位帶符號數(shù)據(jù)按從大到小陳列從大到小陳列 v編制多重循環(huán)程序時要留

39、意內(nèi)外循環(huán)應(yīng)完全編制多重循環(huán)程序時要留意內(nèi)外循環(huán)應(yīng)完全嵌套在外循環(huán)內(nèi),不得出現(xiàn)內(nèi)外循環(huán)交叉,嵌套在外循環(huán)內(nèi),不得出現(xiàn)內(nèi)外循環(huán)交叉,內(nèi)外循環(huán)的初始化部分也不能混淆。內(nèi)外循環(huán)的初始化部分也不能混淆。v冒泡法:冒泡法:N N個數(shù)要進展個數(shù)要進展N-1N-1趟。第一趟從第一趟。第一趟從第一個開場一次對相鄰兩個數(shù)進展比較,假設(shè)數(shù)個開場一次對相鄰兩個數(shù)進展比較,假設(shè)數(shù)的大小次序錯誤,那么交換,否那么不作任的大小次序錯誤,那么交換,否那么不作任何操作。進展何操作。進展N-1N-1次比較終了時,最小數(shù)排在次比較終了時,最小數(shù)排在最后。然后,進展第二趟,只需求進展最后。然后,進展第二趟,只需求進展N-2N-2次

40、次比較,就可排好次小數(shù)。第三趟,進展比較,就可排好次小數(shù)。第三趟,進展N-3N-3次次比較,比較,依次類推。依次類推。第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計DATA SEGMENT DATA SEGMENT NUMNUMDBDB5,9,8,7,3,155,9,8,7,3,15LENLENEQUEQU$-NUM$-NUMDATA ENDSDATA ENDSCODE SEGMENT CODE SEGMENT ASSUME ASSUME CS:CODE,DS:DATACS:CODE,DS:DATASTART:START:MOV AX,

41、DATAMOV AX,DATAMOV DS,AX MOV DS,AX MOV CX,LENMOV CX,LEN DEC CX DEC CX;CX;CX比較趟數(shù),即外循環(huán)次數(shù)比較趟數(shù),即外循環(huán)次數(shù)第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計LOP1:LOP1: MOV DX,CXMOV DX,CX; ; 保管外循環(huán)次數(shù)在保管外循環(huán)次數(shù)在DXDX,內(nèi)循環(huán)比較次,內(nèi)循環(huán)比較次數(shù)在數(shù)在CXCX中。中。 MOV SI,0 MOV SI,0 LOP2: LOP2: MOV AL,NUMSI MOV AL,NUMSI CMP AL,ANUMSI+1 CMP AL,ANUMSI+1 ; ;相鄰兩數(shù)據(jù)比較相鄰兩數(shù)據(jù)比較 JAE CONT JAE CONT XCHG XCHG AL,NUMSI+1 AL,NUMSI+1 MOV MOV NUMSI,AL NUMSI,ALCONT :INC SI ;CONT :INC SI ;修正數(shù)據(jù)地址指針修正數(shù)據(jù)地址指針LOOP LOP2LOOP LOP2; ; 內(nèi)循環(huán)終了內(nèi)循環(huán)終了 MOV CX,DX MOV CX,DX ;恢復(fù)外循環(huán)計數(shù)值;恢復(fù)外循環(huán)計數(shù)值LOOP LOP1 LOOP LOP1 ;外循環(huán)能否終了;外循環(huán)能否終了第第5 5章章 分支與循環(huán)程序設(shè)計分支與循環(huán)程序設(shè)計MOV AH,4CHMOV AH,4CHIN

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論