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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《匯編語(yǔ)言程序設(shè)計(jì)》課程設(shè)計(jì)</p><p><b>  題目:學(xué)生成績(jī)管理</b></p><p><b>  一.設(shè)計(jì)目的</b></p><p>  匯編語(yǔ)言課程設(shè)計(jì)是對(duì)所學(xué)課程內(nèi)容全面、系統(tǒng)的總結(jié)、鞏固和提高的一項(xiàng)課程實(shí)踐活動(dòng)。根據(jù)匯編語(yǔ)言的特點(diǎn),選擇相應(yīng)的題目,在老師的指導(dǎo)下,由學(xué)生獨(dú)立完成

2、。課程設(shè)計(jì)要求同學(xué)們熟悉匯編語(yǔ)言的編程,BIOS中斷調(diào)用、系統(tǒng)功能調(diào)用、磁盤(pán)數(shù)據(jù)的查詢(xún)、存取等相關(guān)知識(shí)。通過(guò)課程設(shè)計(jì),一方面提高運(yùn)用匯編語(yǔ)言編程解決實(shí)際問(wèn)題的能力,另一方面使同學(xué)們更深入的了解計(jì)算機(jī)系統(tǒng)內(nèi)部的有關(guān)知識(shí),為以后的學(xué)習(xí)和系統(tǒng)開(kāi)發(fā)奠定良好的基礎(chǔ)。</p><p><b>  二.設(shè)計(jì)內(nèi)容</b></p><p><b>  學(xué)生成績(jī)管理</b

3、></p><p><b>  功能描述:</b></p><p>  創(chuàng)建成績(jī)管理檔案文件(若已存在則直接使用該文件),它包含學(xué)號(hào)10位,英語(yǔ)3位、高數(shù)3位、體育3位,語(yǔ)文3位、物理3位、及它們的平均成績(jī)3位等七項(xiàng)內(nèi)容。試編寫(xiě)一管理程序,要求系統(tǒng)顯示如下菜單,按鍵后執(zhí)行相應(yīng)的操作。</p><p> ?。?)L命令:列出文件中的所有人的

4、記錄,每人一行</p><p> ?。?)I命令:在文件末尾插入一個(gè)人的記錄,但不允許學(xué)號(hào)重復(fù)</p><p> ?。?)D命令:根據(jù)學(xué)號(hào)刪除指定的紀(jì)錄。</p><p> ?。?)O命令:根據(jù)某課程進(jìn)行排序,并將查詢(xún)結(jié)果(學(xué)號(hào)、成績(jī))顯示在屏幕上</p><p> ?。?)Q命令:退出管理系統(tǒng)</p><p><

5、;b>  三.程序設(shè)計(jì)原理</b></p><p>  本次課程設(shè)計(jì)主要是在對(duì)文件進(jìn)行操作的基礎(chǔ)上,開(kāi)辟存儲(chǔ)空間保存文件的數(shù)據(jù),在程序執(zhí)行過(guò)程中,通過(guò)對(duì)緩存區(qū)進(jìn)行添加、查詢(xún)、刪除、排序,并在最后將緩存區(qū)的數(shù)據(jù)保存到文件,從而實(shí)現(xiàn)對(duì)文件的間接管理。具體步驟如下:</p><p>  根據(jù)數(shù)據(jù)段存儲(chǔ)的文件的ASCIZ串打開(kāi)文件,未成功的話則新建文件;</p>&

6、lt;p>  顯示界面,根據(jù)用戶(hù)鍵入確定偏移值,進(jìn)而找到數(shù)據(jù)段內(nèi)存放的跳轉(zhuǎn)指令;</p><p>  2.1編寫(xiě)LIST子程序:調(diào)用子程序RD_WJ讀取文件數(shù)據(jù),調(diào)用子程序DISP顯示緩存區(qū)數(shù)據(jù);</p><p>  2.2編寫(xiě)RD_WJ:通過(guò)移動(dòng)文件指針,每次讀取一組,再移動(dòng)指針,重復(fù)至讀取完,保存記錄個(gè)數(shù);</p><p>  2.3編寫(xiě)DISP:通過(guò)指針

