版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計(jì) 報(bào) 告</p><p> 課程名稱 匯編語言程序設(shè)計(jì) </p><p> 課題名稱 1.成績排名 2.中斷駐留程序 </p><p> 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) </p><p> 班 級
2、 </p><p> 學(xué) 號(hào) </p><p> 姓 名 </p><p> 指導(dǎo)教師
3、</p><p> 2013 年 1 月 9日</p><p> 一、設(shè)計(jì)內(nèi)容與設(shè)計(jì)要求</p><p> 1.設(shè)計(jì)內(nèi)容:通過本周的課程設(shè)計(jì),學(xué)生能夠鞏固所學(xué)的基礎(chǔ)知識(shí),并能夠使學(xué)生更加熟練運(yùn)用匯編程序設(shè)計(jì)語言來掌握綜合匯編程序設(shè)計(jì)的方法和過程,以及為設(shè)計(jì)其它應(yīng)用軟件提供幫助,進(jìn)而提高學(xué)生的軟件設(shè)計(jì)能力。</p><p> 1、編
4、制一計(jì)算比賽成績的程序,要求完成以下功能:</p><p> ?。?) 9名評委,每個(gè)評委給分范圍為0~10(整數(shù));</p><p> (2) 9名評委給分中,去掉一個(gè)最高分和一個(gè)最低分,剩余7名評委的平均分即為參賽者的得分(精確到小數(shù)點(diǎn)二位);</p><p> ?。?) 將得分在光標(biāo)位置處顯示出來。</p><p> 2、編制一程序
5、,要求接收從鍵盤輸入的一個(gè)班的學(xué)生成績,并存放于30字的grade數(shù)組中,各數(shù)據(jù)的格式為:</p><p> 學(xué)號(hào),成績1,成績2,…,成績5</p><p> 然后根據(jù)grade中的學(xué)生成績,把學(xué)生名次填入rank數(shù)據(jù)組中,并顯示出來,格式為:</p><p><b> 學(xué)號(hào),名次</b></p><p> 3
6、、利用INT 1CH(大約每秒中斷18.2次)編寫一個(gè)中斷駐留程序,要求在屏幕的右上角顯示計(jì)算機(jī)中當(dāng)前系統(tǒng)時(shí)間,顯示格式為</p><p> 時(shí):分:秒:1/100秒</p><p> 4、輸入一個(gè)菱形的兩條對角線長,在屏幕上用‘*’號(hào)畫出一個(gè)彩色的菱形。</p><p> 5、設(shè)置圖形方式并顯示彩條,要求:</p><p> 選擇背
7、景色為藍(lán)色,調(diào)色板為0,然后每行顯示一種顏色,每四行重復(fù)一次,一直到整個(gè)屏幕都顯示出彩條</p><p><b> 2.設(shè)計(jì)要求:</b></p><p> 掌握結(jié)構(gòu)化程序設(shè)計(jì)的主體思想,以自頂向下逐步求精的方法編制程序解決一些實(shí)際的問題,為將來編寫軟件積累一些典型的案例處理經(jīng)驗(yàn)。</p><p> 設(shè)計(jì)正確,方案合理。</p>
8、;<p> 界面友好,使用方便。</p><p> 程序精煉,結(jié)構(gòu)清晰。</p><p> 設(shè)計(jì)報(bào)告5000字以上,含程序設(shè)計(jì)說明,用戶使用說明,源程序清單及程序框圖。</p><p><b> 上機(jī)演示。</b></p><p> 按學(xué)號(hào)順序選課題號(hào),并在規(guī)定的時(shí)間內(nèi)獨(dú)自完成相關(guān)課題的匯編源程序
9、編寫、調(diào)整和運(yùn)行。源程序及編譯生成各文件均保存在軟盤中;</p><p> 按本任務(wù)書的要求,按附錄的要求編寫《課程設(shè)計(jì)報(bào)告》(Word文檔格式)。并用A4的復(fù)印紙打印并裝訂; </p><p><b> 二、進(jìn)度安排</b></p><p><b> 第 1 周: </b></p><p&g
10、t; 星期日:8:00-12:00 </p><p> 星期日:13:00-17:00 </p><p> 星期一:8:00-12:00 </p><p><b> 附:</b></p><p> 課程設(shè)計(jì)報(bào)告裝訂順序:封面、任務(wù)書、目錄、正文、評分、附件(A4
11、大小的圖紙及程序清單)。 </p><p> 正文的格式:一級標(biāo)題用3號(hào)黑體,二級標(biāo)題用四號(hào)宋體加粗,正文用小四號(hào)宋體;行距為22。</p><p> 正文的內(nèi)容:一、課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實(shí)現(xiàn)(至少要有一個(gè)主要模塊的流程圖);四、程序調(diào)試;五、總結(jié);六、附件(所有程序的原代碼,要求對程序?qū)懗霰匾淖⑨專?lt;/p>&
12、lt;p> 正文總字?jǐn)?shù)要求在5000字以上(不含程序原代碼)。</p><p><b> 目錄</b></p><p> 課題1:學(xué)生成績排名程序</p><p> 1.1課題的主要功能…………………………………………1</p><p> 1.2課題的概要設(shè)計(jì)…………………………………………1</p
13、><p> 1.3課題的詳細(xì)設(shè)計(jì)…………………………………………4</p><p> 1.4調(diào)試結(jié)果與分析…………………………………………6</p><p> 1.5心得體會(huì)…………………………………………………8</p><p> 課題2:中斷駐留程序</p><p> 2.1課題的主要功能…………………………
14、………………9</p><p> 2.2課題的概要設(shè)計(jì)…………………………………………9</p><p> 2.3課題的詳細(xì)設(shè)計(jì)…………………………………………12</p><p> 2.4調(diào)試結(jié)果與分析…………………………………………14</p><p> 2.5心得體會(huì)…………………………………………………16</p>
15、<p> 附錄1:學(xué)生成績排名設(shè)計(jì)…………………………………17</p><p> 附錄2:中斷駐留設(shè)計(jì)………………………………………24</p><p> 課題一:學(xué)生成績排名</p><p><b> 一、課題主要功能</b></p><p> 學(xué)生成績排名程序的主要功能是從鍵盤輸入n個(gè)學(xué)生的
16、成績(格式為:學(xué)號(hào)、成績1、成績2),將其存儲(chǔ)在數(shù)組GRADE中。然后調(diào)用相關(guān)的功能模塊如成績信息復(fù)制模塊等來完成成績的排序以及排名并顯示出來(格式為:學(xué)號(hào)、名詞)。</p><p><b> 課題概要設(shè)計(jì)</b></p><p> 2.1課題功能模塊設(shè)計(jì)</p><p> 程序主要由如歡迎界面函數(shù)、成績輸入函數(shù)、成績信息復(fù)制函數(shù)、成績排
17、序函數(shù)、輸出函數(shù)五大模塊組成。其相關(guān)的功能在運(yùn)行時(shí)會(huì)有相應(yīng)的提示。各個(gè)功能模塊的關(guān)系如下:</p><p> 2.2成績輸出模塊流程圖</p><p> 成績輸出模塊的主要問題是將相關(guān)的數(shù)據(jù)項(xiàng)取得之后的后續(xù)處理。全局變量學(xué)號(hào)的位數(shù)DIGIT來控制整個(gè)進(jìn)制的轉(zhuǎn)換的數(shù)量級。同時(shí)也是分為兩個(gè)循環(huán),內(nèi)存循環(huán)主要的功能就是控制整個(gè)輸出的格式問題,外層循環(huán)則是控制整個(gè)輸出的項(xiàng)目的問題。一個(gè)數(shù)的輸出
18、流程圖如下(省略了如前幾位為0的功能):</p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p> 2.3成績排序模塊流程圖</p><p> 成績排序模塊主要的算法是冒
19、泡排序算法,其中令CX控制兩個(gè)循環(huán),一個(gè)循環(huán)為內(nèi)循環(huán)即比較循環(huán),另一個(gè)則為外層循環(huán)控制內(nèi)存循環(huán)的次數(shù)。 其流程圖如下:</p><p><b> N</b></p><p><b> Y</b></p><p><b> 課題詳細(xì)設(shè)計(jì)</b></p><p> 3.1
20、成績輸入模塊</p><p> 依次從鍵盤輸入學(xué)生學(xué)號(hào)及成績,TAB鍵為控制字符,每次輸入一個(gè)數(shù)據(jù)光標(biāo)就向左移動(dòng)8位,每次輸入完畢一個(gè)學(xué)生的信息就換行輸入。</p><p> 其單個(gè)數(shù)據(jù)輸入的代碼如下:</p><p> INPUT2 PROC NEAR</p><p> MOV AH,01H</p>
21、;<p> INT 21H</p><p> CMP AL,'0'</p><p> JB EXT2</p><p> CMP AL,'9'</p><p> JA EXT2</p><p> CMP
22、 AL,09H</p><p> JBE EXT2</p><p> AND AX,00FFH</p><p> SUB AL,30H</p><p><b> CBW</b></p><p> XCHG AX,BX</p&
23、gt;<p> MOV DX,10</p><p> MUL DX</p><p> ADD BX,AX</p><p> JMP INPUT2</p><p> INPUT2 ENDP</p><p> 3.2 成績排序模塊</p>
24、;<p> 其概要設(shè)計(jì)如2.3成績排序流程圖,其主要的代碼如下:</p><p><b> SORT3:</b></p><p> MOV AX,[SI+2]</p><p> MOV BX,[DI+2]</p><p> CMP AX,BX</p>
25、<p> JAE SORT2 ;ax>bx</p><p> MOV AX,[SI]</p><p> MOV BX,[DI]</p><p> XCHG AX,BX</p><p> MOV [SI],AX</p><p&
26、gt; MOV [DI],BX</p><p> MOV AX,[SI+2]</p><p> MOV BX,[DI+2]</p><p> XCHG AX,BX</p><p> MOV [SI+2],AX</p><p> MOV [
27、DI+2],BX</p><p> 3.3 學(xué)生成績輸出模塊</p><p> 其單個(gè)數(shù)據(jù)的輸入主要的實(shí)現(xiàn)如2.2成績輸出模塊流程圖,一下主要是其外圍的控制代碼:</p><p> OUTPUT2: PUSH BX</p><p> MOV CX,2</p><p> OUTPUT3:
28、 PUSH CX </p><p> MOV AX,[SI]</p><p> MOV DATA1,AX</p><p> CALL OUTPUT1</p><p> MOV DX,09H</p><p> MOV AH,02H</p
29、><p> INT 21H</p><p> ADD SI,2 </p><p> POP CX</p><p> LOOP OUTPUT3</p><p> CALL ENT</p><p> POP BX</p
30、><p> MOV CX,BX</p><p> DEC BX</p><p> LOOP OUTPUT2 </p><p> JMP EXT1</p><p><b> 調(diào)試結(jié)果與分析</b></p><p> 4.1
31、 EMU8086調(diào)試</p><p><b> 成績信息輸入</b></p><p> 說明:由于emu8086無法調(diào)用DOS 09H功能,所以字符串無法輸出</p><p><b> 排名結(jié)果輸出</b></p><p> 4.2 Masm for Windows調(diào)試</p>
32、<p><b> 五、心得體會(huì)</b></p><p> 此課題可以說是我自程序設(shè)計(jì)開始以來就一直做的課題,但是一開始并不能很快地就形成完整的一個(gè)程序。其主要的原因就在于以前的C語言程序設(shè)計(jì)、C++程序設(shè)計(jì)中等都有很多的數(shù)據(jù)結(jié)構(gòu)體運(yùn)用。如此此次的學(xué)生成績排序就可以定義一個(gè)學(xué)生成績的結(jié)構(gòu)體,如struct score { char no[4],int math 、、、}。所以
33、此次首先解決的問題應(yīng)該是找到一種適合的數(shù)據(jù)結(jié)構(gòu)來完成所有的設(shè)計(jì)。</p><p> 因?yàn)槭紫炔捎玫腗asm for Windows軟件,其中的調(diào)試很是不直觀,所以采用了Emu8086軟件來完成一些基本的設(shè)計(jì)。其中遇到的問題主要是DOS 09H功能調(diào)用的失敗導(dǎo)致程序設(shè)計(jì)根本無法進(jìn)行下去,后來設(shè)置為單個(gè)字符的輸出作為提示符逐步的完成所有的功能。其中如JA 、JB等指令的條件都很好的能夠知道,還有就是能夠單步的執(zhí)行指
34、令,查看常用寄存器中的內(nèi)容。這樣的軟件對于我來說簡直是太棒了!我基本上能夠清晰的知道那個(gè)指令引起數(shù)據(jù)變化以及如何變化等。如成績信息復(fù)制模塊的設(shè)計(jì)在開始的時(shí)候由于CX頻繁的使用導(dǎo)致其循環(huán)的次數(shù)根本就是無效的,如CX=**FF等等。</p><p> 還有的一點(diǎn)就是所有的設(shè)計(jì)要畫圖。因?yàn)閰R編中的內(nèi)存數(shù)據(jù)主要是通過DI跟SI來控制的,所以你必須清楚的知道某一步操作完成之后的DI、SI的指向問題。如此次的課程設(shè)計(jì)中的成
35、績信息復(fù)制函數(shù)由于將所有的某個(gè)學(xué)生的成績相加放入RANK數(shù)組中后,忘記將SI加1導(dǎo)致將第5個(gè)成績作為學(xué)號(hào)輸入RANK數(shù)組中。</p><p> 此次課程設(shè)計(jì)使我對于匯編指令的運(yùn)用有了初步的了解以及掌握。我深刻的知道了如果光看書本上的知識(shí)是無法進(jìn)行現(xiàn)實(shí)操作的,那就是眼高手低的表現(xiàn)。任何的知識(shí)不僅僅是要看書了解、通讀、、、更為重要的是你要將學(xué)到的知識(shí)熟練的運(yùn)用到現(xiàn)實(shí)生活中來。還有就是有不知道的問題可以尋求老師、同學(xué)
36、以及網(wǎng)絡(luò)的幫助。要知道一個(gè)人的力量總是有限的,大家的力量才是無限的。</p><p> 總之一句話,此次課程設(shè)計(jì)我學(xué)到了很多。</p><p> 課題二: 中斷駐留程序</p><p><b> 一、課題的主要功能</b></p><p> 本課題主要是完成一個(gè)中斷駐留程序,要求在屏幕的右上角顯示當(dāng)前的系統(tǒng)時(shí)間,
37、時(shí)間格式為時(shí):分:秒</p><p> 完成該課題的系統(tǒng)時(shí)間功能,需要不斷地以同步顯示系統(tǒng)時(shí)間,這里我們需要用</p><p> INT 1CH,平均每秒中斷18.2次,以這樣的頻率同步顯示系統(tǒng)時(shí)間足以滿足人們的視覺效果。完成系統(tǒng)時(shí)間同步的前提下,還要讀取系統(tǒng)時(shí)間和顯示時(shí)間。</p><p><b> 二、課題的概要設(shè)計(jì)</b></
38、p><p><b> 2.1功能模塊解釋</b></p><p> 該課題的的功能模塊,就是在定義好數(shù)據(jù)之后,完成讀取系統(tǒng)時(shí)間和顯示系統(tǒng)時(shí)間兩大模塊。包括獲取原中斷類型,保存原中斷類型,設(shè)置新的中斷類型,執(zhí)行中斷處理程序,應(yīng)用堆棧保護(hù)現(xiàn)場,讀取系統(tǒng)時(shí)間,然后分別將時(shí)間的BCD碼轉(zhuǎn)換為字符,在制定內(nèi)存位置寫入時(shí)間并顯示時(shí)間,最后恢復(fù)現(xiàn)場,中斷返回。</p>
39、<p> 該課題,采用調(diào)用子程序的思想來完成,主體功能都通過子程序模塊完成,中斷模塊,讀取系統(tǒng)時(shí)間模塊,顯示系統(tǒng)模塊,現(xiàn)場保護(hù)模塊及現(xiàn)場恢復(fù)模塊。通過調(diào)用子程序的方法,使本程序更加具有條理性,其中現(xiàn)場保護(hù)是為了使寄存器里有用的數(shù)據(jù)保存起來,讓寄存器進(jìn)行其他運(yùn)算,現(xiàn)場恢復(fù)是使之前保護(hù)起來的有用數(shù)據(jù)恢復(fù),讀取系統(tǒng)時(shí)間并使屏幕顯示的時(shí)間與系統(tǒng)時(shí)間同步變化,這就不得不使用中斷模塊,運(yùn)用INT 1CH,可以平均每秒中斷18.2次,足
40、以滿足視覺上的同步。</p><p> 2.2功能模塊流程圖</p><p> 2.3主要功能流程圖</p><p><b> 三、課題詳細(xì)設(shè)計(jì)</b></p><p> 3.1 系統(tǒng)時(shí)間功能調(diào)用</p><p> 這個(gè)程序主要是要實(shí)現(xiàn)獲取系統(tǒng)時(shí)間并顯示時(shí)間。</p>&l
41、t;p> 步驟一:定好好數(shù)據(jù)之后,在DOS環(huán)境下,用2C號(hào)取系統(tǒng)時(shí)間的功能,將時(shí)賦值 </p><p> 給CH,將分賦值給CL,將秒賦值給DH,將1/100賦值給DL,具體實(shí)現(xiàn)如下:</p><p> MOV AH,2CH INT 21H MOV HOUR, CH MOV MINUTE,CL MOV SECOND,DH</p>&l
42、t;p> 3.2 系統(tǒng)時(shí)間顯示</p><p> 子函數(shù)INTIC來具體實(shí)現(xiàn)系統(tǒng)時(shí)間顯示,將從系統(tǒng)中讀取的時(shí),分,秒分別送入內(nèi)存T到T7,然后塊裝入指令 把SI指向的存儲(chǔ)單元讀入累加器,其具體實(shí)現(xiàn)如下:</p><p> C1: MOV AL,HOUR CBW MOV DL,0AH DIV DL OR AX,3030H MOV WORD PTR[T],AX ;將小時(shí)送
43、入到[T] MOV AL,MINUTE CBW DIV DL OR AX,3030H MOV WORD PTR[T+3],AX ;將分鐘送入到[T+3]和[T+4] MOV AL,SECOND CBW DIV DL OR AX,3030H MOV WORD PTR[T+6],AX ;將秒鐘送入到[T+6]和[T+7] MOV CX,8 MOV AX,0B800H MOV ES,AX LEA SI,[T] M
44、OV DI,144 </p><p> C3: LODSB ;塊裝入指令 把SI指向的存儲(chǔ)單元讀入累加器 STOSW ;從 AX 讀取的字 送入到ES:DI LOOP C3 CEND: IRET INT1C ENDP </p><p><b> 四.程序調(diào)試</b></p><p><b> 4.1程序分析</b&
45、gt;</p><p> 4.1.1 時(shí)間的顯示</p><p> MOV AX,3100H</p><p> MOV DX,(PRG_LEN+15)/16+16</p><p><b> INT 21H</b></p><p> 調(diào)用DOS的31H功能,可以將光標(biāo)及系統(tǒng)時(shí)間顯示在屏
46、幕的右上方。</p><p> 4.1.2 INT1C的調(diào)用</p><p> INT1C PROC FAR DEC CS:COUNT JZ C2 JMP CEND </p><p> 通過調(diào)用INT1C,我們實(shí)現(xiàn)了函數(shù)的中斷功能,程序運(yùn)行至此中斷處,將執(zhí)行中斷處理功能,此時(shí)程序跳轉(zhuǎn)到中斷函數(shù)處,待執(zhí)行中斷函數(shù)后,返回到原來中斷處,繼續(xù)執(zhí)行下一個(gè)步驟。
47、</p><p><b> 4.2程序測試</b></p><p><b> 程序運(yùn)行結(jié)果</b></p><p><b> 心得體會(huì)</b></p><p> 通過本次的中斷駐留程序,對于DOS以及BOIS功能的調(diào)用更為熟悉。鞏固了關(guān)于系統(tǒng)中斷向量的了解。中斷程序的主
48、要的目的是提高CPU的利用率,中斷處理過程最為主要的一點(diǎn)就是保存斷點(diǎn)現(xiàn)場。其次也進(jìn)一步的了解了8086的指令的運(yùn)用,對于計(jì)算機(jī)硬件有了相對的了解。</p><p> 此次課程設(shè)計(jì)到這里已經(jīng)基本結(jié)束了,其中最大的體會(huì)就是前面所講的匯編程序設(shè)計(jì)跟C語言等高級語言程序設(shè)計(jì)最大的差別就在于數(shù)據(jù)段的定義以及操作的對象上面。像上面程序設(shè)計(jì)你所用到的指令的操作對象永遠(yuǎn)只有6個(gè):AX、BX、、、所以有時(shí)候就感覺像穿著棉襖在游泳
49、很是束縛,但是毫無疑問的是匯編永遠(yuǎn)是計(jì)算機(jī)人員必須掌握的一門語言,不僅僅是因?yàn)閷?shí)用性等,更多的是匯編程序設(shè)計(jì)讓我們有更多的時(shí)間來思考如何設(shè)計(jì),而不是尋求插件等方式來減少設(shè)計(jì)過程中要關(guān)心的問題。在當(dāng)今這個(gè)高級語言泛濫的年代中,我們總是在瘋狂的追逐流行語言,雖然他們讓我們更加簡單的設(shè)計(jì)程序,但是不得不說他讓程序設(shè)計(jì)人員感覺就像是時(shí)尚產(chǎn)品一樣有保質(zhì)期,當(dāng)然還有更多的不足之處,當(dāng)然還是利大于弊的。匯編程序設(shè)計(jì)就像是金字塔的底層,我們應(yīng)該懂得如何
50、使用,我們也必須知道并熟練的使用,因?yàn)樗撬谐绦蛟O(shè)計(jì)的基礎(chǔ)。</p><p> 課程設(shè)計(jì)的時(shí)間已經(jīng)過去了,但是我的匯編之旅才剛剛開始,寒假就是一個(gè)不錯(cuò)的時(shí)間段!</p><p> 附錄1:學(xué)生成績排名程序</p><p><b> 源代碼: </b></p><p> DATAS SEGMENT
51、 ;數(shù)據(jù)段</p><p> M EQU 3 ;成績長度</p><p> NO EQU 10 ; 學(xué)生數(shù)目</p><p> DIQIT EQU 2 ;學(xué)生數(shù)目的位數(shù)</p><p> G EQU 5
52、 ;成績數(shù)目</p><p> FLAG DB 1</p><p> FLAG1 DW 1 </p><p> P DW 0</p><p> DATA1 DW 0 ;輸出緩沖區(qū)</p><p> SCORE DB
53、 60 DUP(0) ;成績存儲(chǔ)空間</p><p> RANK DW NO*2 DUP(0) ;學(xué)生名次</p><p> BUFFER1 DB 'START$'</p><p> BUFFER2 DB 10,13,'PLEASE ENTER THE NUMBER OF STUD
54、ENT:',10,13,'$'</p><p> BUFFER3 DB 10,13,10,13,'HERE IS RANK BY THE GRADE OF THE STUDENTS:',10,13,10,13, '$'</p><p> BUFFER4 DB 10,13,'PLEASE EN
55、TER THE NUMBER OF STUDENT AGAIN:',10,13,'$'</p><p> BUFFER5 DB 10,13,'PLEASE ENTER THE IMFORMATION OF STUDENT:',10,13,'$'</p><p> BUFFER6 DB 10,13,&
56、#39;NO CHINESE MATH1 MATH2 ENGLISH BIOLOGY' ,10,13,'$'</p><p> DATAS ENDS</p><p> CODES SEGMENT ;代碼段</p><p> ASSUME CS:CODES,DS:DATAS</
57、p><p><b> START:</b></p><p> MOV AX,DATAS ;初始化</p><p> MOV DS,AX</p><p> CALL WELCOME</p><p><b> INPUT:</b>&l
58、t;/p><p><b> ;輸入提示 </b></p><p> MOV DX,OFFSET BUFFER5</p><p> MOV AH,09H</p><p> INT 21H</p><p> CALL ENT</p>&
59、lt;p> MOV DX,OFFSET BUFFER6</p><p> MOV AH,09H</p><p> INT 21H</p><p> CALL ENT </p><p> XOR AX,AX</p><p> MOV
60、AX,P ;輸入循環(huán)次數(shù)控制</p><p> MOV DX,G</p><p> ADD DX,1</p><p> MUL DX</p><p> MOV CX,AX</p><p> MOV DX,0</p><
61、;p> MOV FLAG1,DX</p><p> LEA SI,SCORE</p><p><b> INPUT1: </b></p><p> MOV BX,0</p><p> CALL INPUT2</p><p> MOV
62、 [SI],BX</p><p> INC SI</p><p> MOV DX,FLAG1 </p><p> INC DX</p><p> MOV FLAG1,DX</p><p> MOV AX,DX</p><
63、;p> MOV BX,G+1</p><p> MOV FLAG1,DX</p><p> SUB BX,DX</p><p> CMP BX,1</p><p> JAE INPUT3 </p><p> MOV DX,FLAG
64、1</p><p> MOV DX,0</p><p> MOV FLAG1,DX</p><p> CALL ENT</p><p><b> INPUT3: </b></p><p> LOOP INPUT1</p><
65、;p> JMP COPY </p><p> INPUT2 PROC NEAR</p><p> MOV AH,01H</p><p> INT 21H</p><p> CMP AL,'0'</p><p> JB
66、 EXT2</p><p> CMP AL,'9'</p><p> JA EXT2</p><p> CMP AL,09H</p><p> JBE EXT2</p><p> AND AX,00FFH</p>&
67、lt;p> SUB AL,30H</p><p><b> CBW</b></p><p> XCHG AX,BX</p><p> MOV DX,10</p><p> MUL DX</p><p> ADD BX,AX
68、</p><p> JMP INPUT2</p><p> INPUT2 ENDP</p><p><b> COPY:</b></p><p> LEA SI,SCORE</p><p> LEA DI,RANK</p><p&
69、gt; MOV CX,P</p><p><b> COPY1:</b></p><p> MOV DX,CX</p><p> PUSH DX</p><p> MOV AL,[SI]</p><p><b> CBW</
70、b></p><p> MOV [DI],AX</p><p> INC DI</p><p> INC DI </p><p> MOV CX,G</p><p> MOV AX,0 </p><p> MOV
71、 BX,0</p><p><b> COPY2: </b></p><p> INC SI</p><p> MOV BL,BYTE PTR[SI]</p><p> ADD AX,BX </p><p> LOOP COPY2&
72、lt;/p><p> MOV [DI],AX</p><p> INC DI</p><p> INC DI</p><p> INC SI</p><p> POP DX </p><p> MOV CX,DX &
73、lt;/p><p> DEC DX</p><p> LOOP COPY1</p><p><b> SORT:</b></p><p> LEA DI,SCORE</p><p> MOV BX,[DI]</p><p>
74、; CMP BX,0 ;無學(xué)生信息 則退出系統(tǒng)</p><p> JBE EXT1</p><p> MOV CX,P</p><p> DEC CX</p><p><b> SORT1:</b></p><p> LEA
75、 SI,RANK</p><p> MOV DI,SI</p><p> ADD DI,4 </p><p> MOV DX,CX</p><p><b> SORT3:</b></p><p> MOV AX,[SI+2]&l
76、t;/p><p> MOV BX,[DI+2]</p><p> CMP AX,BX</p><p> JAE SORT2 ;ax>bx</p><p> MOV AX,[SI]</p><p> MOV BX,[DI]</p&g
77、t;<p> XCHG AX,BX</p><p> MOV [SI],AX</p><p> MOV [DI],BX</p><p> MOV AX,[SI+2]</p><p> MOV BX,[DI+2]</p><p> XCH
78、G AX,BX</p><p> MOV [SI+2],AX</p><p> MOV [DI+2],BX</p><p><b> SORT2:</b></p><p> ADD SI,4</p><p> ADD DI,4&l
79、t;/p><p> LOOP SORT3</p><p> MOV CX,DX</p><p> DEC DX</p><p> LOOP SORT1</p><p> LEA SI,RANK</p><p> MOV
80、CX,P </p><p> MOV BX,1</p><p><b> RANKING:</b></p><p> MOV [SI+2],BX</p><p> INC BX</p><p> ADD SI,4</p>&l
81、t;p> LOOP RANKING</p><p><b> OUTPUT:</b></p><p> LEA DX,BUFFER3</p><p> MOV AH,09H</p><p> INT 21H</p><p> LEA
82、 SI,RANK</p><p> MOV BX,P</p><p> OUTPUT2: PUSH BX</p><p> MOV CX,2</p><p> OUTPUT3: PUSH CX </p><p> MOV AX,[SI]&l
83、t;/p><p> MOV DATA1,AX</p><p> CALL OUTPUT1</p><p> MOV DX,09H</p><p> MOV AH,02H</p><p> INT 21H</p><p> ADD
84、 SI,2 </p><p> POP CX</p><p> LOOP OUTPUT3</p><p> CALL ENT</p><p> POP BX</p><p> MOV CX,BX</p><p> DE
85、C BX</p><p> LOOP OUTPUT2 </p><p> JMP EXT1</p><p> OUTPUT1 PROC NEAR</p><p> MOV BX,DIQIT</p><p> DEC BX</p>
86、<p> MOV CX,BX</p><p><b> CHANGE1:</b></p><p> MOV AL,1</p><p> MOV DX,10</p><p> MUL DX</p><p> LOOP
87、 CHANGE1</p><p> MOV DX,AX</p><p> MOV AX,DATA1</p><p><b> CBW</b></p><p> DIV DL</p><p> MOV DL,AH</p><
88、;p><b> CBW</b></p><p> MOV DATA1,DX</p><p> MOV DL,AL</p><p> ADD DL,30H</p><p> CMP DL,31H</p><p> JB
89、CHANGE2</p><p> MOV AH,02H</p><p> INT 21H</p><p><b> CHANGE2: </b></p><p> MOV CX,BX</p><p> DEC BX</p>&l
90、t;p> LOOP CHANGE1</p><p> MOV DX,DATA1</p><p> ADD DL,30H</p><p> MOV AH,02H</p><p> INT 21H</p><p> RET </p
91、><p> OUTPUT1 ENDP</p><p> ENT PROC NEAR</p><p> MOV AH,2</p><p> MOV DL,0DH</p><p> INT 21H</p><p> MOV AH,
92、2</p><p> MOV DL,0AH</p><p> INT 21H </p><p><b> RET</b></p><p><b> ENT ENDP</b></p><p> WELCOME PROC NEAR&
93、lt;/p><p> MOV DX,OFFSET BUFFER1</p><p> MOV AH,09H</p><p> INT 21H</p><p> CALL ENT</p><p> MOV DX,OFFSET BUFFER2</p>
94、<p> MOV AH,09H</p><p> INT 21H</p><p> CALL ENT</p><p><b> IN1:</b></p><p> MOV AH,01H</p><p> INT 2
95、1H</p><p> SUB AL,30H</p><p> CMP AL,NO ;判斷學(xué)生人數(shù)是否超過上限</p><p> JA RIN1 ;如果超過上限則重新輸入</p><p> JMP NEXT1</p><p><
96、b> RIN1:</b></p><p> MOV DX,OFFSET BUFFER4 ;如果超過上限則重新輸入</p><p> MOV AH,09H</p><p> INT 21H</p><p> JMP IN1</p><p&
97、gt;<b> NEXT1: </b></p><p> MOV AH,0</p><p> MOV P,AX ;將學(xué)生人數(shù)輸入至p</p><p> CALL ENT</p><p><b> RET</b></p><
98、;p> WELCOME ENDP</p><p><b> EXT1:</b></p><p> MOV AX,4C00H ;退出程序</p><p> INT 21H</p><p><b> EXT2:</b></p><p&g
99、t;<b> RET</b></p><p> CODES ENDS</p><p> END START</p><p> 附錄2:中斷駐停程序</p><p><b> 源代碼:</b></p><p> CODE SEGMENT ORG 10
100、0H ASSUME CS:CODE,DS:CODE HOUR DB 0 MINUTE DB 0 SECOND DB 0 COUNT DB 18 T DB "00:00:00" </p><p> START:MOV AX,CODE MOV DS,AX MOV AH,2CH INT 21H MOV HOUR, CH MOV MINUTE,CL MOV SECOND,D
101、H LEA DX,INT1C MOV AX,251CH INT 21H MOV AH,1 INT 21H MOV AX,3100H ;駐留內(nèi)存 MOV DX,(PRG_LEN+15)/16+16 INT 21H </p><p> INT1C PROC FAR DEC CS:COUNT JZ C2 JMP CEND </p><p> C2: PUSH DS
102、PUSH ES PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH CS POP DS MOV COUNT,18 INC SECOND CMP SECOND,60 JB C1 MOV SECOND,0 INC MINUTE CMP MINUTE,60 JB C1 MOV MINUTE,0 INC HOUR CMP HOUR,24 JB C1
103、MOV HOUR,0 </p><p> C1: MOV AL,HOUR CBW MOV DL,0AH DIV DL OR AX,3030H MOV WORD PTR[T],AX ;將小時(shí)送入到[T] MOV AL,MINUTE CBW DIV DL OR AX,3030H MOV WORD PTR[T+3],AX ;將分鐘送入到[T+3]和[T+4] MOV AL,SECOND CB
104、W DIV DL OR AX,3030H MOV WORD PTR[T+6],AX ;將秒鐘送入到[T+6]和[T+7] MOV CX,8 MOV AX,0B800H MOV ES,AX LEA SI,[T] MOV DI,144 </p><p> C3: LODSB ;塊裝入指令 把SI指向的存儲(chǔ)單元讀入累加器 STOSW ;從 AX 讀取的字 送入到ES:DI LOOP C3 POP
105、 DI POP SI POP DX POP CX POP BX POP AX POP ES POP DS CEND: IRET INT1C ENDP PRG_LEN EQU $-START CODE ENDS END START </p><p> 計(jì)算機(jī)科學(xué)與技術(shù)系課程設(shè)計(jì)評分表</p><p> 課程名稱:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)報(bào)告a
- 匯編語言課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)報(bào)告---打字游戲
- 匯編語言課程設(shè)計(jì)安排
- 《匯編語言》課程設(shè)計(jì)報(bào)告--判斷閏年程序
- 匯編語言課程設(shè)計(jì)報(bào)告---顯示系統(tǒng)時(shí)間
- 《匯編語言》課程設(shè)計(jì)報(bào)告顯示系統(tǒng)時(shí)間
- 匯編語言推箱子課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)----電子鬧鐘
- 打字游戲-匯編語言課程設(shè)計(jì)
- 匯編語言程序設(shè)計(jì)-課程設(shè)計(jì)
- 匯編語言程序設(shè)計(jì)課程設(shè)計(jì)
- 匯編語言動(dòng)畫設(shè)計(jì)課程設(shè)計(jì)
- 微機(jī)原理與匯編語言課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)磁盤文件管理
- 匯編語言課程設(shè)計(jì)_提取系統(tǒng)時(shí)間
- 匯編語言課程設(shè)計(jì)《定時(shí)顯示系統(tǒng)》
評論
0/150
提交評論