微機(jī)原理課設(shè)參考資料之一:軟件流程與軟件程序的例子_第1頁
微機(jī)原理課設(shè)參考資料之一:軟件流程與軟件程序的例子_第2頁
微機(jī)原理課設(shè)參考資料之一:軟件流程與軟件程序的例子_第3頁
微機(jī)原理課設(shè)參考資料之一:軟件流程與軟件程序的例子_第4頁
微機(jī)原理課設(shè)參考資料之一:軟件流程與軟件程序的例子_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)微機(jī)原理與接口技術(shù)程序與流程編寫程序?qū)崿F(xiàn)下列5項(xiàng)功能,通過從鍵盤輸入15進(jìn)行菜單式選擇:(1)按數(shù)字鍵“1”,完成將字符串中的小寫字母變換成大寫字母。用戶輸入由英文大小寫字母或數(shù)字09組成的字符串(以回車結(jié)束),變換后按下列格式在屏幕上顯示:例如:abcdgyt0092 ABCDGYT0092 按任一鍵重做;按Esc鍵返回主菜單。(2)按數(shù)字鍵“2”,完成在字符串中找最大值。用戶輸入由英文大小寫字母或數(shù)字 09組成的字符串(以回車結(jié)束),找出最大值后按下列格式在屏幕上顯

2、示: The maximum is 按任一鍵重做;按Esc鍵返回主菜單。(3)按數(shù)字鍵“3”,完成輸入數(shù)據(jù)組的排序。用戶輸入一組十進(jìn)制數(shù)值(小于255), 然后變換成十六進(jìn)制數(shù),并按遞增方式進(jìn)行排序,按下列格式在屏幕上顯示: 按任一鍵重做;按Esc鍵返回主菜單。(4)按數(shù)字鍵“4”,完成時(shí)間的顯示。首先提示用戶對(duì)時(shí),即改變系統(tǒng)的定時(shí)器 HH:MM:SS(以冒號(hào)間隔,回車結(jié)束),然后在屏幕的右上角實(shí)時(shí)顯示出時(shí) 間:HH:MM:SS。 按任一鍵重新對(duì)時(shí);按Esc鍵返回主菜單。(5)按數(shù)字鍵“5”,結(jié)束程序的運(yùn)行,返回操作系統(tǒng)。解答過程:主程序的編程思路:此程序共5個(gè)功能,可采用跳轉(zhuǎn)表法來實(shí)現(xiàn)多路分

3、支結(jié)構(gòu)程序設(shè)計(jì)?,F(xiàn)將這5個(gè)程序段,各程序段的首地址分別標(biāo)號(hào)為G1,G2,G3,G4,G5。將5個(gè)程序段的入口地址做成表TABLE放入數(shù)據(jù)段,程序根據(jù)給定的參數(shù)計(jì)算出欲轉(zhuǎn)入的程序段的首地址在TABLE中的位置后,取出該地址,跳轉(zhuǎn)至該程序段。首先,通過調(diào)用子程序MENU,設(shè)置顯示器,并輸出提示文檔。接著,讀取1-5之間的ASCII表示數(shù)。然后,通過跳轉(zhuǎn)表TABLE實(shí)現(xiàn)由輸入?yún)?shù)轉(zhuǎn)入相應(yīng)的程序段。由于表中按“字”存放數(shù)據(jù),則每個(gè)數(shù)據(jù)的位移量是:0、2、4、6、8。對(duì)于輸入?yún)?shù)N,計(jì)算位移量的公式是N=(N-1)*2。當(dāng)輸入1時(shí),跳轉(zhuǎn)到標(biāo)號(hào)G1。調(diào)用子程序CHGLTR,完成將輸入字符串中的小寫字母變換