7、的移動(dòng),先顯示學(xué)號(hào),再計(jì)算成績(jī)的ASC值而后顯示,通過(guò)記錄個(gè)數(shù)控制循環(huán)顯示的行數(shù);</p><p>  2.4編寫(xiě)INPUT:移動(dòng)緩存區(qū)指針至空的一行,通過(guò)循環(huán)讀取一組字符形成字符串,遇到空格時(shí)形成學(xué)號(hào),此時(shí)通過(guò)與另一個(gè)指向緩存區(qū)開(kāi)頭的指針進(jìn)行比較,若學(xué)號(hào)重復(fù)則返回,不重復(fù)則同樣通過(guò)循環(huán)讀取一組字符,然后減去30H,保存為成績(jī),使用空格來(lái)分隔輸入,遇到回車(chē)時(shí)結(jié)束輸入;</p><p>  

8、2.5編寫(xiě)DEL:通過(guò)記錄的個(gè)數(shù)控制循環(huán),匹配欲刪除的學(xué)號(hào)串時(shí),保存指針,并設(shè)另一個(gè)指針指向欲刪除的記錄的后一個(gè),通過(guò)從后面往前傳送記錄,達(dá)到刪除目標(biāo)記錄的效果,最后記錄數(shù)減一;</p><p>  2.6編寫(xiě)ORD:讀取用戶(hù)鍵入的選項(xiàng)1~6,將其作為偏移量,即用2個(gè)指針指向相鄰的2條記錄,用指針加偏移量來(lái)獲取成績(jī)并比較,交換時(shí)通過(guò)將一行的長(zhǎng)度作為循環(huán)的次數(shù),循環(huán)XCHG,并在外部設(shè)置2個(gè)循環(huán)實(shí)現(xiàn)冒泡排序;<

9、;/p><p>  2.7編寫(xiě)WT_F:每次寫(xiě)入一行,將記錄個(gè)數(shù)作為循環(huán)次數(shù)。</p><p><b>  四.程序流程圖</b></p><p><b>  五.源程序</b></p><p>  .MODEL SMALL</p><p><b>  .

10、DATA</b></p><p>  N EQU 6 ;人數(shù)</p><p>  NUM EQU 6 ;學(xué)號(hào)長(zhǎng)度</p><p>  LEN EQU NUM+6 ;一行的長(zhǎng)度</p><p>  DATBUF DB N D

11、UP(LEN DUP(?)) ;存儲(chǔ)數(shù)據(jù)的緩存區(qū)</p><p>  CNT EQU $-DATBUF</p><p>  FNAME DB 'c:\stu.txt' ;文件的ASCIZ串</p><p>  RECNUM DB 15 DUP(?) ;要?jiǎng)h除的學(xué)號(hào)&l

12、t;/p><p>  RECS DW ? ;有效記錄數(shù)</p><p>  FCODE DW ? ;文件代號(hào)</p><p>  CRLF DB 0AH,0DH,'$'</p><p>  STR0 DB 0AH,0DH,

13、9;L:LIST I:INSERT D:DELETE O:ORDER Q:QUIT',10,13</p><p>  DB '-------------------------------------------',10,13,'$'</p><p>  STR2 DB 0AH,0DH,'--Input

14、the Num and Score:',10,13,'$'</p><p>  STR3 DB ' --The file is empty!--',10,13,'$'</p><p>  STR4 DB 0AH,0DH,'--Enter the Num:',10,13,'$&

15、#39;</p><p>  STR5 DB '------NOT FOUND!------',10,13,'$'</p><p>  STR6 DB 'Enter Num and Score:',10,13,'$'</p><p>  STR7 DB &

16、#39;NUM EN MA SP CH PH AE',10,13 ;輸出界面</p><p>  DB '----------------------',10,13,'$'</p><p>  STR8 DB 'NUM EN MA SP CH PH',10,13 ;輸入界面&

