版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p><b> 課程設(shè)計(jì)任務(wù)書</b></p><p> 學(xué)生姓名: 專業(yè)班級(jí): </p><p> 指導(dǎo)教師: 工作單位: </p><p> 題目: 約瑟夫環(huán)程序設(shè)計(jì)</p&g
2、t;<p><b> 初始條件:</b></p><p> 理論:完成了《匯編語(yǔ)言程序設(shè)計(jì)》課程,對(duì)微機(jī)系統(tǒng)結(jié)構(gòu)和80系列指令系統(tǒng)有了較深入的理解,已掌握了匯編語(yǔ)言程序設(shè)計(jì)的基本方法和技巧。</p><p> 實(shí)踐:完成了《匯編語(yǔ)言程序設(shè)計(jì)》的4個(gè)實(shí)驗(yàn),熟悉了匯編語(yǔ)言程序的設(shè)計(jì)環(huán)境并掌握了匯編語(yǔ)言程序的調(diào)試方法。</p><p&
3、gt; 要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書撰寫等具體要求)</p><p> 進(jìn)一步理解和掌握較復(fù)雜程序的設(shè)計(jì)方法,掌握子程序結(jié)構(gòu)的設(shè)計(jì)和友好用戶界面的設(shè)計(jì)。具體的設(shè)計(jì)任務(wù)及要求:</p><p> 有 n個(gè)人圍成一圈,他們的編號(hào)為1到n。第一個(gè)人從1開始順序報(bào)數(shù),凡報(bào)到m時(shí),該人退出圈子。其后的人再?gòu)?開始順序報(bào)數(shù),直到最后的一個(gè)人退出圈子為止。輸出
4、依次退出圈子人的序號(hào)。n和m的值從鍵盤輸入,且均小于200。</p><p> 程序采用子程序結(jié)構(gòu),結(jié)構(gòu)清晰;</p><p> 友好清晰的用戶界面,能識(shí)別輸入錯(cuò)誤并控制錯(cuò)誤的修改。</p><p> 在完成設(shè)計(jì)任務(wù)后,按要求撰寫課程設(shè)計(jì)說(shuō)明書;對(duì)課程設(shè)計(jì)說(shuō)明書的具體要求請(qǐng)見課程設(shè)計(jì)指導(dǎo)書。</p><p><b> 閱讀資
5、料:</b></p><p> 1)《IBM—PC匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)教程》實(shí)驗(yàn)2.4</p><p> 2)《IBM—PC匯編語(yǔ)言程序設(shè)計(jì)(第2版)》例6.11</p><p><b> 時(shí)間安排:</b></p><p> 設(shè)計(jì)安排一周:周1、周2:完成系統(tǒng)分析及設(shè)計(jì)。</p>&l
6、t;p> 周3、周4:完成程序調(diào)試,和驗(yàn)收。</p><p> 周5:撰寫課程設(shè)計(jì)報(bào)告。</p><p> 指導(dǎo)教師簽名: 年 月 日</p><p> 系主任(或責(zé)任教師)簽名: 年 月 日</p><p><b> 目 錄&l
7、t;/b></p><p> 問(wèn)題描述及要求…………………………………………………………………………………… 4</p><p> 1.1問(wèn)題描述……………………………………………………………………………………… 4</p><p> 1.2任務(wù)要求……………………………………………………………………………………… 4</p><
8、p> 2.設(shè)計(jì)說(shuō)明………………………………………………………………………………………………… 4</p><p> 2.1 簡(jiǎn)要分析……………………………………………………………………………………… 4</p><p> 2.2 概要設(shè)計(jì)……………………………………………………………………………………… 4</p><p> 2.2.1 主要模塊……
9、………………………………………………………………… 4</p><p> 2.2.2 主函數(shù)結(jié)構(gòu)………………………………………………………………….7</p><p> 3.算法描述………………………………………………………………………………………………. 8</p><p> 3.1 算法描述……………………………………………………………………………………
10、. 8</p><p> 3.2 流程框圖……………………………………………………………………………………… 9</p><p> 4.源程序與執(zhí)行結(jié)果……………………………………………………………………………… 10</p><p> 4.1 源程序…………………………………………………………………………………………… 10</p><p
11、> 4.2 執(zhí)行結(jié)果…………………………………………………………………………………………15</p><p> 4.2.1 測(cè)試方法……………………………………………………………………………15</p><p> 4.2.2 測(cè)試結(jié)果………………………………………………………………………….15</p><p> 5.使用說(shuō)明…………………………………
12、……………………………………………………………….16</p><p> 6.總結(jié)……………………………………………………………………………………………………………17</p><p><b> 匯編語(yǔ)言程序設(shè)計(jì)</b></p><p> ----約瑟夫環(huán)程序設(shè)計(jì)</p><p><b> 一、問(wèn)題描述
13、及要求</b></p><p><b> 1.1問(wèn)題描述</b></p><p> 有 n個(gè)人圍成一圈,他們的編號(hào)為1到n。第一個(gè)人從1開始順序報(bào)數(shù)凡報(bào)到m時(shí),該人退出圈子。其后的人再?gòu)?開始順序報(bào)數(shù),直到最后的一個(gè)人退出圈子為止。輸出依次退出圈子人的序號(hào)。n和m的值從鍵盤輸入,且均小于200。</p><p><b>
14、; 1.2任務(wù)要求</b></p><p> 程序采用子程序結(jié)構(gòu),結(jié)構(gòu)清晰;</p><p> 友好清晰的用戶界面,能識(shí)別輸入錯(cuò)誤并控制錯(cuò)誤的修改。</p><p><b> 二.設(shè)計(jì)說(shuō)明</b></p><p><b> 2.1 簡(jiǎn)要分析</b></p><
15、;p> 要正確、友好地完成用匯編語(yǔ)言設(shè)計(jì)約瑟夫環(huán),我們應(yīng)該完成以下幾個(gè)功能:</p><p><b> 相關(guān)的交互提示用語(yǔ)</b></p><p> 定義的數(shù)據(jù)段中包含0-200</p><p><b> 編號(hào)數(shù)n的輸入</b></p><p><b> 標(biāo)志數(shù)m的輸入&l
16、t;/b></p><p> 輸入設(shè)置為只允許輸入三位數(shù)字,其余均不顯示</p><p> 顯示的結(jié)果是所有的退出序列,并使用箭標(biāo)連接</p><p><b> 2.2 概要設(shè)計(jì)</b></p><p> 2.2.1 主要模塊</p><p><b> ?。?)變量的定義&
17、lt;/b></p><p> DATA SEGMENT </p><p> TABLE LABEL WORD</p><p> COUNT = 1</p><p><b> REPT 200</b></p><p> DW COUNT </p><p
18、> COUNT = COUNT + 1 </p><p><b> ENDM </b></p><p> PRINT1 DB 'Please input the number of the people(less than 200):$'</p><p> PRINT2 DB 'Please th
19、e flag:$' </p><p> MESS DB '->$' </p><p><b> DATA ENDS</b></p><p> ?。?)編號(hào)數(shù)n輸入的處理</p><p> n1:MOV AH,07H </p><p><b> I
20、NT 21H </b></p><p> CMP AL,'0' </p><p><b> JB n1</b></p><p> CMP AL,'9'</p><p><b> JA n1</b></p><p>&l
21、t;b> MOV DL,AL</b></p><p> MOV AH,02H</p><p><b> INT 21H</b></p><p><b> MOV AH,0 </b></p><p> SUB AL,30H </p><p> M
22、OV CX,AX </p><p> MOV BX,CX </p><p> n2:MOV AH,07H </p><p><b> INT 21H </b></p><p> CMP AL,'0'</p><p><b> JB n2</b>
23、;</p><p> CMP AL,'9'</p><p><b> JA n2</b></p><p><b> MOV DL,AL</b></p><p> MOV AH,02H</p><p><b> INT 21H</b&
24、gt;</p><p><b> MOV AH,0 </b></p><p> SUB AL,30H </p><p><b> MOV DX,10</b></p><p><b> MUL DX</b></p><p><b>
25、MOV CX,AX</b></p><p> MOV AX,BX </p><p> MOV BX,100 </p><p> MUL BX </p><p> ADD CX,AX </p><p> n3:MOV AH,07H</p><p><b
26、> INT 21H</b></p><p> CMP AL,'0'</p><p><b> JB n3</b></p><p> CMP AL,'9'</p><p><b> JA n3</b></p><p&g
27、t;<b> MOV DL,AL</b></p><p> MOV AH,02H</p><p><b> INT 21H</b></p><p><b> MOV AH,0</b></p><p> SUB AL,30H</p><p>&l
28、t;b> MOV DX,AX</b></p><p> ADD CX,DX </p><p><b> PUSH CX </b></p><p> MOV AX,CX </p><p><b> MOV CX,2 </b></p><p>
29、MUL CX </p><p> MOV BP,AX </p><p> MOV AX,[SI+BP]</p><p> MOV AX,0FFH </p><p> MOV [SI+BP],AX </p><p> CALL CTRL </p><p> LEA DX
30、,PRINT2 </p><p> MOV AH,09H </p><p><b> INT 21H </b></p><p> CALL CTRL </p><p> ?。?)標(biāo)志數(shù)m的輸入處理</p><p> n4:MOV AH,07H </p><
31、p><b> INT 21H </b></p><p> CMP AL,'0'</p><p><b> JB n4</b></p><p> CMP AL,'9'</p><p><b> JA n4</b></p&g
32、t;<p><b> MOV DL,AL</b></p><p> MOV AH,02H</p><p><b> INT 21H</b></p><p><b> MOV AH,0 </b></p><p> SUB AL,30H </p>
33、;<p> MOV CX,AX </p><p> MOV BX,CX </p><p> n5:MOV AH,07H </p><p><b> INT 21H</b></p><p> CMP AL,'0'</p><p><b> J
34、B n5</b></p><p> CMP AL,'9'</p><p><b> JA n5</b></p><p><b> MOV DL,AL</b></p><p> MOV AH,02H</p><p><b>
35、INT 21H </b></p><p><b> MOV AH,0 </b></p><p> SUB AL,30H </p><p><b> MOV DX,10</b></p><p><b> MUL DX</b></p><p
36、><b> MOV CX,AX</b></p><p> MOV AX,BX </p><p> MOV BX,100 </p><p> MUL BX </p><p> ADD CX,AX </p><p> n6:MOV AH,07H</p>
37、<p><b> INT 21H</b></p><p> CMP AL,'0'</p><p><b> JB n6</b></p><p> CMP AL,'9'</p><p><b> JA n6</b></
38、p><p><b> MOV DL,AL</b></p><p> MOV AH,02H</p><p><b> INT 21H</b></p><p><b> MOV AH,0</b></p><p> SUB AL,30H</p>
39、;<p><b> MOV DX,AX</b></p><p> ADD CX,DX </p><p> MOV DI,CX </p><p> 2.2.2 主函數(shù)結(jié)構(gòu)</p><p><b> START: </b></p><p> MO
40、V AX,DATA </p><p> MOV DS,AX </p><p> LEA SI,TABLE</p><p><b> MOV BX,0 </b></p><p><b> MOV DX,0;</b></p><p> CALL PRINT </p
41、><p><b> 三.算法描述</b></p><p> 【求解思路】我們知道第一個(gè)人(編號(hào)一定是m%n-1) 出列之后,剩下的n-1個(gè)人組成了一個(gè)新的約瑟夫環(huán)</p><p> ?。ㄒ跃幪?hào)為k=m%n的人開始): k k+1 k+2 ... n-2, n-1, 0, 1, 2, ... k-2 并且從k開始報(bào)0。&
42、#160;現(xiàn)在我們把他們的編號(hào)做一下轉(zhuǎn)換: k --> 0 k+1 --> 1 k+2 --> 2 ... ... k-2 --> n-2 k-1 --> n-1 變換后就完完全全成為了(n-1)個(gè)人報(bào)數(shù)的子問(wèn)題.</p><p> 假如我們知道這個(gè)子問(wèn)題的解:例如x是最終的勝利者,那
43、么根據(jù)上面這個(gè)表把這個(gè)x變回去不剛好就是n個(gè)人情況的解嗎???!變回去的公式很簡(jiǎn)單,可以推出來(lái)為:x' =(x+k)%n 如何知道(n-1)個(gè)人報(bào)數(shù)的問(wèn)題的解?對(duì),只要知道(n-2)個(gè)人的解就行了。(n-2)個(gè)人的解呢?當(dāng)然是先求(n-3)的情況 ---- 這顯然就是一個(gè)倒推問(wèn)題!</p><p> 下面寫遞推公式: 令f[i]表示i個(gè)人玩游戲報(bào)m退出最后勝利者的編號(hào),最后的結(jié)果自
44、然是f[n] f[1]=0; f[i]=(f[i-1]+m)%i; (i>1) 有了這個(gè)公式,我們要做的就是從1-n順序算出f[i]的數(shù)值,最后結(jié)果是f[n]。因?yàn)閷?shí)際生活中編號(hào)總是從1開始,我們輸出f[n]+1 由于是逐級(jí)遞推,不需要保存每個(gè)f[i],程序也是異常簡(jiǎn)單:</p><p> 翻譯成C語(yǔ)言如下代碼所示int main() {
45、60; int n, m, i, s=0; scanf("%d%d", &n, &m); for (i=2; i <=n; i++) s=(s+m)%i;
46、60; printf ("The winner is %d\n", s+1); }</p><p> 類似的匯編代碼亦可推之.</p><p><b> 【流程框圖】</b></p><p> 四.源程序與執(zhí)行結(jié)果(含測(cè)試方法和測(cè)試結(jié)果)</p><p>&l
47、t;b> 4.1 源程序</b></p><p> DATA SEGMENT </p><p> TABLE LABEL WORD</p><p> COUNT = 1</p><p><b> REPT 200</b></p><p> DW COUNT
48、</p><p> COUNT = COUNT + 1 </p><p> ENDM ;可以選擇編號(hào)數(shù)的上限</p><p> PRINT1 DB 'Please input the number of the people(less than 200):$'</p><p> ;用CX寄存器保存編號(hào)數(shù) &l
49、t;/p><p> PRINT2 DB 'Please the flag:$';用DI寄存器保存標(biāo)志值 </p><p> MESS DB '->$' </p><p> DATA ENDS </p><p> CODE SEGMENT </p><p> ASSUME C
50、S:CODE,DS:DATA </p><p><b> START: </b></p><p> MOV AX,DATA </p><p> MOV DS,AX </p><p> LEA SI,TABLE ;SI指向首地址,BX作為移動(dòng)指針 </p><p><b> M
51、OV BX,0 </b></p><p> MOV DX,0 ;DX作為計(jì)數(shù)器 </p><p> CALL PRINT ;執(zhí)行該子程序后返回輸入的編號(hào)數(shù)和標(biāo)志值,分別為CX和DI</p><p> L0:MOV AX,0 </p><p> L1:MOV AX,[SI+BX] ;依次取出TABLE中的數(shù)據(jù)
52、</p><p><b> CMP AX,0 </b></p><p> JZ L2 ;AX等于0的時(shí)候跳轉(zhuǎn)</p><p> CMP AX,0FFH </p><p> JZ L3 ;AX等于201的時(shí)候跳轉(zhuǎn)</p><p> ADD DX,1 ;計(jì)數(shù)器加1&
53、lt;/p><p> CMP DX,DI ;比較與標(biāo)志值是否一致</p><p> JZ L4 ;一致則跳轉(zhuǎn)</p><p> L2:ADD BX,2 ;取下一個(gè)數(shù)據(jù)</p><p><b> JMP L1 </b></p><p> L3:MOV BX,0 ;重置</p&
54、gt;<p><b> JMP L1 </b></p><p> L4:MOV AX,[SI+BX] ;取出數(shù)值</p><p> CALL OUTDEC </p><p><b> MOV AX,0 </b></p><p> MOV [SI+BX],AX </p&g
55、t;<p><b> MOV DX,0 </b></p><p><b> LOOP L0 </b></p><p><b> MOV AH,2H</b></p><p><b> INT 21H</b></p><p> OUTD
56、EC PROC </p><p><b> PUSH AX </b></p><p><b> PUSH DX </b></p><p><b> PUSH CX </b></p><p><b> PUSH BX </b></p>
57、<p> MOV CL,100 </p><p> DIV CL ;AX=AX/100,AL保存商,AH保存余數(shù)</p><p> MOV BL,AH </p><p> MOV DL,AL </p><p> OR DL,30H ;轉(zhuǎn)換成字符輸出</p><p> MOV AH,02H
58、;顯示輸出 DL=輸出字符</p><p><b> INT 21H </b></p><p><b> MOV CL,10</b></p><p><b> MOV BH,0</b></p><p><b> MOV AX,BX</b></
59、p><p><b> DIV CL</b></p><p><b> MOV DL,AL</b></p><p><b> MOV BL,AH</b></p><p> OR DL,30H </p><p> MOV AH,02H ;顯示輸出 DL
60、=輸出字符</p><p><b> INT 21H </b></p><p><b> MOV DL,BL</b></p><p><b> OR DL,30H</b></p><p> MOV AH,02H ;顯示輸出 DL=輸出字符</p><
61、p><b> INT 21H</b></p><p><b> POP BX </b></p><p><b> POP CX </b></p><p><b> CMP CX,1 </b></p><p><b> JZ L5
62、</b></p><p> LEA DX,MESS ;顯示箭標(biāo)</p><p> MOV AH,09H </p><p><b> INT 21H </b></p><p> L5:POP DX </p><p><b> POP AX </b><
63、/p><p><b> RET </b></p><p> OUTDEC ENDP </p><p> PRINT PROC </p><p><b> PUSH AX </b></p><p><b> PUSH DX </b></p&g
64、t;<p><b> PUSH BX </b></p><p> LEA DX,PRINT1 </p><p> MOV AH,09H ;顯示字符串</p><p><b> INT 21H </b></p><p> CALL CTRL </p><p
65、> n1:MOV AH,07H ;輸入編號(hào)數(shù)n不回顯</p><p><b> INT 21H </b></p><p> CMP AL,'0' ;每次輸入均驗(yàn)證是否為0-9,否則輸入無(wú)效</p><p><b> JB n1</b></p><p> CMP
66、AL,'9'</p><p><b> JA n1</b></p><p><b> MOV DL,AL</b></p><p> MOV AH,02H</p><p><b> INT 21H</b></p><p><
67、b> MOV AH,0 </b></p><p> SUB AL,30H ;轉(zhuǎn)換成實(shí)際數(shù)值</p><p> MOV CX,AX </p><p> MOV BX,CX ;將最高位數(shù)值存入BX</p><p> n2:MOV AH,07H </p><p><b> IN
68、T 21H </b></p><p> CMP AL,'0'</p><p><b> JB n2</b></p><p> CMP AL,'9'</p><p><b> JA n2</b></p><p><b
69、> MOV DL,AL</b></p><p> MOV AH,02H</p><p><b> INT 21H</b></p><p><b> MOV AH,0 </b></p><p> SUB AL,30H ;轉(zhuǎn)換成實(shí)際數(shù)值</p><p&g
70、t;<b> MOV DX,10</b></p><p><b> MUL DX</b></p><p><b> MOV CX,AX</b></p><p> MOV AX,BX ;將最高位數(shù)值存入AX</p><p> MOV BX,100 </p>
71、;<p> MUL BX ;將最高位數(shù)乘以100,作為百位</p><p> ADD CX,AX ;把百位數(shù)存入CX</p><p> n3:MOV AH,07H</p><p><b> INT 21H</b></p><p> CMP AL,'0'</p&g
72、t;<p><b> JB n3</b></p><p> CMP AL,'9'</p><p><b> JA n3</b></p><p><b> MOV DL,AL</b></p><p> MOV AH,02H</p&
73、gt;<p><b> INT 21H</b></p><p><b> MOV AH,0</b></p><p> SUB AL,30H</p><p><b> MOV DX,AX</b></p><p> ADD CX,DX ;把個(gè)位數(shù)存入CX
74、,并入棧保存</p><p><b> PUSH CX </b></p><p> MOV AX,CX </p><p><b> MOV CX,2 </b></p><p> MUL CX ;計(jì)算在TABLE中所對(duì)應(yīng)的偏移字節(jié)</p><p> MOV
75、BP,AX </p><p> MOV AX,[SI+BP] ;取出TABLE中對(duì)應(yīng)的數(shù)值</p><p> MOV AX,0FFH </p><p> MOV [SI+BP],AX </p><p> CALL CTRL ;換行</p><p> LEA DX,PRINT2 </p>&
76、lt;p> MOV AH,09H ;顯示字符串</p><p><b> INT 21H </b></p><p> CALL CTRL ;換行</p><p> n4:MOV AH,07H ;輸入標(biāo)志數(shù)m不回顯</p><p><b> INT 21H </b><
77、;/p><p> CMP AL,'0'</p><p><b> JB n4</b></p><p> CMP AL,'9'</p><p><b> JA n4</b></p><p><b> MOV DL,AL<
78、/b></p><p> MOV AH,02H</p><p><b> INT 21H</b></p><p><b> MOV AH,0 </b></p><p> SUB AL,30H ;轉(zhuǎn)換成實(shí)際數(shù)值</p><p> MOV CX,AX </
79、p><p> MOV BX,CX ;將最高位數(shù)值存入BX</p><p> n5:MOV AH,07H </p><p><b> INT 21H</b></p><p> CMP AL,'0'</p><p><b> JB n5</b><
80、;/p><p> CMP AL,'9'</p><p><b> JA n5</b></p><p><b> MOV DL,AL</b></p><p> MOV AH,02H</p><p><b> INT 21H </b>
81、</p><p><b> MOV AH,0 </b></p><p> SUB AL,30H ;轉(zhuǎn)換成實(shí)際數(shù)值</p><p><b> MOV DX,10</b></p><p><b> MUL DX</b></p><p><b&
82、gt; MOV CX,AX</b></p><p> MOV AX,BX ;將最高位數(shù)值存入AX</p><p> MOV BX,100 </p><p> MUL BX ;將最高位數(shù)乘以100,作為百位</p><p> ADD CX,AX ;把百位數(shù)存入CX</p><p>
83、 n6:MOV AH,07H</p><p><b> INT 21H</b></p><p> CMP AL,'0'</p><p><b> JB n6</b></p><p> CMP AL,'9'</p><p><b
84、> JA n6</b></p><p><b> MOV DL,AL</b></p><p> MOV AH,02H</p><p><b> INT 21H</b></p><p><b> MOV AH,0</b></p><
85、;p> SUB AL,30H</p><p><b> MOV DX,AX</b></p><p> ADD CX,DX ;把個(gè)位數(shù)存入CX</p><p> MOV DI,CX ;存入DI</p><p> CALL CTRL </p><p><b> PO
86、P CX </b></p><p><b> POP BX </b></p><p><b> POP DX </b></p><p><b> POP AX </b></p><p><b> RET </b></p>
87、<p> PRINT ENDP </p><p> CTRL PROC </p><p><b> PUSH AX </b></p><p><b> PUSH DX </b></p><p> MOV AH,02H </p><p> MOV DL,0
88、AH ;打印換行符</p><p><b> INT 21H </b></p><p> MOV DL,0DH ;打印回車符</p><p><b> INT 21H </b></p><p><b> POP DX </b></p><p&
89、gt;<b> POP AX </b></p><p><b> RET </b></p><p> CTRL ENDP </p><p> CODE ENDS </p><p><b> END START</b></p><p><b
90、> 4.2 執(zhí)行結(jié)果</b></p><p> 4.2.1 測(cè)試方法</p><p> 本次測(cè)試我們采用的是通過(guò)提示用語(yǔ),依次輸入編號(hào)數(shù)和標(biāo)志數(shù),都為三位數(shù),未滿100的數(shù)高位為0.</p><p> 輸入的測(cè)試數(shù)據(jù)n與m均小于200,測(cè)試類型3種</p><p> (1)n>m 測(cè)試?yán)?n=100 m=1
91、0 (2) n<m 測(cè)試?yán)?n=50 m=100</p><p> (3)n=m 測(cè)試?yán)?n=100 m=100 (4) 大于200的錯(cuò)誤測(cè)試</p><p> 另外測(cè)試過(guò)程中嘗試輸入除數(shù)字以外的字符是無(wú)法顯示的,這點(diǎn)無(wú)法截圖顯示。</p><p> 4.2.2 測(cè)試結(jié)果</p><p><b> 測(cè)試1<
92、/b></p><p><b> 測(cè)試2</b></p><p><b> 五、使用說(shuō)明</b></p><p> 本次課程設(shè)計(jì)使用MASMPlus進(jìn)行實(shí)驗(yàn),截圖如下:</p><p><b> 六、總結(jié)</b></p><p> 本次匯
93、編語(yǔ)言課程設(shè)計(jì)是約瑟夫環(huán)的程序設(shè)計(jì),之前在C++語(yǔ)言以及數(shù)據(jù)結(jié)構(gòu)的課程中均有過(guò)了解,所以這次上手還算比較容易,但是中途也遇到了匯編程序特有的難題,那就是輸入的問(wèn)題。課程設(shè)計(jì)的要求是輸入兩個(gè)小于200的整數(shù),然而匯編語(yǔ)言中規(guī)定的中斷功能一次只能輸入一個(gè)字符,這與題目要求相悖甚遠(yuǎn),一時(shí)竟陷入了編程困惑中,最后經(jīng)過(guò)簡(jiǎn)單的思考發(fā)現(xiàn)只需要多次使用07H或01H中斷就可以完成這個(gè)功能;但是在進(jìn)一步的研究后發(fā)現(xiàn),程序應(yīng)該對(duì)數(shù)字以外的輸入進(jìn)行有效屏蔽,
94、而不是接受所有的字符輸入,于是我使用了CMP指令結(jié)合跳轉(zhuǎn)指令解決了這個(gè)問(wèn)題,程序要求輸入后除了數(shù)字字符以外的所有輸入將不再顯示且也沒(méi)有任何副作用,達(dá)到了一個(gè)比較完美的效果.另外程序引入了多個(gè)子程序進(jìn)行構(gòu)架,力求將程序的可讀性和效率發(fā)揮到極致,當(dāng)然程序還有很多需要改進(jìn)的地方:輸入嚴(yán)重不符合規(guī)律時(shí)可以嘗試給出更友好的交互提示.</p><p> 本次課程設(shè)計(jì)讓我對(duì)匯編語(yǔ)言的幾個(gè)重要知識(shí)點(diǎn):寄存器問(wèn)題、基本命令(mo
95、v,加減乘除操作,跳轉(zhuǎn)、循環(huán)操作)、匯編中斷程序的功能、匯編程序的基本格式以及函數(shù)的定義和調(diào)用有了一個(gè)比較清楚的了解。通過(guò)本次實(shí)驗(yàn),我也學(xué)會(huì)了一種調(diào)試程序的方法,那就是“一個(gè)函數(shù)一個(gè)函數(shù)單獨(dú)測(cè)試”的方法。另外一般在編寫程序時(shí),首先應(yīng)該寫出程序的主體框架,然后再進(jìn)行修飾、完善。在查錯(cuò)時(shí),我們一定要一條語(yǔ)句一條語(yǔ)句的推敲,絕不能疏忽大意,因?yàn)殄e(cuò)誤的程序往往都是形似而神非,往往錯(cuò)誤就在那一兩條語(yǔ)句,所以必須仔細(xì)。</p><
96、;p> 總之,這次匯編語(yǔ)言課程設(shè)計(jì)讓我受益菲淺。是一次重要的,有意思的實(shí)踐。</p><p> 本科生課程設(shè)計(jì)成績(jī)?cè)u(píng)定表</p><p> 班級(jí): 姓名: 學(xué)號(hào):</p><p> 注:最終成績(jī)以五級(jí)分制記。優(yōu)(90-100分)、良(80-89分)、中(70-79分)、</p><p> 及格(60-69分)、60分以下
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 約瑟夫環(huán)-課程設(shè)計(jì)
- 約瑟夫環(huán)問(wèn)題課程設(shè)計(jì)
- 約瑟夫環(huán)課程設(shè)計(jì)報(bào)告
- 約瑟夫環(huán)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)--unix程序設(shè)計(jì)課程設(shè)計(jì)
- 約瑟夫環(huán)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)_約瑟夫環(huán)_課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-- joseph環(huán)程序設(shè)計(jì)
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)“約瑟夫環(huán)”
- 約瑟夫環(huán)課程設(shè)計(jì)----數(shù)據(jù)結(jié)構(gòu)
- 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- matlab程序設(shè)計(jì) 課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--- 約瑟夫(joseph)環(huán)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--- 約瑟夫環(huán)問(wèn)題
- 數(shù)據(jù)結(jié)構(gòu)約瑟夫環(huán)模擬課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告(約瑟夫環(huán))
- 數(shù)據(jù)結(jié)構(gòu)--約瑟夫環(huán)課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)---java程序設(shè)計(jì)
- matlab程序設(shè)計(jì) 課程設(shè)計(jì) (2)
評(píng)論
0/150
提交評(píng)論