版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 《微機(jī)原理與應(yīng)用》</b></p><p><b> 課程設(shè)計</b></p><p> 實驗題目:簡單計算器設(shè)計</p><p><b> 2013年01月</b></p><p><b> 目錄</b></p
2、><p> 1設(shè)計目的·································
3、·······1</p><p> 2概要設(shè)計·························
4、;···············2</p><p> 2.1系統(tǒng)總體分析················
5、·······················2</p><p> 2.2程序流程圖及說明········
6、;···························3</p><p> 3詳細(xì)設(shè)計····
7、3;···································5</p&
8、gt;<p> 3.1主模塊及子模塊說明································
9、····5</p><p> 3.2各模塊詳細(xì)設(shè)計···························
10、··········10</p><p> 4程序調(diào)試·····················
11、3;··················13</p><p> 4.1調(diào)試過程及分析············
12、83;······················13</p><p> 4.2運(yùn)行界面分析········
13、83;···························13</p><p> 5心得體會····&
14、#183;···································17<
15、;/p><p> 5.1設(shè)計體會································&
16、#183;·······17</p><p> 5.2系統(tǒng)改進(jìn)·······················
17、83;················17</p><p> 參考文獻(xiàn)···············
18、183;··························18</p><p><b> 1設(shè)計目的</b></p>
19、<p> 匯編語言是計算機(jī)能夠提供給用戶使用的最快而又最有效的語言。同時,匯編語言也是能夠利用計算機(jī)所有硬件特性并能直接控制硬件的唯一語言。因而,對程序的空間和時間要求很高的場合,匯編語言的應(yīng)用是必不可少的。至于很多需要直接控制硬件的應(yīng)用場合,則更是非用匯編語言不可。由于匯編語言如此地接近計算機(jī)硬件,因此,它可以最大限度地發(fā)揮計算機(jī)硬件的性能。用匯編語言編寫的程序速度通常要比高級語言快幾倍、幾十倍、甚至成百上千倍,解釋語言
20、其程序速度更無法與匯編語言程序同日而語。 </p><p> 本次課程設(shè)計的題目是用匯編語言實現(xiàn)一個簡單的計算器,要求:編寫一個程序,每運(yùn)行一次可執(zhí)行程序,可以實現(xiàn)加減乘除四則運(yùn)算。計算器是最簡單的計算工具,簡單計算器具有加、減、乘、除四項運(yùn)算功能。通過使用匯編語言設(shè)計實現(xiàn)簡單計算器,以此進(jìn)一步了解和掌握對數(shù)據(jù)存儲,寄存器的使用,加減乘除相關(guān)指令以及模塊的調(diào)用等匯編語言知識的有效運(yùn)用。本次課程設(shè)計以實現(xiàn)一個基本
21、功能完善,界面友好,操作簡便易行的計算器為最終目的。通過對具有加減乘除基本功能的計算器的設(shè)計實現(xiàn),學(xué)會使用匯編語言實現(xiàn)輸入輸出模塊的設(shè)計,模塊合理調(diào)用的設(shè)計,加減乘除運(yùn)算的判斷以及退出程序的判斷的設(shè)計。通過對各種指令的合理使用,熟悉并加深對各種指令的用法。學(xué)會使用匯編語言設(shè)計各個功能模塊。當(dāng)實現(xiàn)各個程序模塊后,學(xué)會通過程序的調(diào)用最終實現(xiàn)一個具有基本計算功能的簡單計算器。</p><p><b> 2概
22、要設(shè)計</b></p><p> 2.1 系統(tǒng)總體分析 </p><p> 本次匯編語言課程設(shè)計的最終目的是要實現(xiàn)一個簡單計算器,要求編寫一個程序,每運(yùn)行一次可執(zhí)行程序,可以實現(xiàn)數(shù)的加減乘除四則運(yùn)算。比如,十進(jìn)制數(shù)的加減乘除四則運(yùn)算。我們曾經(jīng)學(xué)習(xí)過兩個具體數(shù)字進(jìn)行加減法運(yùn)算,但是對于簡單計算器用匯編語言實現(xiàn)難點(diǎn)在于這兩個要做運(yùn)算的數(shù)是未知的,是由自己調(diào)用中斷輸入到屏幕上并要
23、用程序存儲起來的數(shù),然后才能對這兩個數(shù)進(jìn)行運(yùn)算,而且做的是加法運(yùn)算、減法運(yùn)算乘法運(yùn)算還是除法運(yùn)算也未可知,為此我們還要判斷用戶所輸入的運(yùn)算是四則運(yùn)算中的哪一個運(yùn)算。此外,運(yùn)算過程中的進(jìn)位或是借位,選擇用什么樣的方式進(jìn)行輸出,如何實現(xiàn)清屏等也是要解決的問題。 </p><p> 第一步,我要解決的是輸入時是用INT 21H的10號功能調(diào)用還是用INT 21H的1號功能調(diào)用來進(jìn)行輸入。若是用10號功能調(diào)用則我們進(jìn)行
24、多字符輸入,可以將輸入的字符都存儲到一個數(shù)據(jù)區(qū)里面,并調(diào)用9號功能調(diào)用輸出存進(jìn)去的字符,這種輸入和輸出的方案是可行的。我選擇的是利用1號功能調(diào)用來輸入,即把單個字符一個個的輸入并存儲到一個數(shù)據(jù)區(qū)里。我們要做的是兩個數(shù)的運(yùn)算,先認(rèn)定輸入的格式為1234+5678=或者1111*2222=,當(dāng)然如果輸入不是這樣的格式計算出來的結(jié)果就不一定是我們想要的結(jié)果了。在存儲的時候也是有選擇的存儲,當(dāng)輸入的并非格式里所要求的字符時則報錯。 </p
25、><p> 第二步,設(shè)計程序進(jìn)行判斷所輸入的算式是做加法運(yùn)算、減法運(yùn)算、乘法運(yùn)算還是除法運(yùn)算,即判斷輸入的運(yùn)算符是‘+’號、‘-’號、‘*’號、‘/’號中的哪一個,因為輸入的格式固定了,所以只需要把存進(jìn)數(shù)據(jù)區(qū)的第三個字符拿來與加減乘除四個運(yùn)算符號進(jìn)行比較,和哪一個運(yùn)算符號一樣就調(diào)用相對應(yīng)的運(yùn)算模塊進(jìn)行計算。 </p><p> 第三步,根據(jù)計算器程序所要實現(xiàn)的功能完成各個功能模塊。設(shè)計程序
26、主體部分,根據(jù)主體部分所需的功能模塊對各個子模塊一一進(jìn)行設(shè)計編寫。子模塊中包含有:do_add加法運(yùn)算模塊,do_sub減法運(yùn)算模塊,do_mul乘法運(yùn)算模塊,do_div除法運(yùn)算模塊,input輸入模塊等。 </p><p> 最后還要對這個簡易計算器進(jìn)行功能完善。為了使程序符合我們使用者的操作習(xí)慣,設(shè)計當(dāng)用戶根據(jù)提示信息輸入一個算式后,按下enter鍵或是‘=’符號鍵時,程序依據(jù)輸入的算式進(jìn)行計算,并將結(jié)果
27、顯示在屏幕上。如果用戶輸入錯誤,則返回,提示信息讓用戶重新輸入算式,當(dāng)用戶按下Q或q鍵時退出程序。在各個子功能模塊設(shè)計好的情況下,通過主題模塊的合理調(diào)用,最終實現(xiàn)一個具有簡單運(yùn)算功能的計算器</p><p> 2.2 程序流程圖及說明 </p><p> 此程序流程圖簡要地表現(xiàn)出了所要實現(xiàn)的功能以及一些功能的大概算法,同時也是我編寫的程序的一個總體的框架。 程序流程圖說明:通過流程圖,
28、可以看出程序開始運(yùn)行時,首先輸出提示語句,當(dāng)用戶輸入后,程序根據(jù)所輸入的內(nèi)容進(jìn)行判斷,通過判斷的結(jié)果來決定調(diào)用哪個功能模塊,首先要判斷輸入的字符是否為Q或q,若是,則退出程序,不是則繼續(xù)輸入。還要判斷輸入的是否為0--9,‘+’,‘-’,‘*’,‘/’這些字符,若不是會報錯,是則將根據(jù)運(yùn)算符號調(diào)用相應(yīng)的功能模塊完成運(yùn)算。最后將運(yùn)算的結(jié)果顯示在屏幕上,并返回主題程序,使用戶可以重新輸入。 程序流程圖如圖2-1所示</p>&
29、lt;p><b> 3詳細(xì)設(shè)計</b></p><p> 3.1 主模塊及子模塊說明</p><p> 主題模塊實現(xiàn)變量的定義,提示輸入信息的顯示,調(diào)用各個功能子模塊,判斷輸入的內(nèi)容是否符合要求,如果符合要求,則按照用戶所輸入的運(yùn)算符即‘+’‘-’‘*’‘/’來調(diào)用加減乘除等子模塊完成運(yùn)算。當(dāng)用戶鍵入‘enter’鍵或者‘=’鍵時將結(jié)果顯示在屏幕上。在此,
30、對變量的定義類型進(jìn)行說明,因為本次課程設(shè)計所要求設(shè)計的計算器要能夠?qū)λ奈粩?shù)進(jìn)行加減乘除運(yùn)算,所以我使用DD偽指令將x、y、z三個變量定義為雙字變量。 </p><p> 子模塊說明:主要的子模塊是input子模塊,功能是輸入;do_add子模塊,功能是完成加法運(yùn)算;do_sub子模塊,功能是完成減法運(yùn)算;do_mul子模塊,功能是完成乘法運(yùn)算;do_div子模塊,功能是完成除法運(yùn)算。其它模塊將在模塊詳細(xì)設(shè)計部分
31、中進(jìn)行說明。 </p><p> 程序主題部分源代碼如下:</p><p> CURS MACRO A,B</p><p> MOV AH,2 ;置光標(biāo)位置</p><p> MOV BH,0 ;頁號為0</p><p> MOV DH
32、,A ;設(shè)置光標(biāo)的坐標(biāo)為(A.B)</p><p> MOV DL,B</p><p> INT 10H ;BIOS調(diào)用</p><p><b> ENDM</b></p><p> ;-------------------------------</p
33、><p> DISPMSG MACRO MESSAGE</p><p> LEA DX,MESSAGE ;傳遞MESSAGE的偏移地址</p><p> MOV AH,9 ;顯示字符串</p><p> INT 21H ;DOS調(diào)用</p><
34、;p><b> ENDM</b></p><p> ;----------------------------------</p><p> CLEAR MACRO COLOR ;清屏</p><p> MOV AH,6 ;屏幕初始化
35、 </p><p> MOV AL,0 ;頁號</p><p> MOV CH,0 ;設(shè)置左上角的坐標(biāo)為(0,0)</p><p> MOV CL,0</p><p> MOV DL,100 ;設(shè)置右上角的坐標(biāo)為(100,100)</p&g
36、t;<p> MOV DH,100</p><p> MOV BH,COLOR ;卷入行屬性</p><p> INT 10H ;BIOS調(diào)用</p><p><b> ENDM</b></p><p> .MODEL SMA
37、LL</p><p><b> .STACK</b></p><p> .DATA ;數(shù)據(jù)段定義</p><p> MSG0 DB ' _____________________________________ ',0DH,0AH
38、 ;,0dh,0ah,0dh,0ah</p><p> DB ' | |',0DH,0AH</p><p> | |',0dh,0ah</p><
39、;p> | |',0dh,0ah</p><p> DB ' | -----counter------ |',0DH,0AH ;,0dh,0ah,0dh,0ah</p><p> DB
40、 ' | |',0DH,0AH</p><p> DB ' | |',0DH,0AH</p><p> DB
41、 ' | |',0DH,0AH</p><p> DB ' | data1:'DB '______________ |',0DH,0AH ;,0dh,0ah,0dh
42、,0ah,0dh</p><p> DB ' | |',0DH,0AH</p><p> DB ' | |'
43、,0DH,0AH</p><p> DB ' | |',0DH</p><p> DB ' | data2:' DB '______________
44、|',0DH,0AH ;,0dh,0ah,0dh,0ah,0dh</p><p> DB ' | |',0DH,0AH</p><p> DB ' |
45、 |',0DH,0AH</p><p> DB ' | |',0DH</p><p> DB ' | result:
46、9;DB '__________ |',0DH,0AH,0DH ;,0ah,0dh,0ah,0dh,0ah</p><p> DB ' | |',0DH,0AH</p><p> DB '
47、 | |',0DH,0AH</p><p> DB ' | |',0DH,0AH</p><p> DB '
48、 | |',0DH,0AH</p><p> DB ' | |',0DH,0AH</p><p> DB '
49、 |_____________________________________|','$'</p><p> MSG1 DB 'choose +,-,*,/','$'</p><p> MSG2 DB 'you choose wrong','$
50、',0AH,0DH</p><p> MSG3 DB 'Press ESC to Exit!',0DH,0AH,'$'</p><p> MSG4 DB 'Press any key to continue!',0DH,0AH,'$'</p><p> MS
51、G5 DB '-','$'</p><p> MSG6 DB '.','$'</p><p> MSG7 DB 'error input!','$'</p><p> MSG8 DB 'data
52、2 is wrong!','$'</p><p> F_AL DB ?</p><p> DATA1 DW ?</p><p> DATA2 DW ?</p><p> .CODE ;代碼段從這里開始</p><p&
53、gt; ;--------------------------------------------</p><p> DEC_DIV PROC NEAR</p><p> CWD ;將字轉(zhuǎn)換為雙字,AX內(nèi)容符號擴(kuò)展到DX</p><p> DIV CX</p><p> P
54、USH DX</p><p> MOV DL,AL</p><p> ADD DL,30H ;將不是數(shù)字的字符轉(zhuǎn)換為數(shù)字</p><p> MOV AH,2 ;顯示輸出</p><p> INT 21H ;DOS調(diào)用</p>
55、<p> POP DX</p><p> MOV AX,DX</p><p><b> RET</b></p><p> DEC_DIV ENDP</p><p> ;------------------------------------------</p>
56、<p> CHANGE PROC NEAR </p><p> ;該子程序的功能:將AX中存儲的十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)</p><p> CMP AX,1000</p><p> JAE C1 ;AX≥1000則轉(zhuǎn)移</p><p> CMP
57、 AX,100</p><p> JAE C2 ;AX≥100則轉(zhuǎn)移</p><p> CMP AX,10</p><p> JAE C3 ;AX≥10則轉(zhuǎn)移</p><p> JMP C4 ;AX<10</p>&l
58、t;p> C1: MOV CX,1000D</p><p> CALL DEC_DIV</p><p> C2: MOV CX,100D</p><p> CALL DEC_DIV</p><p> C3: MOV CX,10D</p><p&g
59、t; CALL DEC_DIV</p><p> C4: MOV CX,1D</p><p> CALL DEC_DIV</p><p><b> RET</b></p><p> CHANGE ENDP</p><p> ;------------
60、-------------------</p><p> BEGIN PROC NEAR</p><p> BACK: CLEAR 1EH</p><p> CURS 2,20 ;設(shè)置光標(biāo)為(2.20)</p><p> DISPMSG MSG0 ;顯示用戶界面</
61、p><p> CURS 8,41 ;設(shè)置光標(biāo)為(8,41) ,第一行</p><p> MOV BX,0</p><p> MOV CX,2</p><p><b> NEWCHAR1:</b></p><p> MOV AH,1
62、 ;鍵盤輸入并回顯</p><p> INT 21H ;DOS調(diào)用</p><p> CMP AL,30H ;檢查輸入的字符是不是數(shù)字</p><p> JAE J1 ;如果不是,則轉(zhuǎn)移至J1</p><p> JMP D2
63、 ;是,轉(zhuǎn)移到D2執(zhí)行</p><p> J1: CMP AL,39H ; 與9的ASCII侶氡</p><p> JBE J2 ;如果輸入的字符是0-9,則轉(zhuǎn)移至J2</p><p> JMP D2 ;如果不是數(shù)字,則轉(zhuǎn)移至D2</p><p>
64、 J2: SUB AL,30H</p><p> CBW ;AL的內(nèi)容符號擴(kuò)展到AH</p><p> XCHG AX,BX</p><p> MOV DI,10</p><p> MUL DI</p><p> XC
65、HG AX,BX</p><p> ADD BX,AX</p><p> LOOP NEWCHAR1</p><p> MOV DATA1,BX</p><p> CURS 11,41 ;設(shè)置光標(biāo)位為(11,40),第二行</p><p> M
66、OV BX,0</p><p> MOV CX,2</p><p><b> NEWCHAR2:</b></p><p> MOV AH,1 ;鍵盤輸入并回顯</p><p> INT 21H ;DOS調(diào)用</p><
67、;p> CMP AL,30H ;與0的ASCII碼比較</p><p> JAE J3 ;如果輸入數(shù)字大于等于0則跳轉(zhuǎn)至J3</p><p> JMP D2</p><p> J3: CMP AL,39H ;與9比較</p><p> JBE
68、 J4 ;如果小于或等于9則跳轉(zhuǎn)</p><p> JMP D2 ;如果輸入不是數(shù)字則跳轉(zhuǎn)</p><p> J4: SUB AL,30H ;如果輸入不是0-9,則轉(zhuǎn)化成相應(yīng)的字符</p><p> CBW ;將AL符號擴(kuò)展到AH<
69、;/p><p> XCHG AX,BX</p><p> MOV DI,10</p><p> MUL DI</p><p> XCHG AX,BX</p><p> ADD BX,AX</p><p> LOOP NEW
70、CHAR2</p><p> MOV DATA2,BX</p><p> MOV AX,DATA1</p><p> MOV BX,DATA2</p><p> PUSH AX</p><p> PUSH BX</p><p>
71、 CURS 15,33 ;設(shè)置光標(biāo)的位置為(15.33),第三行</p><p> DISPMSG MSG1 ;顯示提示信息</p><p> MOV AH,1 ;接受鍵盤輸入并回顯</p><p> INT 21H ;DOS調(diào)用</p><p&g
72、t; CMP AL,'+'</p><p> JE ADDI ;如果運(yùn)算符為+,則計算兩數(shù)之和</p><p> CMP AL,'-'</p><p> JE SUBT ;如果運(yùn)算符為-,則計算兩數(shù)之差</p><p>
73、CMP AL,'*'</p><p> JE MULT ;如果運(yùn)算符為*,則計算兩數(shù)之積</p><p> CMP AL,'/'</p><p> JE DIVI ;如果運(yùn)算符為/,則計算兩數(shù)之商</p><p> CURS
74、 16,25 ;設(shè)置光標(biāo)為(16,25)</p><p> DISPMSG MSG2 ;在屏幕上輸出提示信息</p><p> JMP D1</p><p> ;----------------------------------------</p><p> ;----------
75、------------------------------</p><p> MAIN PROC NEAR</p><p> MOV AX,@DATA</p><p> MOV DS,AX</p><p> MOV ES,AX</p><p> MOV
76、 AH,0FH</p><p> INT 10H</p><p> MOV BYTE PTR[F_AL],AL</p><p> MOV AH,0</p><p> PUSH DS</p><p> XOR AX,AX</p><
77、;p> PUSH AX</p><p> MOV DATA2,0 ;將緩沖區(qū)清空</p><p> MOV DATA1,0</p><p><b> AGAIN:</b></p><p> CALL BEGIN</p><p>
78、 CURS 16,23 ;設(shè)置光標(biāo)位置為(16.23)</p><p> DISPMSG MSG3 ;在屏幕上輸出提示信息,提示退出的方法</p><p> CURS 17,23 ;設(shè)置光標(biāo)位置為(17.23)</p><p> DISPMSG MSG4 ;在屏幕上輸出提示信息,提
79、示繼續(xù)的方法</p><p> MOV AH,7 ;鍵盤輸入,無回顯</p><p> INT 21H ;DOS調(diào)用</p><p> CMP AL,27 ;判斷輸入的是否為ESC</p><p> JNE AGAIN ;如果不是就繼
80、續(xù)執(zhí)行以上運(yùn)算</p><p> EXIT: MOV AH,0</p><p> MOV AL,BYTE PTR[F_AL]</p><p> INT 10H</p><p> MOV AX,4C00H ;如果是就退出系統(tǒng)</p><p> INT
81、 21H ;DOS調(diào)用</p><p> MAIN ENDP</p><p> END MAIN</p><p> 3.2 各模塊詳細(xì)設(shè)計</p><p> ;ADD THE TWO DATAS </p><p> ADDI: POP BX<
82、/p><p> POP AX</p><p> ADD AX,BX ;計算兩數(shù)字之和</p><p> PUSH AX</p><p> CURS 14,41 ;設(shè)置光標(biāo)位置為(14,41)</p><p> POP AX</p
83、><p> CALL CHANGE ;將結(jié)果轉(zhuǎn)換為十進(jìn)制數(shù)</p><p> JMP D1</p><p> ;---------------------------------------</p><p> ;SUBTRACT THE TWO DATAS</p><p> SUB
84、T: POP BX</p><p> POP AX</p><p> CMP AX,BX ;比較兩數(shù)大小</p><p> JAE D0 ;如果AX>=BX則跳轉(zhuǎn)</p><p> XCHG AX,BX</p><p&g
85、t; PUSH AX</p><p> PUSH BX</p><p> CURS 14,40 ;設(shè)置光標(biāo)位置為(14,40)</p><p> DISPMSG MSG5 ;在屏幕上顯示負(fù)號</p><p> POP BX</p><p>
86、; POP AX</p><p> D0: SUB AX,BX ;計算兩數(shù)之差</p><p> PUSH AX</p><p> CURS 14,41 ;設(shè)置光標(biāo)位置為(14,41)</p><p> POP AX</p><p&
87、gt; CALL CHANGE ;將結(jié)果轉(zhuǎn)換為十進(jìn)制數(shù)</p><p> JMP D1</p><p> ;---------------------------------------</p><p> ;MULTIPLY THE TWO DATAS </p><p> MULT: POP
88、 BX</p><p> POP AX</p><p> MUL BX ;計算兩數(shù)之積</p><p> PUSH AX</p><p> CURS 14,41 ;設(shè)置光標(biāo)位置為(14,41)</p><p> POP
89、AX</p><p> CALL CHANGE ;將結(jié)果轉(zhuǎn)換為十進(jìn)制數(shù)</p><p> JMP D1</p><p> ;---------------------------------------</p><p> ;DIVIDE THE TWO DATAS</p><p>
90、; DIVI: POP BX</p><p> POP AX</p><p> CMP BX,0 ;判斷除數(shù)是否為0</p><p> JE ERROR ;如果是0則跳轉(zhuǎn)</p><p><b> CWD</b></p>
91、<p> DIV BX ;計算兩數(shù)之商</p><p> PUSH DX</p><p> PUSH AX</p><p> CURS 14,41 ;設(shè)置光標(biāo)位置為(14,41)</p><p> POP AX</p>&l
92、t;p> CALL CHANGE ;將十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)</p><p> POP DX</p><p> CMP DX,0</p><p> JNE LOP ;如果DX不等于0則跳轉(zhuǎn)</p><p> JMP D1</p>
93、<p> LOP: MOV CX,6 ;設(shè)置精確度為小數(shù)點(diǎn)后6位</p><p> PUSH DX</p><p> DISPMSG MSG6 ;輸出小數(shù)點(diǎn)</p><p> POP DX</p><p> CON: PUSH BX</
94、p><p> MOV AX,DX</p><p> MOV BX,10</p><p> MUL BX</p><p> POP BX</p><p> CWD ;將AX的內(nèi)容符號擴(kuò)展到雙字</p><p>
95、; DIV BX ;計算小數(shù)點(diǎn)后每一位的數(shù)字</p><p> PUSH DX</p><p> PUSH CX</p><p> CALL CHANGE ;將十六進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)</p><p> POP CX</p><p&
96、gt; POP DX</p><p> CMP DX,0 ;判斷是否已經(jīng)計算到小數(shù)點(diǎn)后第六位</p><p> JE D1 ;如果是,則跳轉(zhuǎn)</p><p> LOOP CON ;如果不是,就繼續(xù)計算</p><p> ERROR: C
97、URS 15,33 ;設(shè)置光標(biāo)位置為(15,33)</p><p> DISPMSG MSG8 ;提示出錯</p><p><b> D1: RET</b></p><p> D2: PUSH AX</p><p> PUSH BX</p>
98、;<p> CURS 15,33 ;設(shè)置光標(biāo)位置為(15,33)</p><p> DISPMSG MSG7 ;提示輸入出錯</p><p> POP BX</p><p> POP AX</p><p><b> RET</b>&l
99、t;/p><p> BEGIN ENDP</p><p><b> 4程序調(diào)試</b></p><p> 4.1調(diào)試過程及分析</p><p> 4.2 運(yùn)行界面分析</p><p><b> 加法</b></p><p><b>
100、 減法</b></p><p><b> 乘法</b></p><p><b> 除法</b></p><p><b> 5心得體會</b></p><p><b> 5.1 設(shè)計體會 </b></p><p>
101、 經(jīng)過這次課程設(shè)計,我學(xué)到了很多東西,其中包括知識方面的,還有其他方面的。首先讓我認(rèn)識到,做好一件事,做成功一件事是不容易的,但是你只要堅持不懈的努力,不斷的發(fā)揮自己的智慧去思索去探究,你會欣慰的發(fā)現(xiàn)自己正向著成功一步步邁進(jìn)。 </p><p> 這次課程設(shè)計使我對匯編語言程序設(shè)計這門課程有了進(jìn)一步的理解和認(rèn)識,使我學(xué)到了許多編程語言以及算法設(shè)計方面的知識,同時也鍛煉了我的耐心和意志,增長了我的實踐能力。 &
102、lt;/p><p> 這次課程設(shè)計我所選的題目是使用匯編語言設(shè)計一個具有加減乘除基本運(yùn)算功能的簡單計算器,要求編寫一個程序,每運(yùn)行一次可執(zhí)行程序,可以實現(xiàn)加減乘除四則運(yùn)算。通過使用匯編語言設(shè)計實現(xiàn)簡單計算器,我進(jìn)一步了解和掌握了對數(shù)據(jù)存儲,寄存器的使用,加減乘除相關(guān)指令以及模塊的調(diào)用等匯編語言知識的有效運(yùn)用。本次課程設(shè)計以實現(xiàn)一個基本功能完善,界面友好,操作簡便易行的計算器為最終目的,我通過對具有加減乘除基本功能的
103、計算器的設(shè)計實現(xiàn),學(xué)會了使用匯編語言實現(xiàn)輸入輸出模塊的設(shè)計,模塊合理調(diào)用的設(shè)計,加減乘除運(yùn)算的判斷以及退出程序的判斷的設(shè)計。在匯編語言程序設(shè)計中,我通過對各種指令的合理使用,熟悉并加深了對各種指令的用法,同時也學(xué)會使用匯編語言設(shè)計各個功能模塊。當(dāng)我實現(xiàn)各個程序模塊后,學(xué)會了通過程序的調(diào)用最終實現(xiàn)一個具有基本計算功能的簡單計算器。在本次課程設(shè)中,我遇到了很多問題。例如,在計完成具有輸入功能的模塊input模塊時我就遇到了困難。</p
104、><p> 通過一番努力后我發(fā)現(xiàn)利用int 21H中的01號功能調(diào)用可以較好的實現(xiàn)輸入功能,原因是Int 21H的01號功能調(diào)用可以直接接收鍵入的字符,當(dāng)有鍵按下時,首先檢查是否是ctrl+break,若是,則執(zhí)行退出命令;否則將鍵值送入AL寄存器并回顯。 通過這次匯編語言程序課程設(shè)計,我學(xué)到了許多東西,同時也發(fā)現(xiàn)了一些不足之處,在以后的學(xué)習(xí)中我會逐步彌補(bǔ)這些不足??偠灾?,此次課程設(shè)計使我受益匪淺。</p&
105、gt;<p><b> 5.2 系統(tǒng)改進(jìn) </b></p><p> 本次課程設(shè)計我雖然完成了題目的要求,但是其中也還存在一些不足之處,這些不足的地方有待與改進(jìn)與完善。系統(tǒng)需要改進(jìn)的地方有以下三點(diǎn):一,最主要的就是程序的健壯性不是很完善;二,對大數(shù)的加減乘除運(yùn)算功能不足;三,程序代碼算法的優(yōu)化不足。</p><p> 本次課程設(shè)計我認(rèn)為最需要改進(jìn)的
106、就是程序的健壯性。通過這次課程設(shè)計,我發(fā)現(xiàn)一個好的匯編程序不僅要正確可行,還要有健壯性,當(dāng)用戶輸入數(shù)據(jù)非法,使運(yùn)行環(huán)境改變時,程序能恰當(dāng)?shù)刈鞒龇磻?yīng)或進(jìn)行處理,不會產(chǎn)生莫名其妙的輸出結(jié)果。一個正確可行的算法如果缺乏健壯性,那么這個程序也不能算真正的成功。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 微型計算機(jī)原理與接口技術(shù) 呂林濤主編 北京
107、科學(xué)出版社,2005</p><p> [2] 錢曉捷 新版匯編語言程序設(shè)計 北京電子工業(yè)出版社,2008</p><p> [3] 劉麗莉 匯編語言程序設(shè)計 北京大學(xué)出版社,2010</p><p> [4] 王爽 匯編語言 清華大學(xué)出版社,2008</p><p> [5] 《零基礎(chǔ)入門學(xué)習(xí)匯編語言》 主講:小甲魚</p&g
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 匯編語言課程設(shè)計--2位數(shù)計算器程序設(shè)計
- 匯編語言課程設(shè)計--四則運(yùn)算計算器
- 匯編語言課程設(shè)計--四則運(yùn)算計算器的設(shè)計
- 簡單計算器課程設(shè)計
- 計算器java課程設(shè)計--簡單計算器
- 匯編語言課程設(shè)計
- 簡單的計算器課程設(shè)計
- 課程設(shè)計---簡單的計算器
- vb課程設(shè)計--簡單計算器
- 課程設(shè)計--簡單計算器的設(shè)計
- 簡單的計算器課程設(shè)計
- 簡單計算器課程設(shè)計報告
- 課程設(shè)計--簡單的計算器設(shè)計
- 課程設(shè)計--簡單計算器的設(shè)計
- 匯編語言課程設(shè)計
- 簡單計算器課程設(shè)計報告
- 匯編語言課程設(shè)計-- 計算比賽成績系統(tǒng)
- 匯編語言課程設(shè)計報告
- c++課程設(shè)計--簡單計算器
- 匯編語言課程設(shè)計報告
評論
0/150
提交評論