4、成大寫字母。用戶按鍵,若為ESC,則轉(zhuǎn)到主程序段首調(diào)用MENU,否則,轉(zhuǎn)到標(biāo)號(hào)G1;當(dāng)輸入2時(shí),跳轉(zhuǎn)到標(biāo)號(hào)G2。調(diào)用子程序MAXLTR,完成在輸入字符串中找最大值。用戶按鍵,若為ESC,則轉(zhuǎn)到主程序段首調(diào)用MENU,否則,轉(zhuǎn)到標(biāo)號(hào)G2;當(dāng)輸入3時(shí),跳轉(zhuǎn)到標(biāo)號(hào)G3。調(diào)用子程序SORTNUM,完成輸入數(shù)據(jù)組的排序。用戶按鍵,若為ESC,則轉(zhuǎn)到主程序段首調(diào)用MENU,否則,轉(zhuǎn)到標(biāo)號(hào)G3。當(dāng)輸入4時(shí),跳轉(zhuǎn)到標(biāo)號(hào)G4。調(diào)用子程序TIMCHK,完成時(shí)間的顯示。用戶按鍵,若為ESC,則轉(zhuǎn)到主程序段首調(diào)用MENU,否則,轉(zhuǎn)到標(biāo)號(hào)G4。當(dāng)輸入5時(shí),跳轉(zhuǎn)到標(biāo)號(hào)G5。結(jié)束程序的運(yùn)行,返回操作系統(tǒng)。其流程框圖見圖3-

5、1。圖3-1 主程序流程框圖START初始化調(diào)用子程序MENU,顯示主界面設(shè)置光標(biāo)位置(41,10)帶回顯的控制臺(tái)輸入(AL) 輸入字符(AL) 5將跳轉(zhuǎn)表TABLE的偏移地址送入(BX)(AL) (AL) 1(AL) (AL) * 2AL按符號(hào)擴(kuò)展成AX(BX) TABLE(BX) (BX) + (AX)ABCEENDDN=1N=2N=3N=4N=5NNYY圖3-1(續(xù)) 主程序流程框圖調(diào)用子程序MAXLTR帶回顯的控制臺(tái)輸入(AL) 輸入字符BE(AL) = ESC ?YN調(diào)用子程序TIMCHK帶回顯的控制臺(tái)輸入(AL) 輸入字符DE(AL) = ESC ?YN調(diào)用子程序SORTNUM帶回

6、顯的控制臺(tái)輸入(AL) 輸入字符CE(AL) = ESC ?YN調(diào)用子程序CHGLTR帶回顯的控制臺(tái)輸入(AL) 輸入字符AE(AL) = ESC ?YN子程序MENU的編程思路:注意:子程序不要用START開頭!設(shè)置顯示器顯示方式為80*25彩色文本方式,清屏。逐行設(shè)置光標(biāo)位置,使提示文檔左對(duì)齊整體居中。輸出1-5的提示文檔,再輸出輸入N的提示。其流程框圖見圖3-2。圖3-2 子程序MENU流程框圖START初始化 清屏設(shè)置光標(biāo)位置(5,5)顯示提示字符串STRING1設(shè)置光標(biāo)位置(5,6)顯示提示字符串STRING2M設(shè)置光標(biāo)位置(5,7)顯示提示字符串STRING3設(shè)置光標(biāo)位置(5,8)

7、顯示提示字符串STRING4MN設(shè)置光標(biāo)位置(5,9)顯示提示字符串STRING5設(shè)置光標(biāo)位置(5,10)顯示提示字符串STRINGN子程序MENU返回NSTART初始化 清屏設(shè)置光標(biāo)位置(5,5)顯示提示字符串IN_STR設(shè)置光標(biāo)位置(5,6)KEYBUF 輸入字符串在字符串尾加結(jié)束標(biāo)志$設(shè)置光標(biāo)位置(5,7)顯示提示字符串PRESTR顯示輸入的字符串(BX) KEYBUF + 2(BX) (BX) + 1(BX) (BX) 0DFH子程序CHGLTR返回(AL) 輸入字符串長(zhǎng)度AL按符號(hào)擴(kuò)展成AX(CX) (AX)(BX) a(CX) (CX) 1(CX) = 0 ?設(shè)置光標(biāo)位置(5,8)

