版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 課程設(shè)計任務(wù)書2</b></p><p> 學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn)3</p><p> 1.設(shè)計內(nèi)容及要求3</p><p><b> 1.1設(shè)計題目3</b></p>&
2、lt;p><b> 1.2設(shè)計要求3</b></p><p> 2.設(shè)計中使用的關(guān)鍵技術(shù)和方法3</p><p><b> 2.1宏匯編3</b></p><p> 2.2子程序結(jié)構(gòu)3</p><p> 2.3 BIOS顯示中斷(INT 10H)3</p>&
3、lt;p> 2.4 DOS系統(tǒng)功能調(diào)用(INT 21H)4</p><p> 2.5 本次程序用到的控制轉(zhuǎn)移指令4</p><p> 3.設(shè)計方案說明5</p><p> 3.1程序結(jié)構(gòu)的描述5</p><p> 3.2 程序流程圖5</p><p> 3.3主要數(shù)據(jù)結(jié)構(gòu)和函數(shù)的定義和說明
4、6</p><p> 4. 測試及調(diào)試過程8</p><p> 4.1 調(diào)試過程8</p><p> 4.2 測試結(jié)果8</p><p> 5. 設(shè)計心得11</p><p><b> 6.參考文獻12</b></p><p> 7. 附錄:源程序清單
5、12</p><p> 本科生課程設(shè)計成績評定表25</p><p><b> 課程設(shè)計任務(wù)書</b></p><p> 學(xué)生姓名: 專業(yè)班級: </p><p> 指導(dǎo)教師: 工作單位: </p><p> 題目: 學(xué)生成績管理</p>&l
6、t;p><b> 初始條件:</b></p><p> 理論:完成了《匯編語言程序設(shè)計》課程,對微機系統(tǒng)結(jié)構(gòu)和80系列指令系統(tǒng)有了較深入的理解,已掌握了匯編語言程序設(shè)計的基本方法和技巧。</p><p> 實踐:完成了《匯編語言程序設(shè)計》的4個實驗,熟悉了匯編語言程序的設(shè)計環(huán)境并掌握了匯編語言程序的調(diào)試方法。</p><p> 要
7、求完成的主要任務(wù): (包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p> 進一步理解和掌握較復(fù)雜程序的設(shè)計方法,掌握子程序結(jié)構(gòu)的設(shè)計和友好用戶界面的設(shè)計。具體的設(shè)計任務(wù)及要求:</p><p> 編寫學(xué)生成績信息管理程序,學(xué)生信息采用文件存儲;</p><p> 要求能實現(xiàn)學(xué)生成績信息的增、刪、改、查;</p><
8、p> 程序采用子程序結(jié)構(gòu),結(jié)構(gòu)清晰;</p><p> 友好清晰的用戶界面,能識別輸入錯誤并控制錯誤的修改。</p><p> 在完成設(shè)計任務(wù)后,按要求撰寫課程設(shè)計說明書;對課程設(shè)計說明書的具體要求請見課程設(shè)計指導(dǎo)書。</p><p><b> 閱讀資料:</b></p><p> 1)《IBM—PC匯編
9、語言程序設(shè)計實驗教程》實驗2.4</p><p> 2)《IBM—PC匯編語言程序設(shè)計(第2版)》例6.11</p><p><b> 時間安排:</b></p><p> 設(shè)計安排一周:周1、周2:完成系統(tǒng)分析及設(shè)計。</p><p> 周3、周4:完成程序調(diào)試,和驗收。</p><p>
10、; 周5:撰寫課程設(shè)計報告。</p><p> 指導(dǎo)教師簽名: 年 月 日</p><p> 系主任(或責(zé)任教師)簽名: 年 月 日</p><p> 學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn)</p><p><b> 1.設(shè)計內(nèi)容及要求</
11、b></p><p><b> 1.1設(shè)計題目</b></p><p> 學(xué)生成績管理系統(tǒng)的設(shè)計與實現(xiàn)</p><p><b> 1.2設(shè)計要求</b></p><p> 進一步理解和掌握較復(fù)雜程序的設(shè)計方法,掌握子程序結(jié)構(gòu)的設(shè)計和友好用戶界面的設(shè)計。具體的設(shè)計任務(wù)及要求:</p
12、><p> 編寫學(xué)生成績信息管理程序,學(xué)生信息采用文件存儲;</p><p> 要求能實現(xiàn)學(xué)生成績信息的增、刪、改、查;</p><p> 程序采用子程序結(jié)構(gòu),結(jié)構(gòu)清晰;</p><p> 友好清晰的用戶界面,能識別輸入錯誤并控制錯誤的修改。</p><p> 2.設(shè)計中使用的關(guān)鍵技術(shù)和方法</p>
13、<p><b> 2.1宏匯編</b></p><p> 宏是源程序中一段有獨立功能的代碼。</p><p> 宏定義是用一組偽操作來實現(xiàn)的,其格式如下:</p><p> macro name MARCO [dummy parameter list]</p><p> …… (宏定義體)<
14、;/p><p><b> ENDM</b></p><p> 宏指令的調(diào)用稱為宏調(diào)用,宏調(diào)用的格式:</p><p> macro name [actual parameter list]</p><p> 實元表(actual parameter list)中的每一項為實元,相互之間用逗號隔開</p>
15、<p><b> 2.2子程序結(jié)構(gòu)</b></p><p> 子程序又稱為過程,它相當(dāng)于高級語言中的過程和函數(shù)。</p><p> 過程定義偽操作用在過程的前后,是整個過程形成清晰的,具有特定功能的代碼塊。其格式如下:</p><p> procedure name PROC Attribute</p>&l
16、t;p><b> ……</b></p><p> procedure name ENDP</p><p><b> 過程的調(diào)用格式:</b></p><p> call procedure name</p><p> 2.3 BIOS顯示中斷(INT 10H)</p>
17、<p> 本次程序中使用了BIOS顯示中斷的3個功能,如下表:</p><p> 2.4 DOS系統(tǒng)功能調(diào)用(INT 21H)</p><p> 本次程序中使用了DOS系統(tǒng)功能調(diào)用的個功能,如下表:</p><p> 2.5 本次程序用到的控制轉(zhuǎn)移指令</p><p> ?。?)JZ 結(jié)果為零(或相等)則轉(zhuǎn)移</p&g
18、t;<p> 格式:JZ OPR 測試條件:ZF=1</p><p> ?。?)JL 小于,或者不大于或等于則轉(zhuǎn)移</p><p> 格式:JL OPR 測試條件:SF∨OF=1</p><p> ?。?)JNZ 結(jié)果不為零(或不相等)則轉(zhuǎn)移</p><p> 格式:JNZ OPR 測試條件:ZF=0</
19、p><p> ?。?)JMP 跳轉(zhuǎn)指令 </p><p> 無條件地轉(zhuǎn)移到指令的地址去執(zhí)行從該地址開始的指令</p><p> (5)LOOP 循環(huán)指令</p><p> 格式: LOOP OPR 測試條件:(Count Reg≠0)</p><p><b> 3.設(shè)計方案說明</b><
20、/p><p> 3.1程序結(jié)構(gòu)的描述</p><p> 本程序?qū)崿F(xiàn)學(xué)生成績的管理,主要功能有插入,查詢,修改,刪除等。本程序首先定義數(shù)據(jù)塊data,其中包括運行界面的定義;score struc是用來定義一條學(xué)生記錄中所包含的姓名,學(xué)號,成績等信息;另外用宏定義用來實現(xiàn)函數(shù),show函數(shù)用來輸出定義好的mess語句,來實現(xiàn)界面;set_p函數(shù)用來定義光標位置,以實現(xiàn)不同位置的輸入;clea
21、r函數(shù)用來清屏;newline函數(shù)實現(xiàn)換行,這樣在主函數(shù)中實現(xiàn)換行時直接調(diào)用newline即可;show_item用來輸出記錄;getin函數(shù)用來接收從鍵盤輸入的記錄。</p><p> main函數(shù)中定義了幾個子函數(shù)分別用來實現(xiàn)不同的功能,這幾個子函數(shù)均是調(diào)用data中的函數(shù)來實現(xiàn)自身功能的,其中insert函數(shù)用來插入記錄;query用來按姓名查找記錄;query1用來按學(xué)號查找記錄;modify用來實現(xiàn)修
22、改記錄;delete用來實現(xiàn)刪除記錄;list函數(shù)可以實現(xiàn)所有記錄的顯示。</p><p><b> 3.2 程序流程圖</b></p><p> i q Q m d e </p><p> e
23、 e e e e </p><p> 3.3主要數(shù)據(jù)結(jié)構(gòu)和函數(shù)的定義和說明</p><p> (1)學(xué)生成績數(shù)據(jù)結(jié)構(gòu),包括姓名。學(xué)號,和四科成績,其中姓名定義為13個字節(jié),學(xué)號和成績各占2個字節(jié),所以每條記錄占23個字節(jié)。</p><p> score struc&
24、lt;/p><p> names db 13 dup(' ')</p><p> number db 0,0</p><p> maths db 0,0</p><p> english db 0,0</p><p> chinese db 0,0</p><
25、;p> others db 0,0</p><p> score ends</p><p> ?。?)置光標函數(shù),set_p1用于輸入記錄時的光標位置,它帶有一個參數(shù)a,用來動態(tài)的調(diào)整光標所在行,從而輸入一條完整的記錄;set_p2用于查詢記錄輸入關(guān)鍵字或輸出錯誤信息時的光標位置,set_p3用于程序剛開始時輸入控制字符時的光標位置。用到了BIOS功能的調(diào)用(INT=10H,
26、AH=2)。</p><p> set_p1 macro a </p><p><b> mov ah,2</b></p><p><b> mov dh,a</b></p><p><b> mov dl,36</b></p>&l
27、t;p><b> mov bh,0</b></p><p> int 10h ;bh=page dh/dl=h/l</p><p><b> endm</b></p><p> ?。?)清屏函數(shù)clear,clear1,clear2均是用來在不同時期清屏,用到了BIOS功能的調(diào)用(INT=10H
28、,AH=6)。</p><p> clear macro ;all screen</p><p><b> mov al,0</b></p><p><b> mov cl,0</b></p><p><b> mov ch,0<
29、;/b></p><p><b> mov dh,24</b></p><p><b> mov dl,79</b></p><p><b> mov bh,7</b></p><p> mov ah,6 ;screen &
30、lt;/p><p><b> int 10h</b></p><p><b> endm</b></p><p> ?。?)輸出記錄函數(shù)show_item,其中定義了兩個變量iloop,w10。iloop用于輸出姓名,用到了jl跳轉(zhuǎn)指令從而挨個字節(jié)的輸出13個自己的姓名;w10利用循環(huán)指令loop循環(huán)5次來分別輸入學(xué)號和四
31、門成績,用到了DOS系統(tǒng)功能調(diào)用(INT=21H,AH=2)。</p><p> (5)接受字符函數(shù) getin,其中定義了四個變量zeroit,lp,input_end,exit。將用于在后面插入子函數(shù)insert中調(diào)用的get_rec子函數(shù)來調(diào)用,方可實現(xiàn)記錄的輸入。</p><p> ?。?)插入記錄函數(shù)insert,先打開文件然后進行寫入,寫入時先寫入姓名,學(xué)號和四門成績將調(diào)用子
32、函數(shù)get_rec來寫入,而get_rec函數(shù)又調(diào)用接受字符函數(shù) getin來寫入記錄,用到了DOS系統(tǒng)功能調(diào)用(INT=21H,AH=1和AH=3e,3d)等對文件的打開和關(guān)閉操作等。</p><p> ?。?)查詢函數(shù)包括按姓名查找和按學(xué)號查找,以前者為例,</p><p><b> b: </b></p><p> mov ah,3
33、fh</p><p><b> mov cx,23</b></p><p> mov dx,offset buffer2</p><p> int 21h ;read file</p><p> lea si,buffer2</p><p> lea di,buf
34、fer1</p><p> mov cx,13 ;cx count</p><p><b> c: </b></p><p> mov al,byte ptr[si] </p><p> cmp al,byte ptr[di]</p><p> jnz b
35、 ;not equal </p><p><b> inc si</b></p><p><b> inc di</b></p><p><b> loop c</b></p><p> 這兩個模塊實現(xiàn)對姓名的匹配用到了跳轉(zhuǎn)指令jnz和循環(huán)指
36、令loop實現(xiàn)對姓名的矮個字符的匹配對照。若匹配成功則輸出相應(yīng)的記錄,次記錄是保存在buffer2中的。</p><p> mov [buffer2+23],'$ </p><p> show_item buffer2 即可實現(xiàn)記錄的正確輸出。</p><p> (8)修改記錄函數(shù)modify。</p><p><b&
37、gt; read: </b></p><p> mov dx,offset buffer2</p><p><b> mov cx,23</b></p><p> mov ah,3fh ;read file</p><p><b> int 21h</b><
38、;/p><p> lea si,buffer2</p><p> lea di,buffer1</p><p><b> mov cx,13</b></p><p><b> c5: </b></p><p> mov dl,byte ptr[si] </p&g
39、t;<p> cmp dl,byte ptr[di]</p><p><b> jnz read</b></p><p><b> inc si</b></p><p><b> inc di</b></p><p><b> loop c5&
40、lt;/b></p><p> 這兩個模塊實現(xiàn)姓名的匹配從而找到正確的記錄位置,然后調(diào)用DOS系統(tǒng)功能INT=21H,AH=42實現(xiàn)文件指針的正確定位,具體為從記錄末尾向前移23字節(jié)即可,即cx=0ffffh,dx=-23。AH=40用于寫入修改后的記錄。最后關(guān)閉文件即可,如果找不到匹配的記錄,則輸出錯誤提示信息“ there is not this student”。</p><p&
41、gt; ?。?)刪除記錄函數(shù)delete,和修改記錄函數(shù)一樣先是實現(xiàn)姓名的匹配,然后文件指針正確定位。在此要說明的是,本程序刪除記錄并不是真正意義上的刪除,而是將待刪除的記錄的學(xué)號和成績?nèi)扛綖?,從而變相的刪除記錄,所以在找到正確記錄的位置時,只需寫入10個0 將原有記錄替代即可:</p><p><b> mov cx,10</b></p><p> mov
42、dx,offset del</p><p> mov ah,40h</p><p> int 21h </p><p> 其中del為:“del db 10 dup('0')”</p><p> ?。?0)輸出全部記錄函數(shù)list:調(diào)用show_item函數(shù)輸出一條記錄,并利用jmp跳轉(zhuǎn)指令循環(huán)輸出其他記錄,
43、知道記錄全部輸出完畢。</p><p> 4. 測試及調(diào)試過程</p><p><b> 4.1 調(diào)試過程</b></p><p> 將程序在記事本中編輯完成后,保存在masm文件夾下,格式為.asm。另外在本文件夾下創(chuàng)建一個文本文檔score.txt用于保存學(xué)生成績記錄。</p><p> 然后打開命令提示符窗
44、口,跳轉(zhuǎn)到masm文件夾下進行操作,首先進行匯編:masm hb;產(chǎn)生二進制的目標文件,如果有錯則進行修改只到?jīng)]有錯誤為止,然后利用link程序產(chǎn)生exe文件:link hb;最后在建立了exe文件后,就直接從dos執(zhí)行程序:hb。</p><p><b> 4.2 測試結(jié)果</b></p><p> ?。?)本程序運行界面如下:</p><p&
45、gt; (2)插入一條記錄時(鍵盤輸入i)的界面如下:</p><p> ?。?)按姓名查找(鍵盤輸入q)一條記錄時的界面如下:</p><p> 先輸入要查找的姓名:如Tom</p><p> 然后按回車鍵即會顯示相應(yīng)的要查找的記錄,如下圖:</p><p> 按學(xué)號查找與其類似,不再展示。</p><p>
46、 ?。?)修改一條記錄,在輸入控制字符“m”后,光標便跳到“name”后便可進行重新錄入,</p><p> 若輸入的姓名在記錄里面沒有,則會在屏幕下方顯示出錯信息“ there is not this student”。修改姓名為:Tom的記錄如下圖:</p><p> 修改后再進行一次對caijun的查詢?nèi)缦聢D,即可發(fā)現(xiàn)記錄以改變:(見下頁)</p><p>
47、; ?。?)刪除一條記錄的界面如下:</p><p> 在name后輸入要刪除的記錄Tom后,按回車記錄即已被刪除,學(xué)號和成績即全部為零。</p><p> ?。?)顯示全部記錄的界面如下:</p><p> 可以看到Tom的記錄后面全是零,這是因為上一步中對其記錄進行了刪除。</p><p> 這些記錄全部記錄在同目錄下的文本文檔sc
48、ore.txt里面。</p><p><b> 5. 設(shè)計心得</b></p><p> 本次課程設(shè)計完成的是學(xué)生成績管理系統(tǒng)的匯編實現(xiàn),采用宏匯編、子程序結(jié)構(gòu)等方式實現(xiàn)。由于這次一次綜合性的設(shè)計實驗,光靠課本上的知識是遠遠不夠的,并且有一定的難度。在老師的指導(dǎo),同學(xué)的幫助,以及上網(wǎng)查詢資料后,我順利的完成了本次課程設(shè)計。</p><p>
49、 通過這次課程設(shè)計,我對匯編語言程序設(shè)計有了更進一層的理解,同時對以前學(xué)的組成原理中的一些內(nèi)容也有了更深的理解。在本次實驗中我遇到了很多困難,實驗剛開始時,不知從何下手,后來我把老師提供的參考部分通讀了一遍,許多題目要求就基本搞懂了。我就按要求來寫算法,畫出流程圖,然后就逐個去實現(xiàn)其中的功能。</p><p> 類似題目的課程設(shè)計在C++中里面已經(jīng)做過,但是在開始做匯編的課程設(shè)計時發(fā)現(xiàn)非常難,因為匯編是第一次
50、進行學(xué)習(xí),然后又要做這么復(fù)雜的程序,當(dāng)時真的 感覺很難,在圖書館查書,上網(wǎng)尋找相關(guān)資源后,最后勉強完成任務(wù),程序比較長,通讀的時候有點煩,但只要思路清晰了,讀起來還是可以的。</p><p> 本次實驗的改進階段花的時間最多,不過在這個階段收獲也很多,在改進階段我發(fā)現(xiàn)了很多程序設(shè)計時需要養(yǎng)成的好習(xí)慣。對以后編出更好的程序有很好的啟發(fā)。</p><p> 這整個過程讓我學(xué)到了不少,知識上
51、有了收獲,毅力也得到了鍛煉,對以后的學(xué)習(xí)工作都起到了很大的幫助。這一個星期里面將書翻了好多遍,對匯編的知識比以前更熟悉了,相信這肯定是有好處的。</p><p> 我覺得在以后的學(xué)習(xí)過程中還應(yīng)該多做這樣的設(shè)計,它可以讓我們把所學(xué)的理論用于實踐,一方面可以檢驗并鞏固我們所學(xué)的內(nèi)容,另一方面可以讓我們在實踐中感到所學(xué)知識的實用性,從而提高我們的學(xué)習(xí)興趣。通過這次課程設(shè)計,我的編程能力又得到進一步的提高,同時也培養(yǎng)了
52、我思維能力??傊?,這次課程設(shè)計不僅豐富了我的理論知識,也加強了我的動手能力,還鍛煉了我的思維能力。</p><p> 對于《匯編語言程序設(shè)計》這門課程的學(xué)習(xí)不能就此結(jié)束,它也是我今后學(xué)習(xí)的基礎(chǔ),并且我目前所學(xué)的僅僅是這門課程的入門知識,學(xué)無止境。</p><p><b> 6.參考文獻</b></p><p> [1] 沈美明、溫冬蟬,《
53、IBM-PC匯編語言程序設(shè)計(第2版)》,清華大學(xué)出版社,2004年1月出版。</p><p> [2] 沈美明、溫冬蟬、張赤紅,《IBM-PC匯編語言程序設(shè)計實驗教程》,清華大學(xué)出版社,2003年3月出版。</p><p> 7. 附錄:源程序清單</p><p> data segment</p><p> mess1
54、db ' student grade management system',0ah,0dh,'$'</p><p> mess2 db ' this is main menu',0ah,0dh,'$'</p><p> mess3 db ' insert (i)
55、 please input:',0ah,0dh,'$'</p><p> mess4 db ' modify (m) name :',0ah,0dh,'$'</p><p> mess5 db ' delete (d) number :',0ah,0d
56、h,'$'</p><p> mess6 db ' queryna (q) maths :',0ah,0dh,'$'</p><p> mess7 db ' querynu (Q) english :',0ah,0dh,'$'</p>&
57、lt;p> mess8 db ' chinese :',0ah,0dh,'$'</p><p> mess9 db ' exit (e) others :',0ah,0dh,'$'</p><p> mess10 db '
58、**********************************************************$'</p><p> mess11 db 'name Nu Ma En Ch Ot',0ah,0dh,'$'</p><p> mess12 db ' name
59、 Nu Ma En Co Ch',0ah,0dh,'$'</p><p> mess14 db 'name Nu Ma En Co Ch',0ah,0dh,'$'</p><p> mess13 db ' list (l)',0ah,0dh,'
60、;$'</p><p> err1 db ' there is not this student$'</p><p> fname db "g:score.txt";具體看hb.asm存在何目錄下</p><p> buffer1 db 23 dup(?)</p><p> buf
61、feer db 0ah,0dh,'$'</p><p> buffer2 db 30 dup(?)</p><p> buffer3 db 8 dup('0')</p><p> handle dw ?</p><p> del db 10 dup('0')</p>
62、<p> x db ?</p><p> data ends</p><p> show macro addrs</p><p> lea dx,addrs</p><p> mov ah,9 ;display char dx</p><p><b>
63、; int 21h</b></p><p><b> endm</b></p><p> set_p1 macro a ;輸入記錄是光標位置arrow target //insert</p><p><b> mov ah,2</b></p><p>&
64、lt;b> mov dh,a</b></p><p><b> mov dl,36</b></p><p><b> mov bh,0</b></p><p> int 10h ;bh=page dh/dl=h/l</p><p><b> en
65、dm</b></p><p> set_p2 macro ;查詢記錄輸入關(guān)鍵字或輸出錯誤信息時的光標位置query</p><p><b> mov ah,2</b></p><p><b> mov dh,12</b></p><p><b>
66、mov dl,0</b></p><p><b> mov bh,0</b></p><p><b> int 10h</b></p><p><b> endm</b></p><p> set_p3 macro ;程序剛開始時輸入
67、控制字符時的光標位置start local</p><p><b> mov ah,2</b></p><p><b> mov dh,1</b></p><p><b> mov dl,30</b></p><p><b> mov bh,0</b&g
68、t;</p><p><b> int 10h</b></p><p><b> endm</b></p><p> clear macro ;清屏函數(shù)clear,clear1,clear2均是用來在不同時期清屏all screen</p><p&g
69、t;<b> mov al,0</b></p><p><b> mov cl,0</b></p><p><b> mov ch,0</b></p><p><b> mov dh,24</b></p><p><b> mov dl
70、,79</b></p><p><b> mov bh,7</b></p><p> mov ah,6 ;screen</p><p><b> int 10h</b></p><p><b> endm</b><
71、;/p><p> clear1 macro ;left screen</p><p><b> mov al,0</b></p><p><b> mov bh,7</b></p><p><b> mov ch,4</b></p&
72、gt;<p><b> mov cl,36</b></p><p><b> mov dh,10</b></p><p><b> mov dl,79</b></p><p><b> mov ah,6</b></p><p><
73、;b> int 10h</b></p><p><b> endm</b></p><p> clear2 macro ;down screen</p><p><b> mov al,0</b></p><p><b>
74、 mov bh,7</b></p><p><b> mov ch,12</b></p><p><b> mov cl,0</b></p><p><b> mov dh,24</b></p><p><b> mov dl,79</b&
75、gt;</p><p><b> mov ah,6</b></p><p><b> int 10h</b></p><p><b> endm</b></p><p> newline macro ;=enter</p&
76、gt;<p><b> push ax</b></p><p><b> push dx</b></p><p> mov dl,0dh</p><p><b> mov ah,2</b></p><p><b> int 21h</b&
77、gt;</p><p> mov dl,0ah</p><p><b> mov ah,2</b></p><p><b> int 21h</b></p><p><b> pop dx</b></p><p><b> pop a
78、x</b></p><p><b> endm</b></p><p> show_item macro addrs ;輸出記錄函數(shù)</p><p> local iloop,w10</p><p><b> push bx</b></p><p>&
79、lt;b> push cx</b></p><p><b> mov bx,0</b></p><p> iloop: mov dl,addrs[bx] ;display char</p><p><b> mov ah,2</b></p><p><
80、;b> int 21h</b></p><p><b> inc bx</b></p><p><b> cmp bx,13</b></p><p><b> jl iloop</b></p><p><b> mov cx,5</
81、b></p><p> w10: mov dl,' '</p><p><b> mov ah,2</b></p><p><b> int 21h</b></p><p> mov dl,' '</p><p><b
82、> mov ah,2</b></p><p><b> int 21h</b></p><p> mov dl,' '</p><p><b> mov ah,2</b></p><p><b> int 21h</b></p&
83、gt;<p> mov dl,addrs[bx]</p><p><b> mov ah,2</b></p><p><b> int 21h</b></p><p><b> inc bx</b></p><p> mov dl,addrs[bx]&l
84、t;/p><p><b> mov ah,2</b></p><p><b> int 21h</b></p><p><b> inc bx</b></p><p><b> loop w10</b></p><p><
85、;b> newline</b></p><p><b> pop cx</b></p><p><b> pop bx</b></p><p><b> endm</b></p><p> getin macro addrs,count2
86、 ;接受字符函數(shù)write char</p><p> local zeroit,lp,input_end,exit</p><p><b> push bx</b></p><p><b> push ax</b></p><p><b> mov bx,0&
87、lt;/b></p><p> zeroit: mov addrs[bx],' '</p><p><b> inc bx</b></p><p><b> cmp bx,13</b></p><p> jl zeroit</p><p>&l
88、t;b> mov bx,0</b></p><p> lp: mov ah,1 ;keyboard input and display al</p><p><b> int 21h</b></p><p> cmp al,0ah</p><p&g
89、t; jz input_end</p><p> cmp al,0dh</p><p> jz input_end</p><p> mov addrs[bx],al</p><p><b> inc bx</b></p><p> cmp bx,count2</p>
90、<p><b> jl lp</b></p><p> input_end: cmp al,0dh</p><p><b> jz exit</b></p><p> cmp al,0ah</p><p><b> jz exit</b></p&
91、gt;<p><b> mov ah,7</b></p><p><b> int 21h</b></p><p> jmp input_end</p><p><b> exit:</b></p><p><b> pop ax</b&
92、gt;</p><p><b> pop bx</b></p><p><b> endm</b></p><p> code segment</p><p> main proc far</p><p> assume cs:code,ds:data,es
93、:data</p><p><b> start:</b></p><p> mov ax,data</p><p><b> mov ds,ax</b></p><p> mov ah,0 ;set display way</p><p>&l
94、t;b> mov al,3</b></p><p><b> int 10h</b></p><p><b> clear</b></p><p> show mess1</p><p> show mess2</p><p> show mes
95、s13</p><p> show mess3</p><p> show mess4</p><p> show mess5</p><p> show mess6</p><p> show mess7</p><p> show mess8</p><p&g
96、t; show mess9</p><p><b> newline</b></p><p> show mess10</p><p><b> set_p3</b></p><p> w: mov ah,7</p><p><b> int 21
97、h</b></p><p> cmp al,'i'</p><p><b> jnz n1</b></p><p> call insert</p><p><b> jmp w</b></p><p> n1: cmp al,
98、39;m'</p><p><b> jnz n2</b></p><p> call modify</p><p><b> jmp w</b></p><p> n2: cmp al,'d'</p><p><b> j
99、nz n3</b></p><p> call delete</p><p><b> jmp w</b></p><p> n3: cmp al,'q'</p><p><b> jnz n4</b></p><p> cal
100、l query</p><p><b> jmp w</b></p><p> n4: cmp al,'l'</p><p><b> jnz n5</b></p><p><b> call list</b></p><p
101、><b> jmp w</b></p><p> n5: cmp al,'Q'</p><p><b> jnz n6</b></p><p> call query1</p><p><b> jmp w</b></p>
102、<p> n6: cmp al,'e'</p><p><b> jz exitf</b></p><p><b> jmp w</b></p><p><b> exitf:</b></p><p> mov ah,4ch<
103、;/p><p><b> int 21h</b></p><p><b> ret</b></p><p> main endp</p><p> insert proc near</p><p><b> push ax</b></p&
104、gt;<p><b> push bx</b></p><p><b> push cx</b></p><p><b> push dx</b></p><p> mov dx,offset fname</p><p><b> mov al
105、,2</b></p><p> mov ah,3dh</p><p><b> int 21h</b></p><p><b> mov bx,ax</b></p><p><b> clear1</b></p><p><b&
106、gt; set_p1 4</b></p><p> call get_rec</p><p> mov cx,0 ;move file pointer to end</p><p><b> mov dx,0</b></p><p><b> mov al,2&
107、lt;/b></p><p> mov ah,42h</p><p><b> int 21h</b></p><p> mov cx,23 ;write file</p><p> mov dx,offset buffer1</p><p>
108、 mov ah,40h</p><p><b> int 21h</b></p><p> mov ah,3eh</p><p><b> int 21h</b></p><p><b> set_p3</b></p><p><b>
109、 pop dx</b></p><p><b> pop cx</b></p><p><b> pop bx</b></p><p><b> pop ax</b></p><p><b> ret</b></p>&
110、lt;p> insert endp</p><p> get_rec proc near;寫入的子函數(shù)</p><p><b> push ax</b></p><p><b> push bx</b></p><p> getin buffer2,13</p>&l
111、t;p><b> mov bx,0</b></p><p> mov cx,13</p><p> continue: mov al,buffer2[bx]</p><p> mov buffer1[bx],al</p><p><b> inc bx</b></p>
112、;<p> loop continue</p><p><b> set_p1 5</b></p><p> getin buffer2,2</p><p> mov al,buffer2</p><p> mov buffer1[bx],al</p><p><b
113、> inc bx</b></p><p> mov al,buffer2+1</p><p> mov buffer1[bx],al</p><p><b> inc bx</b></p><p><b> set_p1 6</b></p><p>
114、; getin buffer2,2</p><p> mov al,buffer2</p><p> mov buffer1[bx],al</p><p><b> inc bx</b></p><p> mov al,buffer2+1</p><p> mov buffer1[bx
115、],al</p><p><b> inc bx</b></p><p><b> set_p1 7</b></p><p> getin buffer2,2</p><p> mov al,buffer2</p><p> mov buffer1[bx],al&l
116、t;/p><p><b> inc bx</b></p><p> mov al,buffer2+1</p><p> mov buffer1[bx],al</p><p><b> inc bx</b></p><p><b> set_p1 8</b
117、></p><p> getin buffer2,2</p><p> mov al,buffer2</p><p> mov buffer1[bx],al</p><p><b> inc bx</b></p><p> mov al,buffer2+1</p>&
118、lt;p> mov buffer1[bx],al</p><p><b> inc bx</b></p><p><b> set_p1 9</b></p><p> getin buffer2,2</p><p> mov al,buffer2</p><p&g
119、t; mov buffer1[bx],al</p><p><b> inc bx</b></p><p> mov al,buffer2+1</p><p> mov buffer1[bx],al</p><p><b> inc bx</b></p><p>&
120、lt;b> pop bx</b></p><p><b> pop ax</b></p><p><b> ret</b></p><p> get_rec endp</p><p> query proc near ;query by name<
121、/p><p><b> push ax</b></p><p><b> push bx</b></p><p><b> push cx</b></p><p><b> push dx</b></p><p><b&g
122、t; clear1</b></p><p><b> clear2</b></p><p> mov dx,offset fname</p><p><b> mov al,2</b></p><p> mov ah,3dh ;open file</p>
123、<p><b> int 21h</b></p><p><b> mov bx,ax</b></p><p><b> set_p2</b></p><p> getin buffer1,13</p><p> lea dx, mess12</p&
124、gt;<p> mov ah,9 ;display char dx</p><p><b> int 21h</b></p><p><b> b:</b></p><p> mov ah,3fh</p><p><b> mov cx,23<
125、/b></p><p> mov dx,offset buffer2</p><p> int 21h ;read file</p><p> lea si,buffer2</p><p> lea di,buffer1</p><p> mov cx,13
126、 ;cx count</p><p><b> c:</b></p><p> mov al,byte ptr[si]</p><p> cmp al,byte ptr[di]</p><p> jnz b ;not equal</p><p><
127、;b> inc si</b></p><p><b> inc di</b></p><p><b> loop c</b></p><p> mov [buffer2+23],'$'</p><p> show_item buffer2</p>
128、;<p> mov ah,3eh ;close file</p><p><b> int 21h</b></p><p><b> pop dx</b></p><p><b> pop cx</b></p><p>&l
129、t;b> pop bx</b></p><p><b> pop ax</b></p><p><b> ret</b></p><p> query endp</p><p> query1 proc near ;query by number<
130、;/p><p><b> push ax</b></p><p><b> push bx</b></p><p><b> push cx</b></p><p><b> push dx</b></p><p><b&
131、gt; clear1</b></p><p><b> clear2</b></p><p> mov dx,offset fname</p><p><b> mov al,2</b></p><p> mov ah,3dh ;open file</p>
132、<p><b> int 21h</b></p><p><b> mov bx,ax</b></p><p><b> set_p2</b></p><p> getin buffer1,2</p><p> lea dx, mess14</p&
133、gt;<p> mov ah,9 ;display char dx</p><p><b> int 21h</b></p><p><b> d:</b></p><p> mov ah,3fh</p><p><b> mov cx,23<
134、/b></p><p> mov dx,offset buffer2</p><p> int 21h ;read file</p><p> lea si,buffer2+13</p><p> lea di,buffer1</p><p><b> mov cx,2
135、</b></p><p><b> e:</b></p><p> mov al,byte ptr[si]</p><p> cmp al,byte ptr[di]</p><p><b> jnz d</b></p><p><b> inc
136、 si</b></p><p><b> inc di</b></p><p><b> loop e</b></p><p> mov [buffer2+23],'$'</p><p> show_item buffer2</p><p>
137、; mov ah,3eh</p><p><b> int 21h</b></p><p><b> pop dx</b></p><p><b> pop cx</b></p><p><b> pop bx</b></p>&l
138、t;p><b> pop ax</b></p><p><b> ret</b></p><p> query1 endp</p><p> modify proc near</p><p><b> push ax</b></p><p&
139、gt;<b> push bx</b></p><p><b> push cx</b></p><p><b> push dx</b></p><p><b> clear1</b></p><p><b> set_p1 4<
140、;/b></p><p> mov dx,offset fname</p><p><b> mov al,2</b></p><p> mov ah,3dh ;open file al=2/r/w</p><p><b> int 21h</b></p&
141、gt;<p><b> mov bx,ax</b></p><p> mov handle,ax</p><p> call get_rec ; contact is in buffer1</p><p><b> read:</b></p><p> m
142、ov dx,offset buffer2</p><p><b> mov cx,23</b></p><p> mov ah,3fh ;read file</p><p><b> int 21h</b></p><p> lea si,buffer2</p>
143、<p> lea di,buffer1</p><p><b> mov cx,13</b></p><p><b> c5:</b></p><p> mov dl,byte ptr[si]</p><p> cmp dl,byte ptr[di]</p>&l
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)生成績管理課程設(shè)計
- 學(xué)生成績管理課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)學(xué)生成績管理課程設(shè)計報告
- 學(xué)生成績管理---課程設(shè)計
- 學(xué)生成績管理系統(tǒng)課程設(shè)計
- 課程設(shè)計——學(xué)生成績管理系統(tǒng)
- 課程設(shè)計---學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計
- 學(xué)生成績管理匯編課程設(shè)計
- 學(xué)生成績管理系統(tǒng)課程設(shè)計
- 學(xué)生成績管理系統(tǒng)課程設(shè)計
- 學(xué)生成績管理系統(tǒng)課程設(shè)計
- 匯編課程設(shè)計---學(xué)生成績管理
- 學(xué)生成績管理系統(tǒng) 課程設(shè)計
- 課程設(shè)計--學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計
- 課程設(shè)計-- 學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計
- 成績管理課程設(shè)計報告
- mis成績管理課程設(shè)計
評論
0/150
提交評論