17、lt;/p><p>  DB '----------------------',10,13,'$'</p><p>  STR9 DB '1:EN 2:MA 3:SP 4:CH 5:PH 6:AE',10,13</p><p>  DB 'Enter a num

18、ber between 1 and 6:',10,13,'$'</p><p>  STR10 DB '====Finish!====',10,13,'$'</p><p>  STR11 DB 0AH,0DH,'Overflow!Try again:',10,13,'$'

19、;</p><p>  STR12 DB 0AH,0DH,'Num overload!',10,13,'$'</p><p>  ERRO DB 'ERROR!',10,13,'$'</p><p>  ILL DB 'Input illegall

20、y!!',10,13,'$'</p><p>  ORDER_TAB DW 'L',LIST,'I',INST,'D',DEL,'O',ORD,'Q',QUT ;保存調(diào)用所用的字符以及命令</p><p>  REG1 DW ?</p&g

21、t;<p>  REG2 DW ?</p><p>  ;---------------------------------------------------------------------</p><p>  OUTPUT MACRO STR ;顯示字符串STR</p><p>  LEA

22、DX,STR</p><p>  MOV AH,09H</p><p>  INT 21H</p><p><b>  ENDM</b></p><p>  ;---------------------------------------------------------------------

23、</p><p><b>  .CODE</b></p><p>  ASSUME CS:@CODE,DS:@DATA,ES:@DATA</p><p>  START: MOV AX,@DATA</p><p>  MOV DS,AX</p><p>  MOV

24、 ES,AX</p><p>  MOV AH,3DH ;如果文件存在則直接打開(kāi),</p><p>  MOV AL,2 ;文件可讀寫(xiě)</p><p>  LEA DX,FNAME</p><p>  INT 21H</p><p>  

25、JNC L0 ;打開(kāi)成功</p><p>  LEA DX,FNAME ;如果文件不存在就新建</p><p>  MOV AH,3CH</p><p>  MOV CX,0 ;普通文件</p><p>  INT 21H</p>

26、<p>  JC ERROR</p><p>  MOV FCODE,AX ;保存文件代號(hào)</p><p>  OUTPUT STR3 ;提示文件為空</p><p>  OUTPUT STR6 ;提示輸入</p><p>  CALL INPUT

27、 ;空文件</p><p>  JMP L2</p><p>  L0: MOV FCODE,AX ;保存文件代號(hào)</p><p>  L2: OUTPUT STR0 ;顯示命令菜單</p><p>  LEA SI,ORDER_TAB-4 ;先減4便

28、于之后統(tǒng)一加4</p><p>  MOV AH,1 ;讀取命令</p><p>  INT 21H</p><p>  MOV BL,AL</p><p>  CMP BL,61H ;判斷大小寫(xiě)</p><p>  JB L5

29、 ;大寫(xiě)則轉(zhuǎn)到L5</p><p>  SUB BL,20H ;小寫(xiě)轉(zhuǎn)大寫(xiě)</p><p>  L5: OUTPUT CRLF</p><p>  XOR CX,CX</p><p>  L3: INC CX ;判斷是否為合法命令</p>&l

30、t;p>  CMP CX,5</p><p>  JA L4 ;超出5條指令</p><p>  ADD SI,4 ;SI加一次4就指向每條指令調(diào)用所需匹配的字符</p><p>  CMP BYTE PTR [SI],BL</p><p>  JNZ

31、 L3</p><p>  CALL [SI+2] ;調(diào)用命令</p><p>  JMP L2</p><p>  L4: OUTPUT ILL ;非法命令,重新輸入指令</p><p>  JMP L2</p><p>  ERROR:

32、OUTPUT ERRO</p><p>  CLOSE: CALL QUT ;關(guān)閉文件并退出</p><p>  ;--------------------------------------------------------------------------</p><p>  LIST PROC NEAR

33、 ;讀取并顯示</p><p>  CALL RD_WJ ;讀文件</p><p>  CMP RECS,0 ;空文件時(shí)</p><p>  JZ E8</p><p>  CALL DISP ;顯示讀取的內(nèi)容</p><p>&l