8、顯示提示字符串NEWSTR顯示變換后的字符串設(shè)置光標(biāo)位置(5,9)顯示提示字符串HINSTRYNYN圖3-3 子程序CHGLTR流程框圖子程序CHGLTR的編程思路:設(shè)置顯示器顯示方式為80*25彩色文本方式,清屏。設(shè)置光標(biāo)位置,使提示文檔左對(duì)齊整體居中。輸出輸入字符串提示文檔,讀取輸入字符串并將其放入KEYBUF。在輸入字符串尾加結(jié)束標(biāo)志$,輸出輸入字符串。從前往后,依次取字符串中的每個(gè)字符,若其為小寫字母,則將其ASCII碼減去20H。輸出變換后的字符串。最后輸出說明文檔。其流程框圖見圖3-3。子程序MAXLTR的編START初始化 清屏設(shè)置光標(biāo)位置(5,5)顯示提示字符串IN_STR設(shè)置

9、光標(biāo)位置(5,6)KEYBUF 輸入字符串在字符串尾加結(jié)束標(biāo)志$設(shè)置光標(biāo)位置(5,7)顯示提示字符串OUT_STR顯示輸入的字符串設(shè)置光標(biāo)位置(5,8)顯示提示字符串MAXCHR(DL) 0(BX) KEYBUF + 2(BX) (BX) + 1(DL) (BX)子程序MAXLTR返回(AL) 輸入字符串長(zhǎng)度AL按符號(hào)擴(kuò)展成AX(CX) (AX)(BX) (DL)(CX) (CX) 1(CX) = 0 ?顯示字符(DL)設(shè)置光標(biāo)位置(5,9)顯示提示字符串HINSTRYNYN圖3-4 子程序MAXLTR流程框圖程思路:設(shè)置顯示器顯示方式為80*25彩色文本方式,清屏。設(shè)置光標(biāo)位置,使提示文檔左

10、對(duì)齊整體居中。輸出輸入字符串提示文檔,讀取輸入字符串并將其放入KEYBUF。在輸入字符串尾加結(jié)束標(biāo)志$,輸出輸入字符串。預(yù)設(shè)字符串中最大值為0。從前往后,依次取字符串中的每個(gè)字符,若其大于當(dāng)前最大值,則進(jìn)行替換,即可得到字符串中的最大值,并輸出。最后輸出說明文檔。其流程框圖見圖3-4。子程序SORTNUM的編程思路:START初始化 清屏設(shè)置光標(biāo)位置(5,5)顯示提示字符串IN_NUM設(shè)置光標(biāo)位置(5,6)KEYBUF 輸入字符串子程序SORTNUM返回調(diào)用子程序CIN_INT(AL) = 0 ?設(shè)置光標(biāo)位置(5,9)顯示提示字符串HINSTRNY設(shè)置光標(biāo)位置(5,7)顯示提示字符串OUT_N

11、UM設(shè)置光標(biāo)位置(5,8)調(diào)用子程序MPSORT調(diào)用子程序INT_OUT圖3-5 子程序SORTNUM流程框圖設(shè)置顯示器顯示方式為80*25彩色文本方式,清屏。設(shè)置光標(biāo)位置,使提示文檔左對(duì)齊整體居中。輸出輸入數(shù)據(jù)組提示文檔,讀取輸入數(shù)據(jù)組字符串并將其放入KEYBUF。調(diào)用子程序CIN_INT,將字符串轉(zhuǎn)換成數(shù)據(jù)串。判斷數(shù)據(jù)串是否有錯(cuò)誤或者為空,若是,則重新輸入數(shù)據(jù)組。調(diào)用子程序MPSORT,采用冒泡法對(duì)數(shù)據(jù)串進(jìn)行排序。再調(diào)用子程序INT_OUT,輸出排序后的數(shù)據(jù)組。最后輸出說明文檔。其流程框圖見圖3-5。 SHAPE * MERGEFORMAT 子程序CIN_INT的編程思路:入口參數(shù)為:無;

