2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論