34、t;b>  E8: RET</b></p><p>  LIST ENDP</p><p>  ;--------------------------------------------------------------------------</p><p>  RD_WJ PROC NEAR ;讀取文件到DATB

35、UF</p><p>  MOV AH,42H ;移動(dòng)指針到文件開(kāi)頭</p><p>  MOV AL,0</p><p>  XOR DX,DX</p><p>  XOR CX,CX</p><p>  MOV BX,FCODE</p>

36、;<p>  INT 21H</p><p>  JC E7</p><p>  MOV RECS,0 ;記錄數(shù)清零</p><p>  LEA DX,DATBUF</p><p>  R1: MOV AH,3FH ;讀文件</p>

37、<p>  MOV BX,FCODE ;取文件代號(hào)</p><p>  MOV CX,LEN ;每次讀取的字節(jié)數(shù)</p><p>  INT 21H</p><p>  JNC R2 ;下一組</p><p>  OUTPUT ERRO<

38、/p><p>  JMP EXIT</p><p>  R2: INC RECS ;記錄數(shù)</p><p>  ADD DX,LEN ;下一個(gè)地址</p><p>  MOV REG2,DX ;保存地址</p><p>  CMP

39、 AX,0</p><p>  JNZ R1</p><p>  DEC RECS</p><p>  CMP RECS,0 ;文件為空</p><p>  JNZ EXIT</p><p>  OUTPUT STR3</p><p&g

40、t;  JMP EXIT</p><p>  E7: OUTPUT ERRO</p><p>  EXIT: RET</p><p>  RD_WJ ENDP</p><p>  ;---------------------------------------------------------------------

41、-----</p><p>  DEL PROC NEAR</p><p>  OUTPUT STR4</p><p>  LEA BX,RECNUM ;輸入欲刪除的學(xué)號(hào)</p><p>  D_1: MOV AH,1 ;循環(huán)輸入單個(gè)字符</p><p> 

42、 INT 21H</p><p>  CMP AL,0DH ;判斷是否回車(chē),是回車(chē)結(jié)束輸入</p><p>  JZ D_2</p><p>  MOV BYTE PTR [BX],AL</p><p>  INC BX</p><p>  JMP

43、 D_1</p><p>  D_2: OUTPUT CRLF</p><p>  CALL RD_WJ ;讀文件</p><p>  LEA DI,DATBUF-LEN ;為方便循環(huán)先-LEN</p><p>  MOV CX,RECS ;把記錄的

44、個(gè)數(shù)當(dāng)查找次數(shù)</p><p>  D_3: MOV BP,CX</p><p>  ADD DI,LEN</p><p>  MOV BX,DI ;保存DI</p><p>  LEA SI,RECNUM ;待刪除學(xué)號(hào)地址</p><p>  MOV

45、 CX,NUM ;學(xué)號(hào)長(zhǎng)度</p><p><b>  CLD</b></p><p>  REPZ CMPSB</p><p>  JZ FND ;找到</p><p>  MOV DI,BX ;此條記錄不匹配,恢復(fù)DI</p>

46、<p>  MOV CX,BP</p><p>  LOOP D_3</p><p>  OUTPUT STR5 ;未找到</p><p>  JMP E2</p><p>  FND: MOV DI,BX</p><p>  MOV

47、 SI,DI ;DI指向要?jiǎng)h除的記錄</p><p>  ADD SI,LEN ;SI指向要往前移的記錄</p><p>  DEC RECS ;有效記錄減1</p><p>  MOV CX,BP ;CX保存要移動(dòng)的記錄的條數(shù)</p><p>  DEC

48、 CX</p><p>  CMP CX,0</p><p>  JZ E2</p><p>  D_4: MOV BP,CX</p><p>  MOV CX,LEN</p><p><b>  CLD</b></p>

49、<p>  REP MOVSB ;前移</p><p>  MOV CX,BP</p><p>  LOOP D_4</p><p>  E2: LEA DX,FNAME ;新建同名文件</p><p>  MOV AH,3CH</p>&