12、出口參數(shù)為:AL(有無錯(cuò)誤標(biāo)志,0為有,1為無)。從前往后,依次取字符串中的每個(gè)字符進(jìn)行判斷。CH表示數(shù)據(jù)組數(shù)據(jù)個(gè)數(shù),AL表示當(dāng)前數(shù)據(jù)x,DL作為有無數(shù)據(jù)標(biāo)志。若當(dāng)前字符為空格,則轉(zhuǎn)到ADDNUM,判斷DL是否為1,若為1,則CH增1,調(diào)用子程序ADDNEW,增加新數(shù)x,然后DL、AL清零;否則判斷當(dāng)前字符c是否在0-9之間,若不是,則判錯(cuò),將AL置0,子程序CIN_INT返回;否則,DL置1,x=x*10+c-0,判斷x是否超過255,若是,則判錯(cuò),將AL置0,子程序CIN_INT返回;否則,對(duì)下一個(gè)字符進(jìn)行操作。字符串判斷結(jié)束后,若DL為1,則有新數(shù)x未加至數(shù)據(jù)組,調(diào)用子程序ADDNEW,

13、增加新數(shù)x。將數(shù)據(jù)組個(gè)數(shù)CH放入NUMBUF,將AL置1。其流程框圖見圖3-6。子程序ADDNEW的編程思路:入口參數(shù)為:CH(數(shù)據(jù)組數(shù)據(jù)個(gè)數(shù))、AL(當(dāng)前數(shù)據(jù)x);出口參數(shù)為:無。取出數(shù)據(jù)組NUMBUF的首地址,加上數(shù)據(jù)組數(shù)據(jù)個(gè)數(shù),即為當(dāng)前數(shù)據(jù)x的地址,將x放入該地址。其流程框圖見圖3-7。NSTART初始化(CL) 輸入字符串長(zhǎng)度(SI) KEYBUF + 2(CH) 0(DH) 10(AL) 0(DL) 0子程序CIN_INT返回(DL) 1(AX) (AL) * (DH)(BH) 0(BL) (SI)(AX) (AX) + (BX)(AX) (AX) 0(SI) = ?(CH) (CH

14、) + 1調(diào)用子程序ADDNEWYNUMBUF (CH)(AL) 1(SI) 9(AH) 0(AL) 0(CH) (CH) + 1調(diào)用子程序ADDNEW(DL) 0(AL) 0(DL) 1 ?YYYNNNYNRRR(SI) (SI) + 1(CL) (CL) - 1(CL) 0 ?(DL) 1 ?YYNNTRT圖3-6 子程序CIN_INT流程框圖圖3-7 子程序ADDNEW流程框圖START初始化BX、AX進(jìn)棧(BX) NUMBUF(AL) (CH)AL按符號(hào)擴(kuò)展成AX(BX) (BX) + (AX)AX出棧(BX) (AL)BX出棧子程序ADDNEW返回圖3-8 子程序MPSORT流程框圖

15、STARTN子程序MPSORT返回CX、SI進(jìn)棧(DL) 0(AL) 1SI、CX出棧NY(AL) (SI)(AL) (SI)1)(CX) (CX) 1(CX) = 0 ?(BX) 9(AL) (NUMBUF)AL按符號(hào)擴(kuò)展成AX(CX) (AX)(SI) NUMBUF(SI) (SI) + (CX)(CX) (CX) 1YY(AL) (SI1)(SI) (AL)(DL) 1(SI) (SI) - 1(CX) (CX) 1(CX) = 0 ?(BX) 9(DL) = 1 ?NNNYY子程序MPSORT的編程思路:對(duì)N個(gè)數(shù)據(jù)進(jìn)行從小到大排序,采用“冒泡法”:從前往后,每?jī)蓚€(gè)數(shù)據(jù)進(jìn)行比較,當(dāng)前者大

16、于后者時(shí),交換兩者的次序;否則不變。經(jīng)過N-1次比較,可以將最大值交換到第N個(gè)單元。接著對(duì)前N-1個(gè)數(shù)據(jù),重復(fù)上述過程,使次大值交換到第N-1個(gè)單元;依此類推,若某次比較過程,無任何交換,則終止其后的所有比較過程。最多進(jìn)行N-1次比較過程,可以完成數(shù)據(jù)的排序操作。其流程圖見圖3-8。子程序IN_OUT的編程思路:START初始化(AL) (NUMBUF)AL按符號(hào)擴(kuò)展成AX(CX) (AX)(BL) 10H(SI) NUMBUF + 1(AL) (SI)調(diào)用子程序OUTNUM(SI) (SI) + 1顯示字符 子程序INT_OUT返回NY(CX) (CX) 1(CX) = 0 ?(BX) 9圖

