版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 《匯編語言程序設(shè)計(jì)》課程設(shè)計(jì)</p><p><b> 題目:學(xué)生成績管理</b></p><p><b> 一.設(shè)計(jì)目的</b></p><p> 匯編語言課程設(shè)計(jì)是對(duì)所學(xué)課程內(nèi)容全面、系統(tǒng)的總結(jié)、鞏固和提高的一項(xiàng)課程實(shí)踐活動(dòng)。根據(jù)匯編語言的特點(diǎn),選擇相應(yīng)的題目,在老師的指導(dǎo)下,由學(xué)生獨(dú)立完成
2、。課程設(shè)計(jì)要求同學(xué)們熟悉匯編語言的編程,BIOS中斷調(diào)用、系統(tǒng)功能調(diào)用、磁盤數(shù)據(jù)的查詢、存取等相關(guān)知識(shí)。通過課程設(shè)計(jì),一方面提高運(yùn)用匯編語言編程解決實(shí)際問題的能力,另一方面使同學(xué)們更深入的了解計(jì)算機(jī)系統(tǒng)內(nèi)部的有關(guān)知識(shí),為以后的學(xué)習(xí)和系統(tǒng)開發(fā)奠定良好的基礎(chǔ)。</p><p><b> 二.設(shè)計(jì)內(nèi)容</b></p><p><b> 學(xué)生成績管理</b
3、></p><p><b> 功能描述:</b></p><p> 創(chuàng)建成績管理檔案文件(若已存在則直接使用該文件),它包含學(xué)號(hào)10位,英語3位、高數(shù)3位、體育3位,語文3位、物理3位、及它們的平均成績3位等七項(xiàng)內(nèi)容。試編寫一管理程序,要求系統(tǒng)顯示如下菜單,按鍵后執(zhí)行相應(yīng)的操作。</p><p> ?。?)L命令:列出文件中的所有人的
4、記錄,每人一行</p><p> ?。?)I命令:在文件末尾插入一個(gè)人的記錄,但不允許學(xué)號(hào)重復(fù)</p><p> (3)D命令:根據(jù)學(xué)號(hào)刪除指定的紀(jì)錄。</p><p> ?。?)O命令:根據(jù)某課程進(jìn)行排序,并將查詢結(jié)果(學(xué)號(hào)、成績)顯示在屏幕上</p><p> ?。?)Q命令:退出管理系統(tǒng)</p><p><
5、;b> 三.程序設(shè)計(jì)原理</b></p><p> 本次課程設(shè)計(jì)主要是在對(duì)文件進(jìn)行操作的基礎(chǔ)上,開辟存儲(chǔ)空間保存文件的數(shù)據(jù),在程序執(zhí)行過程中,通過對(duì)緩存區(qū)進(jìn)行添加、查詢、刪除、排序,并在最后將緩存區(qū)的數(shù)據(jù)保存到文件,從而實(shí)現(xiàn)對(duì)文件的間接管理。具體步驟如下:</p><p> 根據(jù)數(shù)據(jù)段存儲(chǔ)的文件的ASCIZ串打開文件,未成功的話則新建文件;</p>&
6、lt;p> 顯示界面,根據(jù)用戶鍵入確定偏移值,進(jìn)而找到數(shù)據(jù)段內(nèi)存放的跳轉(zhuǎn)指令;</p><p> 2.1編寫LIST子程序:調(diào)用子程序RD_WJ讀取文件數(shù)據(jù),調(diào)用子程序DISP顯示緩存區(qū)數(shù)據(jù);</p><p> 2.2編寫RD_WJ:通過移動(dòng)文件指針,每次讀取一組,再移動(dòng)指針,重復(fù)至讀取完,保存記錄個(gè)數(shù);</p><p> 2.3編寫DISP:通過指針
7、的移動(dòng),先顯示學(xué)號(hào),再計(jì)算成績的ASC值而后顯示,通過記錄個(gè)數(shù)控制循環(huán)顯示的行數(shù);</p><p> 2.4編寫INPUT:移動(dòng)緩存區(qū)指針至空的一行,通過循環(huán)讀取一組字符形成字符串,遇到空格時(shí)形成學(xué)號(hào),此時(shí)通過與另一個(gè)指向緩存區(qū)開頭的指針進(jìn)行比較,若學(xué)號(hào)重復(fù)則返回,不重復(fù)則同樣通過循環(huán)讀取一組字符,然后減去30H,保存為成績,使用空格來分隔輸入,遇到回車時(shí)結(jié)束輸入;</p><p>
8、2.5編寫DEL:通過記錄的個(gè)數(shù)控制循環(huán),匹配欲刪除的學(xué)號(hào)串時(shí),保存指針,并設(shè)另一個(gè)指針指向欲刪除的記錄的后一個(gè),通過從后面往前傳送記錄,達(dá)到刪除目標(biāo)記錄的效果,最后記錄數(shù)減一;</p><p> 2.6編寫ORD:讀取用戶鍵入的選項(xiàng)1~6,將其作為偏移量,即用2個(gè)指針指向相鄰的2條記錄,用指針加偏移量來獲取成績并比較,交換時(shí)通過將一行的長度作為循環(huán)的次數(shù),循環(huán)XCHG,并在外部設(shè)置2個(gè)循環(huán)實(shí)現(xiàn)冒泡排序;<
9、;/p><p> 2.7編寫WT_F:每次寫入一行,將記錄個(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)長度</p><p> LEN EQU NUM+6 ;一行的長度</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 ;如果文件存在則直接打開,</p><p> MOV AL,2 ;文件可讀寫</p><p> LEA DX,FNAME</p><p> INT 21H</p><p>
25、JNC L0 ;打開成功</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 ;判斷大小寫</p><p> JB L5
29、 ;大寫則轉(zhuǎn)到L5</p><p> SUB BL,20H ;小寫轉(zhuǎn)大寫</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)指針到文件開頭</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 ;判斷是否回車,是回車結(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)長度</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 ;成績顯示格式</p><p> MOV CX,RECS</p><p> D1: MOV BX,
53、CX ;保存記錄數(shù)</p><p> MOV CX,NUM ;學(xué)號(hào)長度</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è)成績</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 ;成績之間的格</p><p> MOV AH,2</p><p> INT 21H</p><p> INC SI</p><p> MOV CX,BP</p><p> LOOP D3
59、 ;顯示一行的成績</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)記錄指針到文件開頭</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)成績</p><p> LEA DI,DATBUF</p><p> LEA SI,DATBUF+NUM ;第一個(gè)成績存的地方</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 ;回車則結(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 ;無記錄</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)長度</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 ;無同名記錄</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 ;回車則輸入下一組</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)前成績</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 ;各科成績累加</p><p> XOR
80、 BL,BL</p><p> INC SI</p><p> SP2: MOV AH,1 ;各個(gè)成績之間允許輸入多個(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 ;各科成績累加</p><p> XOR BL,BL</p><p> INC SI ;中
82、間無空格</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、 ; 存平均成績</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 ;寫文件</p><p><b> RET</b></p><p&
85、gt; INPUT ENDP</p><p> ;--------------------------------------------------------------------------</p><p> ORD PROC NEAR ;根據(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 ;開始時(shí)總是指向第一個(gè)成績</p><p> ADD SI,DX ;根據(jù)DX決定按哪個(gè)成績排序</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)成績</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 ;寫文件</p><p> MOV CX,RECS ;入口參數(shù)</p><p> CMP CX,0</p><p> JZ W3 ;記錄為空則
96、不寫</p><p> LEA DX,DATBUF ;數(shù)據(jù)緩存的偏移地址</p><p> MOV BX,FCODE</p><p> W1: MOV BP,CX</p><p> MOV AH,40H ;寫文件</p><p> MOV
97、 CX,LEN ;寫入的字節(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)試過程</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> 遇到的問題及解決方法</p><p> 編寫程序的前期,由于有很多子功能和多次調(diào)用的函數(shù),分別使用了宏庫和多個(gè)外部子程序。結(jié)果由于宏是通過擴(kuò)展來實(shí)現(xiàn)調(diào)用,使得程序部分跳轉(zhuǎn)指令顯示超出范圍,無法匯編;另一方面,外部子程序由于不便于調(diào)試,數(shù)據(jù)段過長等原因,使用起來也不理想。最后還是講程序?qū)?/p>
104、在一個(gè)文件中,通過規(guī)劃安排各個(gè)段的先后,解決了問題。</p><p> 有些參數(shù)如RECS(記錄的個(gè)數(shù))十分重要,能簡便程序的編寫,應(yīng)該提前計(jì)算出來。</p><p> 根據(jù)題目的要求,本來是直接在文件中進(jìn)行操作,結(jié)果由于文件指針并未能如預(yù)想般返回欲得到的地址,導(dǎo)致部分功能如刪除、排序出現(xiàn)錯(cuò)誤,久久未能實(shí)現(xiàn)。解決方法是:將文件的內(nèi)容先拷貝到緩存區(qū),通過對(duì)緩存區(qū)的記錄進(jìn)行操作,即移動(dòng)指向
105、字符串的指針可靠性大于指向文件內(nèi)容的指針,最后再匯總保存在文件,將具體操作隔離到緩存區(qū),既簡化了步驟,又避免了文件的數(shù)據(jù)被錯(cuò)誤的中斷操作影響。</p><p> 之前存儲(chǔ)記錄一概使用ASC碼,這樣導(dǎo)致了平均分?jǐn)?shù)無法計(jì)算,而且分?jǐn)?shù)的不定長。后來通過加入將成績轉(zhuǎn)化為實(shí)際數(shù)值的程序段,解決了問題。</p><p> 整個(gè)程序中的具體操作頻繁使用到了指針,容易造成混亂。因此,作為一名學(xué)生,為了
106、在今后的工作學(xué)習(xí)中更好地掌握指針,應(yīng)該深入地理解其中的原理,更加細(xì)心地使用。</p><p><b> 參考文獻(xiàn)</b></p><p> 1.匯編語言程序設(shè)計(jì) 劉麗莉</p><p> 2.IBM-PC匯編語言程序設(shè)計(jì)實(shí)驗(yàn)教程 沈美明 溫冬嬋 張赤紅</p&g
107、t;<p> 3.IBM PC DOS 3.30用戶指南&用戶參考手冊(cè)&用戶技術(shù)手冊(cè) 廖萃淇</p><p> 4.IBM PC DOS 3.X版本技術(shù)參考手冊(cè) 夏東濤 朱芒大譯</p><p> 5.DOS 6問題精解與命令參考手冊(cè) (美)索查等著</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)生成績管理匯編課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)---學(xué)生成績管理
- 學(xué)生成績管理---課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)的設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)——學(xué)生成績管理系統(tǒng)
- 課程設(shè)計(jì)---學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績管理課程設(shè)計(jì)
- 學(xué)生成績管理課程設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng) 課程設(shè)計(jì)
- 課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)-- 學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績管理課程設(shè)計(jì)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計(jì)9
評(píng)論
0/150
提交評(píng)論