50、lt;p>  XOR CX,CX ;普通文件</p><p>  INT 21H</p><p>  MOV FCODE,AX</p><p>  CALL WT_F</p><p>  OUTPUT STR10</p><p><b> 

51、 RET</b></p><p><b>  DEL ENDP</b></p><p>  ;--------------------------------------------------------------------------</p><p>  DISP PROC NEAR ;顯示內(nèi)容&

52、lt;/p><p>  LEA DI,DATBUF</p><p>  LEA SI,DATBUF+NUM</p><p>  OUTPUT STR7 ;成績(jī)顯示格式</p><p>  MOV CX,RECS</p><p>  D1: MOV BX,

53、CX ;保存記錄數(shù)</p><p>  MOV CX,NUM ;學(xué)號(hào)長(zhǎng)度</p><p>  D2: MOV DL,[DI]</p><p>  MOV AH,2</p><p>  INT 21H</p><p>  INC DI&l

54、t;/p><p>  LOOP D2</p><p>  MOV CX,6 ;6個(gè)成績(jī)</p><p>  D3: MOV BP,CX</p><p>  MOV AL,[SI]</p><p>  XOR CX,CX</p><

55、p>  MOV DL,10</p><p>  D4: XOR AH,AH</p><p>  INC CX</p><p>  DIV DL</p><p>  MOV DH,AL ;保存商</p><p>  MOV AL,

56、AH</p><p>  XOR AH,AH</p><p>  PUSH AX</p><p>  MOV AL,DH</p><p>  OR AL,AL</p><p>  JNZ D4</p><p>  D5: POP

57、 AX</p><p>  ADD AX,30H ;輸出字符ASCⅡ碼</p><p>  MOV DL,AL</p><p>  MOV AH,2</p><p>  INT 21H</p><p>  LOOP D5</p>&

58、lt;p>  MOV DL,20H ;成績(jī)之間的格</p><p>  MOV AH,2</p><p>  INT 21H</p><p>  INC SI</p><p>  MOV CX,BP</p><p>  LOOP D3

59、 ;顯示一行的成績(jī)</p><p>  OUTPUT CRLF</p><p>  MOV DI,SI</p><p>  ADD SI,NUM</p><p>  MOV CX,BX ;下一行</p><p>  LOOP D1<

60、/p><p>  OUTPUT CRLF</p><p><b>  RET</b></p><p>  DISP ENDP</p><p>  ;--------------------------------------------------------------------------</p>

61、<p>  INST PROC NEAR ;插入記錄</p><p>  CALL RD_WJ</p><p>  SUB REG2,LEN ;REG2保存指向最后的位置</p><p>  MOV SI,REG2</p><p>  MOV DI,SI

62、 ;設(shè)置子程序入口參數(shù)</p><p>  ADD SI,NUM</p><p>  OUTPUT STR2 ;提示輸入</p><p>  MOV AH,42H ;移動(dòng)記錄指針到文件開(kāi)頭</p><p>  MOV AL,0</p><p>

63、;  MOV BX,FCODE</p><p>  XOR CX,CX</p><p>  XOR DX,DX</p><p>  INT 21H</p><p>  JC E9</p><p>  CALL I1</p><p

64、>  JMP EA</p><p>  E9: OUTPUT ERRO</p><p><b>  EA: RET</b></p><p>  INST ENDP</p><p>  ;-----------------------------------------------------

65、---------------------</p><p>  INPUT PROC NEAR ;輸入學(xué)號(hào)成績(jī)</p><p>  LEA DI,DATBUF</p><p>  LEA SI,DATBUF+NUM ;第一個(gè)成績(jī)存的地方</p><p>  OUTPUT

66、 STR8 ;格式提示</p><p>  MOV RECS,0</p><p>  I1: MOV REG1,DI</p><p>  XOR BX,BX</p><p>  XOR CX,CX</p><p>  NUML: MOV A