17、3-9 子程序INT_OUT流程框圖從數(shù)據(jù)組中依次取出每個(gè)數(shù)據(jù),調(diào)用OUTNUM,將十進(jìn)制數(shù)據(jù)轉(zhuǎn)成十六進(jìn)制進(jìn)行輸出,數(shù)據(jù)之間輸出一個(gè)空格作為分隔符。其流程圖見圖3-9。START初始化(AH) 0(AX)/(BL) 商(AL),余(AH)AX進(jìn)棧(AH) (AH)+30H(DL) (AH)AX出棧,DX進(jìn)棧子程序OUTNUM返回NY(AH) 10YN(AH) (AH)+7(AL) = 0 ?調(diào)用子程序OUTNUMDX出棧顯示字符(DL)圖3-10 子程序OUTNUM流程框圖子程序OUTNUM的編程思路:入口參數(shù):AL(待轉(zhuǎn)換的數(shù)據(jù)),BL(轉(zhuǎn)換進(jìn)制數(shù));出口參數(shù):無。待轉(zhuǎn)換數(shù)據(jù)x除以轉(zhuǎn)換進(jìn)制數(shù)

18、,商為新的x,余數(shù)y為轉(zhuǎn)換后的低位。保存y,調(diào)用子程序OUTNUM本身,對(duì)新的x進(jìn)行進(jìn)制轉(zhuǎn)換并輸入。取出y,對(duì)其進(jìn)行輸入,若低于10,則直接輸出,否則轉(zhuǎn)換成字母輸出。其流程圖見圖3-10。子程序TIMCHK的編程思路:START初始化 清屏(DL) 0置系統(tǒng)時(shí)間子程序TIMCHK返回(AL)0或(AL)60YN調(diào)用子程序TIME設(shè)置光標(biāo)位置(5,6)顯示提示字符串IN_TIMKEYBUF 輸入字符串(AL) 輸入字符串的7-8位數(shù)值(秒)(AL)0或(AL)24YN(AL) 輸入字符串的1-2位數(shù)值(時(shí))(AL)AXLEA BX, TABLEADD BX, AXJMP WORD PTR BXG

19、1:CALL FAR PTR CHGLTRMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G1G2:CALL FAR PTR MAXLTRMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G2G3:CALL FAR PTR SORTNUMMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G3G4:CALL FAR PTR TIMCHKMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G4G5:MOV AH, 4CHINT 21HMENUPROC FAR; 顯示主界面;設(shè)置顯示器方式MOV

20、AH, 0MOV AL, 3;MOV BL, 0;INT 10H; 清屏MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 5; 行號(hào)INT 10H; 光標(biāo)位置設(shè)置MOV AH, 9LEA DX, STRING1INT 21HMOV AH, 2MOV DL, 5; 列號(hào)MOV DH, 6; 行號(hào)INT 10H; 光標(biāo)位置設(shè)置MOV AH, 9LEA DX, STRING2INT 21HMOV AH, 2MOV DL, 5; 列號(hào)MOV DH, 7; 行號(hào)INT 10H; 光標(biāo)位置設(shè)置MOV AH, 9LEA DX, STRING3INT 21HMOV AH,

21、2MOV DL, 5; 列號(hào)MOV DH, 8; 行號(hào)INT 10H; 光標(biāo)位置設(shè)置MOV AH, 9LEA DX, STRING4INT 21HMOV AH, 2MOV DL, 5; 列號(hào)MOV DH, 9; 行號(hào)INT 10H; 光標(biāo)位置設(shè)置MOV AH, 9LEA DX, STRING5INT 21HMOV AH, 2MOV DL, 5; 列號(hào)MOV DH, 10; 行號(hào)INT 10H; 光標(biāo)位置設(shè)置MOV AH, 9LEA DX, STRINGNINT 21HRETMENUENDPCHGLTRPROC FAR; 將輸入字符串中小寫字母便換成大寫字母RECHG:;設(shè)置顯示器方式MOV A

