版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)生成績(jī)管理匯編課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)---學(xué)生成績(jī)管理
- 學(xué)生成績(jī)管理---課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)——學(xué)生成績(jī)管理系統(tǒng)
- 課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理課程設(shè)計(jì)
- 學(xué)生成績(jī)管理課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng) 課程設(shè)計(jì)
- 課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)-- 學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)9
評(píng)論
0/150
提交評(píng)論