67、H,1 ;學(xué)號(hào),NUMLOOP</p><p>  INT 21H</p><p>  CMP AL,20H ;空格退出學(xué)號(hào)輸入</p><p>  JZ SP1</p><p>  CMP AL,0DH ;回車(chē)則結(jié)束輸入</p><p&g

68、t;  JZ IB</p><p>  IA: MOV BYTE PTR [DI],AL ;保存輸入</p><p>  INC DI</p><p>  JMP NUML</p><p>  IB: JMP E1</p><p>  SP

69、1: CMP RECS,0 ;無(wú)記錄</p><p>  JZ I8</p><p>  PUSH DI</p><p>  PUSH SI</p><p>  MOV SI,REG1 ;首地址</p><p>  LEA DI,

70、DATBUF-LEN ;-LEN避免循環(huán)時(shí)超出范圍</p><p>  MOV CX,RECS ;查找次數(shù)</p><p>  I6: MOV BP,CX</p><p>  ADD DI,LEN</p><p>  MOV BX,DI ;保存DI<

71、;/p><p>  MOV SI,REG1</p><p>  MOV CX,NUM ;學(xué)號(hào)長(zhǎng)度</p><p><b>  CLD</b></p><p>  REPZ CMPSB</p><p>  JZ EXST ;相同</p

72、><p>  MOV DI,BX ;恢復(fù)DI</p><p>  MOV CX,BP</p><p>  LOOP I6</p><p>  JMP I7 ;無(wú)同名記錄</p><p>  EXST: OUTPUT STR12

73、;已經(jīng)存在</p><p>  POP SI</p><p>  POP DI</p><p>  JMP I9</p><p>  I7: POP SI</p><p>  POP DI</p><p>  I8: XOR

74、 BX,BX</p><p>  MOV AH,1</p><p>  INT 21H</p><p>  CMP AL,20H</p><p>  JNZ I4 ;第一個(gè)非空格的有效數(shù)字</p><p>  JZ SP1

75、 ;允許輸入多個(gè)空格</p><p>  I2: MOV AH,1</p><p>  INT 21H</p><p>  CMP AL,0DH ;回車(chē)則輸入下一組</p><p>  JZ NEXT</p><p>  CMP AL,20H&

76、lt;/p><p>  JZ I3 ;空格則結(jié)束</p><p>  I4: SUB AL,30H ;計(jì)算分?jǐn)?shù),并保存</p><p>  MOV DL,AL</p><p>  MOV AL,BL</p><p>  MOV BH

77、,10</p><p>  MUL BH</p><p>  ADD AL,DL</p><p>  CMP AX,100 ;分?jǐn)?shù)是否大于100</p><p>  JA I5</p><p>  MOV BL,AL</p><

78、p>  MOV BYTE PTR [SI],BL ;存當(dāng)前成績(jī)</p><p>  JMP I2</p><p>  I5: OUTPUT STR11</p><p>  I9: MOV DI,REG1 ;恢復(fù)之前的SI,DI</p><p>  MOV S

79、I,DI</p><p>  ADD SI,NUM</p><p>  JMP I1 ;輸入非法,重新輸入</p><p>  I3: XOR BH,BH</p><p>  ADD CX,BX ;各科成績(jī)累加</p><p>  XOR

80、 BL,BL</p><p>  INC SI</p><p>  SP2: MOV AH,1 ;各個(gè)成績(jī)之間允許輸入多個(gè)空格</p><p>  INT 21H</p><p>  CMP AL,20H</p><p>  JNZ

81、I4</p><p>  JZ SP2</p><p>  NEXT: XOR BH,BH</p><p>  ADD CX,BX ;各科成績(jī)累加</p><p>  XOR BL,BL</p><p>  INC SI ;中

82、間無(wú)空格</p><p>  MOV BX,5</p><p>  XOR DX,DX</p><p>  MOV AX,CX</p><p>  DIV BX ;計(jì)算平均值</p><p>  MOV BYTE PTR [SI],AL