22、H, 0MOV AL, 3MOV BL, 0INT 10H; 清屏MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 5; 行號(hào)INT 10H; 輸入提示光標(biāo)位置設(shè)置MOV AH, 9LEA DX, IN_STRINT 21H; 輸入字符串提示MOV AH, 2MOV DL, 5; 列號(hào)MOV DH, 6; 行號(hào)INT 10H; 輸入字符串光標(biāo)位置設(shè)置MOV AH, 0AHLEA DX, KEYBUFINT 21H; 輸入字符串CMP KEYBUF + 1, 0JZ RECHG ; 判斷輸入字符串是否為空串LEA BX, KEYBUF + 2MOV AL, K

23、EYBUF + 1CBWMOV CX, AXADD BX, AXMOV BYTE PTR BX, $; 在輸入字符串尾加結(jié)束標(biāo)志$MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 7; 行號(hào)INT 10H; 源字符串提示光標(biāo)位置設(shè)置MOV AH, 9LEA DX, PRESTRINT 21H; 輸出源字符串提示MOV AH, 9LEA DX, KEYBUF + 2INT 21H; 輸出源字符串LEA BX, KEYBUF + 2LCHG:CMP BYTE PTR BX, 61HJB NOCHGAND BYTE PTR BX, 0DFHNOCHG:INC BX

24、LOOP LCHG; 將字符串中小寫字母轉(zhuǎn)換成大寫字母MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 8; 行號(hào)INT 10H; 新字符串提示光標(biāo)位置設(shè)置MOV AH, 9LEA DX, NEWSTRINT 21H; 輸出新字符串提示MOV AH, 9LEA DX, KEYBUF + 2INT 21H; 輸出新字符串MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 9; 行號(hào)INT 10H; 提示信息光標(biāo)位置設(shè)置MOV AH, 9LEA DX, HINTSTRINT 21H; 輸出提示信息RETCHGLTRENDPMAX

25、LTRPROC FAR; 在輸入字符串中找出最大值REMAX:;設(shè)置顯示器方式MOV AH, 0MOV AL, 3MOV BL, 0INT 10H; 清屏MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 5; 行號(hào)INT 10H; 輸入提示光標(biāo)位置設(shè)置MOV AH, 9LEA DX, IN_STRINT 21H; 輸入字符串提示MOV AH, 2MOV DL, 5; 列號(hào)MOV DH, 6; 行號(hào)INT 10H; 輸入字符串光標(biāo)位置設(shè)置MOV AH, 0AHLEA DX, KEYBUFINT 21H; 輸入字符串CMP KEYBUF + 1, 0JZ REM

26、AX; 判斷輸入字符串是否為空串LEA BX, KEYBUF + 2MOV AL, KEYBUF + 1CBWMOV CX, AXADD BX, AXMOV BYTE PTR BX, $; 在輸入字符串位加結(jié)束標(biāo)志$MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 7; 行號(hào)INT 10H; 源字符串提示光標(biāo)位置設(shè)置MOV AH, 9LEA DX, OUT_STRINT 21H; 輸出字符串提示MOV AH, 9LEA DX, KEYBUF + 2INT 21H; 輸出字符串MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH,

27、 8; 行號(hào)INT 10H; 新字符串提示光標(biāo)位置設(shè)置MOV AH, 9LEA DX, MAXCHRINT 21H; 輸出字符串中最大值提示MOV DL, 0LEA BX, KEYBUF + 2LCMP:CMP BX, DLJB NOLCHGMOV DL, BXNOLCHG:INC BXLOOP LCMP; 找出字符串中最大字符,放入DLMOV AH, 2INT 21H; 輸出字符串中最大字符MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 9; 行號(hào)INT 10H; 提示信息光標(biāo)位置設(shè)置MOV AH, 9LEA DX, HINTSTRINT 21H; 輸出

