匯編課程設(shè)計成績管理系統(tǒng)源代碼[共30頁]
《匯編課程設(shè)計成績管理系統(tǒng)源代碼[共30頁]》由會員分享,可在線閱讀,更多相關(guān)《匯編課程設(shè)計成績管理系統(tǒng)源代碼[共30頁](31頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、XXXXX 課程設(shè)計說明書 匯編語言課程設(shè)計 班級: 網(wǎng)絡(luò)B101 姓名: XXX 學(xué)號 XXX 設(shè)計題目: 學(xué)生成績管理 設(shè)計時間: 2012.12.09 至 2012.12.21 指導(dǎo)教師: XXX 評 語:_______________________________ _______________________________________ ___________________
2、____________________ _______________________________________ _______________________________________ 評閱成績:___________評閱教師:____________ 一、 課程設(shè)計的目的 進行程序設(shè)計方法和技能的基本訓(xùn)練,鞏固在課堂上學(xué)到的有關(guān)程序設(shè)計的基本知識和基本方法,通過實際動手能力的培養(yǎng),進一步熟悉匯編語言的結(jié)構(gòu)和使用方法,達到能獨立閱讀、編制和調(diào)試一定規(guī)模的匯編語言程序的水平。 二、 設(shè)備與環(huán)境 PC兼容機、Windows操作系統(tǒng)、匯編程序masm for win
3、dows 2010 三、課程設(shè)計要求 1.要求編寫并調(diào)試通過一個小型軟件,實現(xiàn)對軟件或硬件的操作。 2.遵循模塊化、結(jié)構(gòu)化的程序設(shè)計方法。 3.要求程序必須正確。 4.程序簡明易懂,多運用輸入輸出提示,出錯信息及必要的注釋。 5.要求程序結(jié)構(gòu)合理,語句使用得當(dāng)。 6.適當(dāng)追求編程技巧和程序運行效率。 四、課程設(shè)計的課題和分析 題目:學(xué)生成績管理 分析: 建立學(xué)生成績文檔;輸入學(xué)生各門功課成績;(假設(shè)3門功課);修改指定學(xué)號的學(xué)生成績;統(tǒng)計指定學(xué)號的學(xué)生的平均成績、總成績,并在屏幕上顯示; 統(tǒng)計指定學(xué)號課程的平均成績,并在屏幕上顯示; 每門課程成績分析在屏幕上顯示3門課程
4、的各個分數(shù)段的學(xué)生人數(shù);(分數(shù)段為:>=90;80~89;70~79;60~69;<=59)此處可以以表格的形式給出數(shù)據(jù),或者以坐標曲線的形式給出。對學(xué)生成績記錄進行檢索(按學(xué)號、姓名), 成績排序(按總成績降序排列), 退出,最好用到文件處理。 五、流程圖、總體設(shè)計、詳細設(shè)計 學(xué)生成績管理,最基本能實現(xiàn)的的功能是輸入學(xué)號,同時顯示該學(xué)生的基本的信息,我設(shè)計的成績管理系統(tǒng)功能還包括了顯示該生的語文,英語,數(shù)學(xué)三門學(xué)科的成績,求出了該生的總分,以及該生的平均分,動態(tài)輸入學(xué)生的成績,而且成績是按照三位數(shù)顯示的,可以輸入任意多的學(xué)生人數(shù),每個學(xué)生都是三門課程,最后統(tǒng)計輸入所有
5、學(xué)生的各科各個分數(shù)段的人數(shù),最后顯示出所有學(xué)生的成績排名情況。為了使系統(tǒng)更實際一些,我設(shè)計的系統(tǒng)包括建立了文件,方便學(xué)生的信息一次錄入之后可以保存該數(shù)據(jù),將該數(shù)據(jù)保存在score.txt文件中,而且文件的路徑與該軟件默認的安裝路徑一致;為了使系統(tǒng)更方便用戶使用,我設(shè)計了菜單,菜單中設(shè)計了六個功能,包括插入,刪除,查詢,修改,查看,退出等。以下是對程序中常用的六個個功能進行解析: 1、 數(shù)據(jù)輸入功能:這是必不缺少的功能,學(xué)號的輸入,成績的輸入都離不了這個功能,在輸入成績時,特地加了一個判斷功能,在輸入不合理的成績時,程序?qū)⑻崾境鲥e,并要求重新輸入。在輸入學(xué)生學(xué)號的時候,程序首先會判斷此學(xué)生的成
6、績是否存在,如果存在,則程序提示需重新輸入。插入一條學(xué)生記錄子模塊,搜索可用單元,接收輸入的記錄,并寫入文件。建立成績表子模塊,控制輸入界面,并多次調(diào)用插入記錄子模塊,完成成績的建立。 2、 修改功能:考慮到會存在在輸入成績時,容易輸入錯誤,或者發(fā)生個別學(xué)生的試卷被誤判需修改成績等情況,所以加了此功能,在發(fā)生以上情況時可以調(diào)用此功能,修改指定學(xué)生的成績。 3、 刪除學(xué)生信息的功能。如果輸入的學(xué)生信息根本不存在,或者發(fā)生其它情況需刪除一個無意義的學(xué)生信息時,可以調(diào)用此功能。此功能將實現(xiàn)將指定學(xué)號學(xué)生的信息刪除。 4、 信息查找功能:當(dāng)需要查詢某個學(xué)生的成績或者檢查輸入是否有誤時,可以調(diào)用此
7、功能,此功能實現(xiàn)將指定學(xué)號學(xué)生的成績顯示出來。實際上在調(diào)用此功能的同時,程序會首先求的總成績,平均成績,然后產(chǎn)生排名結(jié)果,最后將數(shù)據(jù)信息顯示。 5、顯示排名信息功能:此功能會將學(xué)生成績自動相加,得到每位學(xué)生的總成績及平均成績,然后進行排名,得到每個學(xué)生的名詞,最后按照輸入順序?qū)⑺袑W(xué)生的學(xué)號,語文成績,英語成績,數(shù)學(xué)成績,平均成績,總成績,名次依次輸出。模塊中排名處理、學(xué)科平均成績計算、均需取出某一學(xué)科的所有學(xué)生成績,因而此操作作為公用子程序以供調(diào)用。個人總分及平均分處理較為簡單,根據(jù)索引逐條處理記錄。排名處理。排名結(jié)果為一維數(shù)組,與學(xué)科成績存在對應(yīng)關(guān)系。查詢學(xué)生記錄,先進行學(xué)號匹配,再輸出
8、一條記錄;查詢該生的所有信息。 6、 文件寫入及退出功能。此功能實現(xiàn)將學(xué)生的信息保存在一個文件里。此程序默認將文件放在C盤下,名稱為:score,屬性為txt格式的文本文檔。該文檔能夠保存數(shù)據(jù),以便數(shù)據(jù)不需要重復(fù)錄入,是系統(tǒng)更能滿足用戶需求。寫入文件完畢后,關(guān)閉文件,并退出程序。 該程序的流程圖: 文件創(chuàng)建和菜單顯示: 在創(chuàng)建文件時使用命令請求創(chuàng)建文件,以下是菜單顯示,首先顯示菜單的界面,1號功能接收功能,程序先和菜單中所有的功能都進行比較,假如都不是功能菜單,則提示輸入錯誤,重新輸入,假如輸入正確,則調(diào)用相對應(yīng)的子程序。 創(chuàng)建新文件 mov ah,3eh 設(shè)置屬性 設(shè)置路徑
9、 保存文件 菜單的顯示 選擇系統(tǒng)功能 插入 調(diào)用insert Y 修改 N 調(diào)用modify Y 刪除 N 調(diào)用delete Y 調(diào)用show 排名 分段 調(diào)用count N N N again Y 創(chuàng)建成功 ESC 調(diào)用esc Y Y Y 文件內(nèi)容顯示: 在文件查找的子程序會顯示該生的學(xué)號,三門的成績,該生的總分,平均分和該生成績的排名情況,則在顯示學(xué)生信息之前先處理數(shù)據(jù),成績和總分是按照三位數(shù)的處理,學(xué)號和名次是按照兩位數(shù)處理的,總分是字類型,其他的是字節(jié)類型,所以必須要轉(zhuǎn)換基址才能找到該生相對應(yīng)的總分。文件的刪除則是先找到該
10、學(xué)生的信息,然后顯示該生的成績緩存區(qū)的地址的下一位,則顯示的是空白。 調(diào)用總分子程序 調(diào)用平均分子程序 學(xué)號存在 開始 N 輸出三門成績 以si和n的比較輸出學(xué)生信息 按三位處理 Y 輸出平均分 需要擴展 si指針依次下移2 輸出總分 輸出名次 結(jié)束 調(diào)用二位學(xué)號輸入的子程序 學(xué)號存在 開始 N 地址相減 Y Add si,1 刪除完成 顯示內(nèi)容為空 循環(huán)刪除之后內(nèi)容 n減1 結(jié)束 為0 為零則ret Y N 總分和名次 定義子程序sum proc near,先是從存放各科的緩存區(qū)移出數(shù)據(jù),然后相加
11、,采用循環(huán),對用戶輸入的數(shù)據(jù)都是按照這個規(guī)則求出該生的總分;ping proc near是求出該生的平均分,把之前存放在zc[bx]的總分數(shù)據(jù)取出來,然后除以3; 存儲器清零cx,si 循環(huán)開始 開始 N Mov Mc[si],1 名次初值是1 Y jge continue 總分進行比較 Zc[bx]與Zc[di] add mc[si],1 把學(xué)生個數(shù)給bx 結(jié)束 大于或者等于 mov dx,zc[di] Y N 名次為字節(jié)則si+1 Si 與ax比較為0 Y N 六、遇到的問題及解決辦法 問題:在編寫程序時,不知道刪除的程序應(yīng)該如何實現(xiàn)
12、,以及在創(chuàng)建文件時不知道如何下手,然后老師提示是采用中斷,我們需要自學(xué)中斷,在設(shè)置光標和屏幕顯示也是采用中斷,我自能自學(xué)課本的第九章內(nèi)容,然后再寫程序,在文件的刪除那里我卡住了研究好久也不知道怎么實現(xiàn),最后我問了我同學(xué),我們一起討論出的結(jié)果就是讓屏幕不顯示當(dāng)前指針指向的內(nèi)容,顯示指針指向的一個內(nèi)容即可,這樣就可以實現(xiàn)刪除功能,刪除功能就是刪除該學(xué)號學(xué)生的成績數(shù)據(jù),使這些數(shù)據(jù)全部清空則達到了刪除文件的功能; 關(guān)鍵代碼:此段代碼時是實現(xiàn)數(shù)據(jù)段插入功能首先提示輸入學(xué)號的語句,然后調(diào)用shuru的宏定義,這個宏定義是接收鍵盤輸入的兩位數(shù),然后處理成十進制輸出,比較符合實際,然后把n學(xué)生個數(shù)給bl,將
13、輸入的學(xué)生學(xué)號保存在xh[bx]數(shù)組中,方便使用,然后判斷該學(xué)號是否為第一次輸入,是則跳轉(zhuǎn),假如不是第一次輸入,則提示用戶該學(xué)號已經(jīng)存在,需要重新輸入,跳轉(zhuǎn)到輸入成績的子程序,在調(diào)用shuruu宏,此功能是處理三位數(shù),使成績是按照三位數(shù)顯示的,而且必須是在合理的范圍內(nèi)的,假如輸入的數(shù)據(jù)是不合理的則又跳轉(zhuǎn)到重新輸入的界面,要求用戶輸入有效數(shù)據(jù),數(shù)據(jù)輸入完成之后則存入相對應(yīng)的緩存區(qū)。 ;********************************************* input proc near ;輸入學(xué)生學(xué)號,成績 e6: output mess1 shuru
14、 mov bl,n ;統(tǒng)計輸入學(xué)生個數(shù) mov bh,0 mov xh[bx],dl ;輸入的個數(shù)同時以地址指針形式顯示 cmp bx,0 ;判斷是不是第一次輸入,如果是,則跳過比較程序 je qq1 ;繼續(xù)輸入成績 mov cl,n ;如果不是第一次輸入則要將輸入的學(xué)號與以前輸入的比較 cbw mov si,0 mov al,xh[bx] e7: cmp al,xh[si] je e5 add si,1 loop e7
15、 jmp qq1 e5: output ts4 jmp e6 qq1:output mess2 ;如果不是重復(fù)的學(xué)號則可以繼續(xù)輸入成績和其他信息 output mess4 mov si,0 mov cx,3 qq3:shuruu cmp dx,78h ;比較輸入的成績是否大于120,如果大于120的話,那么重新輸入成績 jbe qq2 output ts3 ;提示輸入錯誤 jmp qq1 qq2:mov buf[si],dl ;把輸入的學(xué)生信息保存在緩存區(qū) output b
16、g add si,1 loop qq3 mov bl,n cbw mov al,buf[0] ;以下是把之前的成績數(shù)據(jù)保存到相對應(yīng)的緩存區(qū) mov chi[bx],al mov al,buf[1] mov eng[bx],al mov al,buf[2] mov mat[bx],al ret input endp ;********************************************** 該關(guān)鍵代碼是實現(xiàn)該學(xué)號學(xué)生的總分和名次的交換以及顯示,首先是先把即將要
17、用到的存儲器全部清零,將名次mc[si]初值為1,si依次+1,因為存放名次的數(shù)組是字節(jié)類型的,然后把n學(xué)生的個數(shù)賦給cl,接下來就是處理查找總分的地址指針,因為總分數(shù)組是字型所以需要使bl*2,然后cx清零,按照學(xué)號找到相對應(yīng)該生的總分,兩個總分相比較此時大的則暫時為第一名,然后再繼續(xù)接受總分,接受的總分又要和之前暫時的第一比較然后和暫時的第二名比較,循環(huán)找出第一名,繼續(xù)循環(huán),顯示總分和名次。 ;********************************************** rank proc near ;排名 mov cl,n mov ch,0
18、 ;將用到的存儲器清零 mov si,0 rrc:mov mc[si],1 ;將存儲名次的存儲器給予的初值是1 add si,1 ; loop rrc mov al,n ;此處2n最后放到al中,是為了下面總分的輸出 mov bl,2 mul bl mov cl,n mov ch,0 mov si,0 mov bx,0 mov di,0 rrb: mov dx,zc[di] rra: cmp dx,zc[bx] ;總分之間的比較 jge conti
19、nue ;大于等于的那個分數(shù)則為第一名 add mc[si],1 continue: add bx,2 loop rra ;余下的繼續(xù)比較依次排出名次 mov cl,n cbw add si,1 ;名次是字節(jié)類型的 add di,2 ;總分是字類型的 mov bx,0 cmp si,ax ;ax里面是2n為了找到總分輸出 jbe rrb ret rank endp ;**************************
20、************************ 七、結(jié)果顯示 菜單顯示界面圖: 首次輸入學(xué)生信息界面;修改學(xué)生信息界面;查看學(xué)生各個分數(shù)段的界面; 刪除學(xué)生信息界面: 查看學(xué)生成績排名情況界面: 八、感想、收獲及體會 終于完成了一門課程設(shè)計,比起之前完成的綜合實驗我覺得自己又上升了一個臺階,學(xué)到的東西更多了,雖然自己付出了兩周的時間,但是一個好的程序員就需要舍得花時間去創(chuàng)建更加完美的程序,完成更多的功能,滿足用戶更多的要求。這次的課程設(shè)計和自己上課學(xué)到的東西有很多不同,需要自己去查看中斷的代碼,因為此次課程設(shè)計老師要求我們必須有文件的創(chuàng)建
21、和文件存儲和文件關(guān)閉,給課程設(shè)計增加了難度,課設(shè)正是這樣,所以在完成這門課設(shè)之后,我真心覺得自己的編程水平又上升,同時也說明了好多東西是可以靠自己領(lǐng)悟和自學(xué)得來的;課程設(shè)計完成了,但是我設(shè)計的成績管理系統(tǒng)還是存在不足:成績都是用整數(shù)表示的,沒有實現(xiàn)浮點運算;平均成績也是按照整型的,查詢功能中只能通過學(xué)號查詢,沒有實現(xiàn)學(xué)號或者通過姓名查詢的選擇;主菜單界面設(shè)計不夠人性化,不夠簡單明了,缺少美觀,沒有使用彩色的界面。雖然我的程序中出現(xiàn)那么多的不完美,但是只有我有一顆追求完美的心,則我就會有一個繼續(xù)學(xué)下去的心。 此次的課程設(shè)計,我還是和以前的綜合實驗的感觸有些類似,在此之前,大多數(shù)時候都在用高級語
22、言編寫程序,已經(jīng)習(xí)慣了高級語言的方便靈活的語法形式。一下子突然轉(zhuǎn)為用匯編語言進行程序設(shè)計,總是要經(jīng)過一個很不習(xí)慣的適應(yīng)過程。但是我們學(xué)習(xí)編語言,可以讓我們更好地理解程序設(shè)計的本質(zhì)和原理。對以后的學(xué)習(xí)和工作都帶好很多好處。這次在編寫和調(diào)式匯編程序過程中體會最深的就是,沒有好的工具,匯編程序的調(diào)式工作太困難了!這次使用的是微軟的masm5.0編譯工具,是DOS底下的編譯工具,但是沒有其它可視化的調(diào)式工具,只能利用DOS底下的debug命令進行調(diào)式。程序稍微長一點的時候,調(diào)試起來就不是那么方便了,主要問題是在debug中雖然可以反匯編,但是反匯編后的源程序與自己寫的不太一樣了(符號常量和標號都變成了
23、數(shù)字地址),不方便辨認當(dāng)前調(diào)式程序?qū)?yīng)于源代碼中的哪一行。這些疑問都是我完成課設(shè)的難點,自己學(xué)的不是很透徹,在完成報告之前,我花了一天的時間和同學(xué)討論我的程序,通過對這學(xué)生成績管理的的設(shè)計,使我對匯編語言的基本知識的使用更加熟練,同時也增加了我對匯編語言的一些認識,在作業(yè)完成過程中通過和同學(xué)的交流,也增加了合作的技巧。通過查閱資料也學(xué)到了一些課本上沒有的東西,有幸接觸到中斷這個功能,同時更是讓我明白了即使是低級的匯編語言也可以完成高級語言可以完成的程序,歷時兩周終于完成, 這次課程設(shè)計中有很多源程序的子程序的源代碼可以從資料中或獲得,但有很多都需要我們仔細琢磨才能明白其中的原理,同時程序中需要
24、調(diào)用大量的BIOS和DOS系統(tǒng)功能調(diào)用,如顯示字符串的功能調(diào)用、光標設(shè)置的功能的調(diào)用、清屏的功能調(diào)用等,這些問題如不查詢資料就無法理解,因為上匯編語言基礎(chǔ)時對這些DOS和BIOS的系統(tǒng)功能了解很少,所以我們需要查詢DOS和BIOS功能的系統(tǒng)調(diào)用的基本信息。還有在一些循環(huán)結(jié)構(gòu)設(shè)計上也有許多不能理解的地方,都需要加以深刻的理解才能將問題順利的解決,多整個程序的理解也有了更進一步的了解。有時候遇到自己查資料和不能理解的地方時,自己不能解決時,先找同學(xué)討論一下,會有意想不到的收獲,有些問題就會迎刃而解。即使是花了兩個周的時間完成一個程序,但是我可以驕傲的告訴別人我完成一個程序了,完成了一個設(shè)計,將來我
25、更有底氣的告訴別人這個是我的成品,就如老師說的,我們可以驕傲的告訴面試老師我曾經(jīng)完成的作品。 目前已是大三的我們,我們完成的課程設(shè)計已經(jīng)很多了,但是我對此次的課設(shè)感慨真的很多,因為這次完成真的太不容易,因為我自己本人覺得我真的一點都學(xué)不會,居然也可以完成如此浩大的程序編寫,真的是我想不到的,雖然此程序我參考了資料,咨詢了同學(xué),但是那些收獲是我都很驚嘆的,進一步的拓寬了我的匯編知識,同時最重要的一點是要學(xué)的精通可以靠自己自學(xué),很多知識是我們自己就可以領(lǐng)悟的。雖然本程序仍然存在不少缺點和不足,但是只要我有心,只要我舍得花時間去自學(xué),看看視頻,一定能使我的編程能力提升,克服所以的不足,設(shè)計出更出色
26、的作品。 九 參考文獻 [1]鄭曉薇編著,《匯編語言》機械工業(yè)出版 [2]《IBM—PC匯編語言程序設(shè)計實驗教程》 [3]《IBM—PC匯編語言程序設(shè)計(第2版)》 十 附錄。 ①用戶手冊使用說明:可以根據(jù)我上面粘貼的運行界面進行使用,選擇自己需要的功能 ②源程序清單: huancun macro j,t ;將三位數(shù)的數(shù)據(jù)轉(zhuǎn)換成為三個對應(yīng)的字符,并將其存入緩沖區(qū)zs中j,t是兩個啞元 push bx ;入棧是對存儲器里面的值進行保護 mov si,t ;對兩個啞元進行說明 mov ax,j mov bl,100
27、 ;對輸出的數(shù)據(jù)進行處理,顯示出百位十位個位 div bl add al,30h mov zs[si],al ;把處理好的百位進行緩存區(qū) add si,1 mov al,ah cbw mov bl,10 ;對十位的處理 div bl add al,30h add ah,30h mov zs[si],al add si,1 mov zs[si],ah ;對個位的處理, add si,1 ;對輸入的數(shù)據(jù)反
28、復(fù)處理,指針下移 pop bx ;存儲器出棧 endm clear MACRO ;清屏的宏定義 MOV AH,2 ;設(shè)置光標位置 MOV DH,0 ;行號 MOV DL,0 ;列號 INT 10H ;屏幕及光標控制int 10h MOV AH,6 ;屏幕開窗口 MOV AL,0 MOV BH,7 ;顏色屬性是正常顯示,黑底白字 MOV CH,0 ;左上角的行號 MOV CL,0 ;左上角的列號 MOV DH,24 ;右上角的行號 MOV DL
29、,79 ;右上角的列號 INT 10H ;調(diào)用10號功能,設(shè)置屏幕的坐標是(0,0)(24,79) ENDM kong macro ;回車換行的宏定義 mov ah,2 ;2號功能輸出回車換行 mov dl,0ah int 21h mov ah,2 mov dl,0dh int 21h endm output macro p ;字符串輸出 mov dx,offset p mov ah,9 int 21h endm shuru macro ;二位數(shù)數(shù)據(jù)輸入
30、 mov ah,01 ;1號功能的輸入,輸入的值放在dl中 int 21h sub al,30h ;對輸入的數(shù)據(jù)先減掉30h cbw ;字節(jié)擴展成字類型 mov bl,10 ;對輸入的數(shù)據(jù)進行乘以10 mul bl mov dl,al ;把al中的乘積取出來,放在dl中 mov ah,01h int 21h sub al,30h ;處理完了要加上30h再用一號功能輸出 add dl
31、,al endm zhuane macro e,b ;將二位數(shù)轉(zhuǎn)換成對應(yīng)兩個字符,并將其存入緩沖區(qū)zs push bx mov si,b ;以下是對兩個啞元的說明 mov al,e cbw mov bl,10 ;對二位數(shù)據(jù)的處理就是先顯示出十位然后顯示出個位 div bl add ah,30h add al,30h mov zs[si],al ;處理好的數(shù)據(jù)存放在zs存儲區(qū) add si,1 mov zs[si],ah add si,1
32、 ;指針再下移,繼續(xù)處理下一個 pop bx endm zhuans macro f,s ; 將三位數(shù)成績轉(zhuǎn)換成為對應(yīng)的三個字符,并存入緩沖區(qū)zs中 push bx mov si,s mov al,f cbw ;需要擴展,字節(jié)擴展成字 mov bl,100 div bl add al,30h mov zs[si],al ;百位存放在存儲區(qū) add si,1 mov al,ah ;把余數(shù)取出來 cbw
33、 ;字節(jié)擴展成字 mov bl,10 div bl add al,30h ;把ah中的余數(shù)取出來再進行除以10,最后的余數(shù)還是存放在ah中,此次的商放在存儲區(qū)zs中 add ah,30h mov zs[si],al add si,1 mov zs[si],ah ;最后的余數(shù)在ah中,其實就是三位數(shù)的個位 add si,1 ;指針下移 pop bx endm shuzi macro r ;二位數(shù)據(jù)輸出,以下是對數(shù)據(jù)
34、輸出的處理 mov al,r cbw mov bl,10 ;對數(shù)據(jù)的輸出和輸入一樣也需要進行處理,以十進制顯示出來 div bl mov bl,ah mov dl,al add dl, 30h mov ah,2 ;2號功能顯示十位 int 21h mov dl,bl add dl,30h mov ah,2 ;2號功能顯示個位 int 21h endm shuruu macro ;三位數(shù)數(shù)據(jù)輸入
35、 shuru mov al,dl ;用1號功能的輸入值存放在dl中,首先把dl中的值存放在al中 mov dl,10 mul dl mov dx,ax ;乘以10以后的值存放在ax中;需要取出放在dx中 mov ah,1 int 21h sub al,30h cbw ;加完30h再把字節(jié)擴展成字 add dx,ax endm shuzii macro u ;三位數(shù)數(shù)據(jù)輸出 mov ax,u mov bl,100 ;對百位的處理,把1
36、00賦給bl div bl mov bl,ah ;商在al中,余數(shù)在ah中 mov dl,al ;把商從al中取出來 add dl,30h ;在顯示百位之前加30h,再放到dl中 mov ah,2 ;2號功能顯示 int 21h shuzi bl endm DATAS SEGMENT m dw 0 ;移動文件指針時,選擇絕對移動方式,則m代表指針偏移量 zs db 18 dup (?) ;緩沖區(qū)用來存放單個學(xué)生信息的字符 pathnam d
37、b 'C:\score.txt',00h ;建立目錄項 handle dw ? ;文件句柄 buf db 3 dup(?) ;輸入緩沖區(qū) zc dw 100 dup(?) ;存放總成績的數(shù)組 pj db 100 dup(?) ;存放平均成績數(shù)組 n db 0 ;存放輸入的學(xué)生信息的個數(shù) gs0 db 5 dup (0) ;記錄所查詢科目分數(shù)段的 gs1 db 5 dup(0) gs2 db 5 dup(0
38、) mc db 100 dup (1) ;存放學(xué)生的名次的數(shù)組 chi db 100 dup (?) ;存放學(xué)生成績的數(shù)組 eng db 100 dup (?) mat db 100 dup (?) xh db 100 dup (?) ;存放學(xué)生學(xué)號的數(shù)組 cour0 db 'chinese','$';語文 cour1 db 'english','$';英語 cour2 db 'maths ','$'
39、;數(shù)學(xué) ts db 13,10,'You are successful,press anykey to continue!',13,10,'$';以下是提示語句 ts1 db 13,10,'You are wrong , Try again!',13,10,'$' ts3 db 13,10,'The score you input is bigger than 127,input agian!',13,10,'$' ts4 db 13,10,'
40、;The school number you input is exist,please try again!',13,10,'$' cai0 db '* The Student Grade Management System *',0ah,0dh,'$' cai00 db '* made by wei qiao yuan *',0ah,0dh,'$' cai db '* Ins
41、ert a data <i>',13,10,'$';菜單的格式 cai1 db '* Modify a data <m>',13,10,'$' cai2 db '* Delete a data <d>',13,10,'$' cai3 db '*
42、Find a data <f>',13,10,'$' cai4 db '* Show the rank <s>',13,10,'$' cai6 db '* Show the count <c>',13,10,'$' cai5 db '* Exi
43、t with the keyboard of ESC <ESC>',13,10,'$' ts2 db 'Please choose the Function',13,10,'$' mess db 13,10,'The data you input is not exist,input again',13,10,'$' mess1 db 13,10,'Please input the school number(2)
44、 ',13,10,'$' mess2 db 13,10, 'Please input three scores(0-120)',13,10,'$' mess4 db 'chinese english maths ',13,10,'$' mess3 db ' Thank you ',13,10,'$' strr1 DB '********************score and rank***********
45、********',13,10,'$' strr2 DB 13,10,'number wen eng math average sum rank ',13,10,'$' strr3 db 13,10,'course >=90 >=80 >=70 >=60 <60 ',13,10,'$' bg db ' ','$' DATAS ENDS STACK
46、S SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX mov es,ax mov ah,3ch ;請求創(chuàng)建文件 mov cx,00 ;默認屬性 lea dx,pathnam ;裝入pathnam的地址 int 21h mov handle,ax ;保存文件句柄 main: ; 主菜單顯示 output ca
47、i0 output cai00 output cai output cai1 output cai2 output cai3 output cai4 output cai6 output cai5 output ts2 mov ah,1 ;輸入字符,選擇功能鍵 int 21h cmp al,'i' jne n1 call insert ;調(diào)用insert子程序,輸入學(xué)生學(xué)號,成績 jmp rk n1: cm
48、p al,'m' jne n2 call modify ;調(diào)用modify子程序,修改指定學(xué)生的成績 jmp rk n2: cmp al,'d' ;調(diào)用de子程序,刪除制定學(xué)生的成績 jne n3 call de jmp rk n3: cmp al,'f' ;調(diào)用find子程序,顯示指定學(xué)生的成績及名次 jne n4 call find jmp rk n4: cmp al,'s' ;調(diào)用show子程序,顯示所有學(xué)生的各科
49、成績,平均成績,總成績及名次 jne n5 call show jmp rk n5: cmp al,'c' ;調(diào)用showw子程序,顯示各科各分數(shù)段的學(xué)生數(shù)量 jne n6 call showw jmp rk n6: cmp al,1bh ;調(diào)用exit子程序,將數(shù)據(jù)保存到score.txt文件中,并退出程序 jne n7 call exit n7: clear ;清屏 output ts1 ;以上都不選擇則說明出錯 jmp ma
50、in ;再次跳轉(zhuǎn)到菜單 rk: output ts mov ah,1 int 21h clear jmp main ;**************************************** exit proc near ;退出 mov cl,n ;寫入文件的次數(shù) cbw mov bx,0 mov di,0 zh: push di ;保存di,cx,bx中的內(nèi)容 push bx push cx
51、 mov si,0 ;對si進行賦初值 zhuane xh[bx],si ;調(diào)用宏zhuane將兩位數(shù)的學(xué)號轉(zhuǎn)換為對應(yīng)的二個字符,并存放到zs緩沖區(qū)中 zhuans chi[bx],si ;調(diào)用宏zhuans將三位數(shù)的語文成績轉(zhuǎn)換為對應(yīng)的三個字符,并存放到zs緩沖區(qū)中 zhuans eng[bx],si ;調(diào)用宏zhuans將三位數(shù)的英語成績轉(zhuǎn)換為對應(yīng)的三個字符,并存放到zs緩沖區(qū)中 zhuans mat[bx],si ;調(diào)用宏zhuans將三位數(shù)的數(shù)學(xué)成績轉(zhuǎn)換為對應(yīng)的三個字符,并存放到zs緩沖區(qū)中 zhuans
52、pj[bx],si ;調(diào)用宏zhuans將三位數(shù)的平均成績轉(zhuǎn)換為對應(yīng)的三個字符,并存放到zs緩沖區(qū)中 huancun zc[di],si ;調(diào)用宏zhuanss將三位數(shù)的總成績成績轉(zhuǎn)換為對應(yīng)的三個字符,并存放到zs緩沖區(qū)中 zhuane mc[bx],si ;調(diào)用宏zhuane,將兩位數(shù)的名詞,轉(zhuǎn)換為對應(yīng)的二個字符,并存放到zs緩沖區(qū)中 mov ah,42h ;移動讀寫指針 mov al,00 ;移動方式為絕對移動方式 mov bx,handle mov cx,00 mov dx,m
53、 ;指針偏移量 int 21h add m,20 mov ah,40h ;調(diào)用40h功能,請求寫文件 mov bx,handle ;獲取文件句柄 mov cx,19 ;寫入長度為19個字節(jié) lea dx,zs ;將緩沖區(qū)zs中的內(nèi)容寫入文件score.txt int 21h pop cx pop bx pop di add di,2 ;目的指針加2 add bx,1 sub cx,1 ;輸
54、入一個之后cx統(tǒng)計的個數(shù)就依次減1 cmp cx,0 ;判斷寫入是否完畢 jg zh mov bx,handle ;寫入完畢,關(guān)閉文件 mov ah,3eh int 21h clear output mess3 ;關(guān)閉文件之后就顯示提示語句 MOV AH,4CH ;退出程序 INT 21H ret exit endp ;子程序結(jié)束 ;********************** ****************** sum proc nea
55、r ;求學(xué)生的總成績 mov cl,n ;對運用到的存取器進行清零 mov ch,0 mov si,0 mov bx,0 sss:mov al,chi[si] ;將三科成績相加,將總成績傳給數(shù)組zc mov ah,0 ;高位清零 mov dl,mat[si] ;存放數(shù)學(xué)的數(shù)組 mov dh,0 add ax,dx ;數(shù)學(xué)和語文相加 mov dl,eng[si] mov dh,0 add ax,
56、dx mov zc[bx],ax ;最后把語文數(shù)學(xué)和英語的三門成績總分存放在zc總分的緩存區(qū) add bx,2 add si,1 loop sss ;運用循環(huán)對輸入的三門成績求總分 ret sum endp ;*************************************** ping proc near ;求學(xué)生的平均成績 mov cl,n ;n是統(tǒng)計輸入學(xué)生信息的個數(shù) cbw mov si,0 mov bx,0 p_p:
57、 mov ax,zc[bx] ;將總成績除以三,獲取的數(shù)據(jù)傳送給數(shù)組pj mov dl,3 div dl mov pj[si],al ;把除以之后的商從al中總?cè)〕龇湃雙j平均的存儲區(qū) add si,1 ;下標依次加1 add bx,2 ;基址加2 loop p_p ret ping endp ;****************************************** modify proc near ;修改學(xué)生學(xué)號,成績 md1:output
58、 mess1 ;提示語句 shuru mov bl,n ;把學(xué)生個數(shù)給bl mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si] ;先查找輸入的學(xué)生是否存在 je qq1_1 ;查到的話,就跳轉(zhuǎn)到qq1_1輸入修改的值,也就是重新輸入 add si,1 cmp si,bx ;不存在的話則繼續(xù)輸入繼續(xù)比較 jbe md output mess jmp md1 ;不相等繼續(xù)
59、輸入學(xué)號 qq1_1: mov di,si output mess2 ;輸入學(xué)號 output mess4 ;輸入成績 mov si,0 mov cx,3 ;cx存放的的科目 qq3_1:shuruu ;分別輸入語文,英語,數(shù)學(xué)成績,并將其放在緩沖區(qū)buf中 cmp dx,78h ;比較輸入的成績是否大于120,如果大于120的話,那么重新輸入成績 jbe qq2_1 output ts3 jmp qq1_1 qq2_1:mov buf[si],dl
60、output bg ;輸出一段空格 add si,1 loop qq3_1 mov al,buf[0] ;將存入buf中的成績,分別賦值給存放對應(yīng)科目的成績的數(shù)組 mov chi[di],al mov al,buf[1] ;buf[1]放的是英語 mov eng[di],al mov al,buf[2] ;buf[2]放的是數(shù)學(xué) mov mat[di],al ret modify endp ;************************************************
61、**** countt proc near ;統(tǒng)計各科各個分數(shù)段學(xué)生的個數(shù) mov cx,5 ;有五個成績分數(shù)段 mov si,0 zl: mov gs0[si],0 ;存放語文科目各個分數(shù)段的緩存區(qū) add si,1 loop zl mov cl,n mov ch,0 mov si,0 c11:mov al,chi[si] ;取出存放在緩存區(qū)的數(shù)據(jù)和90進行比較 cmp al,90 jl cc1 ;大于則跳轉(zhuǎn) add g
62、s0[0],1 ;小于等于90則進行個數(shù)的累加 jmp cc8 ;繼續(xù)循環(huán)一直比較完五個分數(shù)段 cc1:cmp al,80 ;和80進行比較 jl cc2 add gs0[1],1 ;進行累加存放入緩存區(qū) jmp cc8 cc2:cmp al,70 ;和70進行比較 jl cc3 add gs0[2],1 jmp cc8 cc3:cmp al,60 ;與60進行比較 jl cc4 add gs0[3],1 jmp cc
63、8 cc4:add gs0[4],1 ;最后剩下的數(shù)據(jù)存放在gs0[4]的緩存區(qū) cc8:add si,1 ;統(tǒng)計完一個數(shù)據(jù)則需要繼續(xù)統(tǒng)計,則和那些分數(shù)段比較之后滿座條件的繼續(xù)統(tǒng)計 loop c11 lea si,gs0 lea di,gs1 mov cx,5 cld ;清除方向標 rep movsb ;以字節(jié)傳送 mov cx,5 mov si,0 cc9: mov gs0[si],0 ;對存放分數(shù)段的
64、緩存區(qū)清零 add si,1 ;地址指針加1 loop cc9 mov cl,n ;存儲器先清零 mov ch,0 mov si,0 mov cl,n ;給存儲器賦值 mov ch,0 mov si,0 c111:mov al,eng[si] ;對英語成績進行分段,統(tǒng)計各個分數(shù)段的個數(shù) cmp al,90 ;和90比較 jl cc15 ;大于則跳轉(zhuǎn) add gs0[0
65、],1 ;小于等于則繼續(xù)統(tǒng)計 jmp cc88 ;繼續(xù)比較,繼續(xù)存儲 cc15:cmp al,80 ;和80比較 jl cc22 add gs0[1],1 ;符合條件則存儲在緩存區(qū) jmp cc88 cc22:cmp al,70 ;和70比較 jl cc33 add gs0[2],1 jmp cc88 cc33:cmp al,60 ;和60進行比較 jl cc44 add gs
66、0[3],1 jmp cc88 cc44:add gs0[4],1 ;最后的數(shù)據(jù)存放在gs0[4] cc88:add si,1 loop c111 ;符合各個分數(shù)段的繼續(xù)進行比較,繼續(xù)加到各個分數(shù)段 lea si,gs0 lea di,gs2 mov cx,5 cld rep movsb mov cx,5 mov si,0 ct: mov gs0[si],0 ;以si的值來統(tǒng)計,和顯示各個分數(shù)段的數(shù)量 add si,1
67、loop ct mov cl,n mov ch,0 mov si,0 c13:mov al,mat[si] ;對數(shù)學(xué)這門成績的統(tǒng)計和分段 cmp al,90 ;和90比較 jl cc1_2 add gs0[0],1 jmp cc8_2 cc1_2:cmp al,80 ;和80比較 jl cc2_2 add gs0[1],1 jmp cc8_2 cc2_2:cmp al,70 ;和70比較
68、 jl cc3_2 add gs0[2],1 jmp cc8_2 cc3_2:cmp al,60 ;和60比較 jl cc4_2 add gs0[3],1 jmp cc8_2 cc4_2:add gs0[4],1 ;60以下的 cc8_2: add si,1 loop c13 ret countt endp ;這個子程序結(jié)束 ;****************************************** find proc near ;查找學(xué)生成績 call sum ;調(diào)用子程序 call ping bj1:output mess1 ;提示輸入學(xué)號
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工重大危險源安全管理制度
- 安全培訓(xùn)資料:典型建筑火災(zāi)的防治基本原則與救援技術(shù)
- 企業(yè)雙重預(yù)防體系應(yīng)知應(yīng)會知識問答
- 8 各種煤礦安全考試試題
- 9 危險化學(xué)品經(jīng)營單位安全生產(chǎn)管理人員模擬考試題庫試卷附答案
- 加壓過濾機司機技術(shù)操作規(guī)程
- 樹脂砂混砂工藝知識總結(jié)
- XXXXX現(xiàn)場安全應(yīng)急處置預(yù)案
- 某公司消防安全檢查制度總結(jié)
- 1 煤礦安全檢查工(中級)職業(yè)技能理論知識考核試題含答案
- 4.燃氣安全生產(chǎn)企業(yè)主要負責(zé)人模擬考試題庫試卷含答案
- 工段(班組)級安全檢查表
- D 氯化工藝作業(yè)模擬考試題庫試卷含答案-4
- 建筑起重司索信號工安全操作要點
- 實驗室計量常見的30個問問答題含解析