83、 ; 存平均成績(jī)</p><p>  INC SI</p><p>  MOV DI,SI</p><p>  ADD SI,NUM</p><p>  OUTPUT CRLF</p><p>  INC RECS ;實(shí)際輸入的組數(shù)</p

84、><p>  CMP RECS,N</p><p>  JZ E1</p><p>  JMP I1</p><p>  E1: CALL WT_F ;寫(xiě)文件</p><p><b>  RET</b></p><p&

85、gt;  INPUT ENDP</p><p>  ;--------------------------------------------------------------------------</p><p>  ORD PROC NEAR ;根據(jù)某課程成績(jī)降序排序</p><p>  CALL RD_WJ

86、 ;讀取文件</p><p>  OUTPUT STR9</p><p>  MOV AH,1</p><p>  INT 21H</p><p>  CMP AL,36H ;輸入必須為1~6</p><p>  JA E4</p><

87、;p>  CMP AL,31H</p><p>  JB E4</p><p>  SUB AL,30H</p><p>  DEC AL</p><p>  XOR AH,AH</p><p>  MOV BX,AX ;保存&

88、lt;/p><p>  OUTPUT CRLF ;輸入后換行</p><p>  MOV DX,BX ;恢復(fù)</p><p>  MOV CX,RECS</p><p>  O1: MOV BX,CX</p><p>  LEA SI,DAT

89、BUF+NUM-LEN ;開(kāi)始時(shí)總是指向第一個(gè)成績(jī)</p><p>  ADD SI,DX ;根據(jù)DX決定按哪個(gè)成績(jī)排序</p><p>  MOV CX,RECS ;設(shè)置_L2的CX</p><p>  DEC CX</p><p>  O2: MOV BP,

90、CX</p><p>  MOV CX,LEN ;設(shè)置SWAP的CX</p><p>  ADD SI,LEN</p><p>  MOV AL,[SI]</p><p>  CMP AL,[SI+LEN] ;比較對(duì)應(yīng)成績(jī)</p><p>  JAE

91、 O3</p><p>  MOV DI,SI</p><p>  SUB DI,NUM ;DI指向?qū)W號(hào)</p><p>  SUB DI,DX ;調(diào)整</p><p>  SWAP: MOV AH,[DI] ;交換兩組數(shù)據(jù)</p><p>

92、;  XCHG AH,[DI+LEN]</p><p>  MOV [DI],AH</p><p>  INC DI</p><p>  LOOP SWAP</p><p>  O3: MOV CX,BP ;下一組</p><p>  LOOP

93、 O2</p><p>  MOV CX,BX ;2層循環(huán)</p><p>  LOOP O1</p><p>  CALL DISP ;調(diào)用顯示</p><p>  JMP E5</p><p>  E4: OUTPUT CRLF<

94、;/p><p>  OUTPUT ILL ;輸入不正確</p><p><b>  E5: RET</b></p><p><b>  ORD ENDP</b></p><p>  ;-----------------------------------------------

95、---------------------------</p><p>  WT_F PROC NEAR ;寫(xiě)文件</p><p>  MOV CX,RECS ;入口參數(shù)</p><p>  CMP CX,0</p><p>  JZ W3 ;記錄為空則

96、不寫(xiě)</p><p>  LEA DX,DATBUF ;數(shù)據(jù)緩存的偏移地址</p><p>  MOV BX,FCODE</p><p>  W1: MOV BP,CX</p><p>  MOV AH,40H ;寫(xiě)文件</p><p>  MOV

97、 CX,LEN ;寫(xiě)入的字節(jié)數(shù)</p><p>  INT 21H</p><p>  JC W2</p><p>  ADD DX,LEN ;偏移地址</p><p>  MOV CX,BP</p><p>  LOOP W1<

98、/p><p>  JMP W3</p><p>  W2: OUTPUT ERRO</p><p><b>  W3: RET</b></p><p>  WT_F ENDP</p><p>  ;----------------------------------------

99、----------------------------------</p><p>  QUT PROC NEAR ;退出</p><p>  MOV AH,3EH ;關(guān)閉文件</p><p>  MOV BX,FCODE</p><p>  INT 21H</p