28、提示信息RETMAXLTRENDPSORTNUMPROC FAR; 對(duì)輸入數(shù)據(jù)組排序RESORT:;設(shè)置顯示器方式MOV AH, 0MOV AL, 3MOV BL, 0INT 10H; 清屏MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 5; 行號(hào)INT 10H; 輸入提示光標(biāo)位置設(shè)置MOV AH, 9LEA DX, IN_NUMINT 21HMOV AH, 2MOV DL, 5; 列號(hào)MOV DH, 6; 行號(hào)INT 10H; 輸入數(shù)據(jù)組光標(biāo)位置設(shè)置MOV AH, 0AHLEA DX, KEYBUFINT 21H; 輸入數(shù)據(jù)組字符串CALL CIN_IN

29、T; 字符串轉(zhuǎn)換成數(shù)據(jù)串CMP AL, 0JZ RESORT; 判斷數(shù)據(jù)串是否有錯(cuò)CMP NUMBUF, 0JZ RESORT; 判斷數(shù)據(jù)串是否為空MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 7; 行號(hào)INT 10H; 輸出提示光標(biāo)位置設(shè)置MOV AH, 9LEA DX, OUT_NUMINT 21H; 輸出數(shù)據(jù)串提示MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 8; 行號(hào)INT 10H; 輸出數(shù)據(jù)組光標(biāo)位置設(shè)置CALL FAR PTR MPSORT; 數(shù)據(jù)組排序CALL FAR PTR INT_OUT; 數(shù)據(jù)組

30、的輸出MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 9; 行號(hào)INT 10H; 提示信息光標(biāo)位置設(shè)置MOV AH, 9LEA DX, HINTSTRINT 21H; 輸出提示信息RETSORTNUMENDPCIN_INTPROC NEAR; 讀入整型數(shù); 入口參數(shù):無; 出口參數(shù)為:AL(有無錯(cuò)誤標(biāo)志,0為有,1為無)MOV CL, KEYBUF + 1LEA SI, KEYBUF + 2MOV CH, 0; 數(shù)據(jù)組數(shù)據(jù)個(gè)數(shù)置0MOV DH, 10MOV AL, 0; 當(dāng)前數(shù)據(jù)x=0MOV DL, 0; 有無數(shù)據(jù)標(biāo)志置0,即無數(shù)據(jù)FNDNUM:CMP B

31、YTE PTR SI, JZ ADDNUM; 判斷當(dāng)前字符是否為空格CMP BYTE PTR SI, 0JB ERRNUMCMP BYTE PTR SI, 9JA ERRNUM; 判斷當(dāng)前字符是否在0-9之間MOV DL, 1; 有無數(shù)據(jù)標(biāo)志置1,即有數(shù)據(jù)MUL DHXOR BH, BHMOV BL, SIADD AX, BXSUB AX, 0; 計(jì)算出當(dāng)前數(shù)據(jù)xCMP AH, 0JA ERRNUM; 判斷x是否越界JMP NEXTADDNUM:CMP DL, 1JNZ NEXT; 判斷是否有數(shù)據(jù)INC CH; 數(shù)據(jù)組數(shù)據(jù)個(gè)數(shù)加1CALL ADDNEWMOV DL, 0MOV AL, 0; 清

32、零NEXT:INC SIDEC CLCMP CL, 0JNZ FNDNUM; 依次檢查各字符CMP DL, 1JNZ TOTAL; 判斷是否有未加入的數(shù)據(jù)INC CHCALL ADDNEWTOTAL:MOV NUMBUF, CH; 置數(shù)據(jù)組數(shù)據(jù)個(gè)數(shù)MOV AL, 1; 輸入數(shù)據(jù)無錯(cuò)誤JMP CRTNUMERRNUM:MOV AL, 0; 輸入數(shù)據(jù)有錯(cuò)誤CRTNUM:RET CIN_INT ENDPADDNEWPROC NEAR; 增加新數(shù); 入口參數(shù):CH(數(shù)據(jù)組數(shù)據(jù)個(gè)數(shù))、AL(當(dāng)前數(shù)據(jù)x); 出口參數(shù):無PUSH AXLEA BX, NUMBUFMOV AL, CHCBWADD BX, A

33、XPOP AXMOV BX, ALRETADDNEWENDPMPSORTPROC FAR; 數(shù)據(jù)組排序MOV AL, NUMBUFCMP AL, 1JBE NOSORT; 若只有一個(gè)元素,停止排序CBWMOV CX, AXLEA SI, NUMBUF; SI指向數(shù)據(jù)組首地址ADD SI, CX; SI指向數(shù)據(jù)組末地址DEC CX; 外循環(huán)次數(shù)LP1:; 外循環(huán)開始PUSH CXPUSH SIMOV DL, 0; 交換標(biāo)志置0LP2:; 內(nèi)循環(huán)開始MOV AL, SICMP AL, SI - 1JAE NOXCHGXCHG AL, SI - 1; 交換操作MOV SI, ALMOV DL, 1;

34、 交換標(biāo)志置1NOXCHG:DEC SILOOP LP2POP SIPOP CXCMP DL, 1JNZ NOSORT; 判斷交換標(biāo)志LOOP LP1NOSORT:RETMPSORTENDPINT_OUTPROC FAR; 輸出數(shù)據(jù)組MOV AL, NUMBUFCBWMOV CX, AXMOV BL, 10HLEA SI, NUMBUF + 1PRINT:MOV AL, SICALL OUTNUMINC SIMOV AH, 2MOV DL, INT 21HLOOP PRINTRETINT_OUT ENDPOUTNUMPROC NEAR; 將十進(jìn)制數(shù)以十六進(jìn)制輸出; 入口參數(shù):AL(待轉(zhuǎn)換的數(shù)據(jù)

35、),BL(轉(zhuǎn)換進(jìn)制數(shù)16); 出口參數(shù):無MOV AH, 0DIV BLPUSH AXCMP AH, 10JB PNUMADD AH, 7PNUM:ADD AH, 30HMOV DL, AHPOP AXPUSH DXCMP AL, 0JZ OUTNCALL OUTNUMOUTN:POP DXMOV AH, 2INT 21HRETOUTNUMENDPTIMCHKPROC FAR; 設(shè)定并顯示時(shí)間;設(shè)置顯示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10H; 清屏MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 5; 列號(hào)MOV DH, 6; 行號(hào)INT 10

36、H; 設(shè)置提示光標(biāo)位置設(shè)置MOV AH, 9LEA DX, IN_TIMINT 21H; 時(shí)間串提示MOV AH, 0AHLEA DX, KEYBUFINT 21H; 輸入時(shí)間串MOV BL, 10MOV AL, KEYBUF + 2SUB AL, 0MUL BLADD AL, KEYBUF + 3SUB AL, 0CMP AL, 0JB INVALIDCMP AL, 24JAE INVALID; 判斷 時(shí) 有效性MOV CH, ALMOV AL, KEYBUF + 5SUB AL, 0MUL BLADD AL, KEYBUF + 6SUB AL, 0CMP AL, 0JB INVALIDCM

37、P AL, 60JAE INVALID; 判斷 分 有效性MOV CL, ALMOV AL, KEYBUF + 8SUB AL, 0MUL BLADD AL, KEYBUF + 9SUB AL, 0CMP AL, 0JB INVALIDCMP AL, 60JAE INVALID; 判斷 秒 有效性MOV DH, ALMOV DL, 0MOV AH, 2DHINT 21H; 置系統(tǒng)時(shí)間INVALID:CALL TIMERETTIMCHKENDPTIMEPROC; 顯示時(shí)間子程序;設(shè)置顯示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10H; 清屏MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 10; 列號(hào)MOV DH, 9; 行號(hào)INT 10H; 提示信息光標(biāo)位置設(shè)置MOV AH, 9LEA DX, HINTSTRINT 21H; 輸出提示信息DISP1:MOV AH, 2MOV BH, 0; 頁號(hào)MOV DL, 72; 列號(hào)MOV DH, 0; 行號(hào)INT 10H; 提示光標(biāo)位置設(shè)置MOV AH, 2CH; 取系統(tǒng)時(shí)間,CH,CL,DH分別存放時(shí)/分/秒INT 21HMOV AL, CH; 顯示 時(shí)CALL SHOWNUMMOV AH, 2MOV DL, :INT 21HMOV AL, CL; 顯示 分CALL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論