100、><p>  JNC Q1</p><p>  OUTPUT ERRO</p><p>  Q1: MOV AH,4CH </p><p>  INT 21H</p><p><b>  RET</b></p><p><

101、;b>  QUT ENDP</b></p><p>  ;--------------------------------------------------------------------------</p><p>  END START</p><p><b>  調(diào)試過(guò)程</b></p>

102、<p><b>  鍵入L:</b></p><p>  鍵入I后,輸入已有學(xué)號(hào)112即顯示已有輸入學(xué)號(hào)117,正常添加:</p><p>  添加之后用L顯示成功:</p><p><b>  鍵入d刪除113:</b></p><p>  鍵入o選擇第三項(xiàng)體育排序:</p>

103、;<p><b>  鍵入q正常退出:</b></p><p>  遇到的問(wèn)題及解決方法</p><p>  編寫(xiě)程序的前期,由于有很多子功能和多次調(diào)用的函數(shù),分別使用了宏庫(kù)和多個(gè)外部子程序。結(jié)果由于宏是通過(guò)擴(kuò)展來(lái)實(shí)現(xiàn)調(diào)用,使得程序部分跳轉(zhuǎn)指令顯示超出范圍,無(wú)法匯編;另一方面,外部子程序由于不便于調(diào)試,數(shù)據(jù)段過(guò)長(zhǎng)等原因,使用起來(lái)也不理想。最后還是講程序?qū)?/p>

104、在一個(gè)文件中,通過(guò)規(guī)劃安排各個(gè)段的先后,解決了問(wèn)題。</p><p>  有些參數(shù)如RECS(記錄的個(gè)數(shù))十分重要,能簡(jiǎn)便程序的編寫(xiě),應(yīng)該提前計(jì)算出來(lái)。</p><p>  根據(jù)題目的要求,本來(lái)是直接在文件中進(jìn)行操作,結(jié)果由于文件指針并未能如預(yù)想般返回欲得到的地址,導(dǎo)致部分功能如刪除、排序出現(xiàn)錯(cuò)誤,久久未能實(shí)現(xiàn)。解決方法是:將文件的內(nèi)容先拷貝到緩存區(qū),通過(guò)對(duì)緩存區(qū)的記錄進(jìn)行操作,即移動(dòng)指向

105、字符串的指針可靠性大于指向文件內(nèi)容的指針,最后再匯總保存在文件,將具體操作隔離到緩存區(qū),既簡(jiǎn)化了步驟,又避免了文件的數(shù)據(jù)被錯(cuò)誤的中斷操作影響。</p><p>  之前存儲(chǔ)記錄一概使用ASC碼,這樣導(dǎo)致了平均分?jǐn)?shù)無(wú)法計(jì)算,而且分?jǐn)?shù)的不定長(zhǎng)。后來(lái)通過(guò)加入將成績(jī)轉(zhuǎn)化為實(shí)際數(shù)值的程序段,解決了問(wèn)題。</p><p>  整個(gè)程序中的具體操作頻繁使用到了指針,容易造成混亂。因此,作為一名學(xué)生,為了

106、在今后的工作學(xué)習(xí)中更好地掌握指針,應(yīng)該深入地理解其中的原理,更加細(xì)心地使用。</p><p><b>  參考文獻(xiàn)</b></p><p>  1.匯編語(yǔ)言程序設(shè)計(jì) 劉麗莉</p><p>  2.IBM-PC匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)教程 沈美明 溫冬嬋 張赤紅</p&g

107、t;<p>  3.IBM PC DOS 3.30用戶(hù)指南&用戶(hù)參考手冊(cè)&用戶(hù)技術(shù)手冊(cè) 廖萃淇</p><p>  4.IBM PC DOS 3.X版本技術(shù)參考手冊(cè) 夏東濤 朱芒大譯</p><p>  5.DOS 6問(wèn)題精解與命令參考手冊(cè) (美)索查等著</p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論