版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 匯編語言課程設計報告</p><p> ( 2013 -- 2014 年度第1 學期)</p><p> 實現(xiàn)加減乘除四則運算的計算器</p><p> 專業(yè)計算機科學與技術</p><p> 學生姓名</p><p> 班級</p><p> 學號</p>
2、<p> 指導教師</p><p> 完成日期20140101</p><p><b> 目錄</b></p><p> 1 概 述1</p><p> 1.1 設計目的1</p><p> 1.2 設計內容1</p><p><b&
3、gt; 2實現(xiàn)方法1</b></p><p> 2.1 實現(xiàn)的目標1</p><p> 2.2 主體的功能1</p><p> 2.3 開發(fā)的環(huán)境1</p><p> 3 設計方法概要2</p><p> 3.1功能模塊劃分2</p><p><b>
4、; 3.2流程圖3</b></p><p><b> 4詳細設計3</b></p><p><b> 5 程序調試4</b></p><p> 5.1 調試方案4</p><p> 5.2 調試結果4</p><p><b> 6結
5、論5</b></p><p><b> 參考文獻6</b></p><p><b> 附 錄7</b></p><p> 附錄 源程序清單7</p><p> 實現(xiàn)加減乘除四則運算的計算器</p><p> 1 概 述
6、</p><p><b> 1.1 設計目的</b></p><p> 本課程設計是在學完教學大綱規(guī)定的全部內容、完成所有實踐環(huán)節(jié)的基礎上,旨在深化學生學習的匯編語言課程基本知識,進一步掌握匯編語言程序設計方法,提高分析問題、解決問題的綜合應用能力。</p><p><b> 1.2 設計內容</b></p&g
7、t;<p> 能實現(xiàn)加、減、乘、除的計算;該程序接受的是16進制數(shù);執(zhí)行時,需要在文件名后直接跟上計算表達式,如在命令提示符下執(zhí)行結果如下:</p><p> c:\tasm>js 3+2</p><p><b> 5</b></p><p><b> 2實現(xiàn)方法</b></p>
8、<p><b> 2.1 實現(xiàn)的目標</b></p><p> 本次匯編語言課程設計的最終目的是要實現(xiàn)一個簡單加減乘除四則運算的計算器,要求編寫一個程序,每運行一次可執(zhí)行程序,可以實現(xiàn)數(shù)的加減乘除四則運算。比如,十進制數(shù)的加減乘除四則運算。我們曾經(jīng)學習過兩個具體數(shù)字進行加減法運算,但是對于簡單計算器用匯編語言實現(xiàn)難點在于這兩個要做運算的數(shù)是未知的,是由自己調用中斷輸入到屏幕上并
9、要用程序存儲起來的數(shù),然后才能對這兩個數(shù)進行運算,而且做的是加法運算、減法運算乘法運算還是除法運算也未可知,為此我們還要判斷用戶所輸入的運算是四則運算中的哪一個運算。此外,運算過程中的進位或是借位,選擇用什么樣的方式進行輸出,如何實現(xiàn)清屏等也是要解決的問題。</p><p><b> 2.2 主體的功能</b></p><p> 系統(tǒng)分析主要包括設計的功能分析和系
10、統(tǒng)的流程,功能分析放在首位,每一個軟件都要能滿足一定的功能才有使用價值。根據(jù)功能需求來創(chuàng)建應用程序。</p><p><b> 本設計的功能如下:</b></p><p> 1、輸入2個數(shù),先判斷是加減運算還是乘除運算,再進行計算</p><p> 2、判斷符號是否為運算符</p><p><b> 3
11、、回車為換行符</b></p><p> 4、用十進制或十六進制輸出運算結果</p><p><b> 2.3 開發(fā)的環(huán)境</b></p><p> TASM5.0集成環(huán)境</p><p><b> 3 設計方法概要</b></p><p><b&g
12、t; 3.1功能模塊劃分</b></p><p> 本題目實現(xiàn)的模塊圖如圖3-1所示</p><p><b> 圖3-1 概要模塊</b></p><p><b> 界面設置</b></p><p> 主要實現(xiàn)確定界面樣式的功能,以菜單形式顯示。</p><
13、p><b> 選擇算法設置</b></p><p> 用于選擇加、減、乘、除法來進行運算。</p><p><b> 十進制轉換設置</b></p><p> 應用十進制的轉換算法來處理加、減、乘、除法四則運算。</p><p><b> 3.2流程圖</b>&
14、lt;/p><p> 圖3.2.1四則運算計算器執(zhí)行過程流程圖</p><p><b> 4詳細設計</b></p><p><b> 4.1 界面設置</b></p><p> 通過定義數(shù)據(jù)段,利用09H顯示出功能列表。通過定義數(shù)據(jù)段,以字符串的形式輸入每個提示信息,利用09H鍵盤輸入并回顯命
15、令顯示每一個功能提示,是計算器的功能列表有序清晰的顯示在屏幕上。</p><p> 4.2 選擇算法設置</p><p> 首先選擇要進行的四則運算,若選擇1,則進行加法;若選擇2,則進行減法;若選擇3,則進行乘法;若選擇4,則進行除法。加法:先輸入第一個小于4位十六進制數(shù)存入SI中,在輸入第二個小于4位十六進制數(shù)存入BX中,然后顯示BX 和[SI]中的內容相加存在BX中。減法:先輸入
16、第一個小于4位十六進制數(shù)存入SI中,在輸入第二個小于4位十六進制數(shù)存入BX中,然后顯示BX 和[SI]中的內容相減存在BX中,然后用NEG來求反,即為第一個數(shù)減去第二個數(shù)的差,顯示BX的內容即為差。乘法:先輸入第一個小于4位十六進制數(shù)存入SI中,在輸入第二個小于4位十六進制數(shù)存入BX中,把BX的值給AX,然后讓AX乘以[SI],然后再分別將DX,AX中的內容賦給BX,接著依次顯示DX,AX的內容,即為積。除法:先輸入第一個小于4位十六進
17、制數(shù)存入SI中,在輸入第二個小于4位十六進制數(shù)存入BX中,將[SI]賦給AX作被除數(shù),讓BX作除數(shù),得到的商存放在AX中,余數(shù)放在DX中,然后依次賦給BX,將其依次顯示即為商。</p><p> 4.3 十進制轉換設置</p><p> 要完成十進制轉換成十六,一般采用除十六取余法來完成,其大致過程如下:將待轉換的數(shù)除以16得到第一個商和余數(shù),此第一個余數(shù)就是所求的十六進制數(shù)的各位,再
18、用第一個商除以16,得到第二個商和余數(shù),此第二個余數(shù)就是所求十六進制數(shù)的十位,重復這一過程直至商為0,此時的余數(shù)就是所求十六進制數(shù)的最高位。在內存中分配一緩沖區(qū),用來存放以上分離出來的使十進制數(shù)的每一位,然后再逐個轉換成ASCII碼,轉換成ASCII碼的過程很簡單,就是給每個十六進制位加上30H即可,最后送顯示器輸出。</p><p><b> 5 程序調試</b></p>
19、<p><b> 5.1 調試方案</b></p><p> 對程序源代碼進行功能調試和功能驗證。程序代碼運行成功后,分別檢驗測試其加、減、乘、除功能,并對結果進行分析。當用戶選擇0時,輸入Y或N決定是否退出程序。</p><p><b> 5.2 調試結果</b></p><p> 輸入數(shù)字進行加減乘除
20、運算,計算結果如下圖所示:</p><p> 測試結束后,退出程序,如下圖所示:</p><p><b> 6結論</b></p><p> 程序的主要功能是實現(xiàn)四則運算,整個程序中主要分為,輸入算式,加法,減法,乘法,除法和以十進制顯示結果這幾個部分。通過這次課程設計,我發(fā)現(xiàn)一個好的匯編程序不僅要正確可行,還要有健壯性,當用戶輸入數(shù)據(jù)非
21、法,使運行環(huán)境改變時,程序能恰當?shù)刈鞒龇磻蜻M行處理,不會產(chǎn)生莫名其妙的輸出結果。一個正確可行的算法如果缺乏健壯性,那么這個程序也不能算真正的成功。</p><p> 經(jīng)過為期一周的匯編語言課程設計,親身感受體驗敲、改寫程序代碼的樂趣,我對匯編語言有了較為深入的了解,不僅鞏固了以前在課本上學到的知識,還學會了很多其他東西。通過這次課程設計,我收獲的不僅僅是課程上的知識得到實際應用,還有編程的基本習慣和開發(fā)系統(tǒng)時
22、應注意的流程。作為一個程序編程人員,要保持清醒的頭腦,以現(xiàn)實為依據(jù),讓自己的每一行代碼都能實現(xiàn)自己的意義。由于能力有限,程序還是有不完美的地方。這次的綜合實驗讓我對匯編有了更深刻的認識,對各種指令有了進一步的理解。</p><p><b> 參考文獻</b></p><p> [1] 劉其明.匯編語言程序設計教程.徐州:中國礦業(yè)大學出版社,2010</p&g
23、t;<p> [2] 錢曉捷.新版匯編語言程序設計.北京:電子工業(yè)出版社,2007</p><p> [3] 何小海,嚴華. 微機原理與接口技術.北京:科學出版社,2006</p><p> [4]沈美明,溫冬嬋. IBM-PC匯編語言程序設計 [M]. 清華大學出版社</p><p> [5]王爽 匯編語言 [M].清華大學出版社</p
24、><p><b> 附 錄</b></p><p><b> 附錄 源程序清單</b></p><p> IN16 MACRO ;完成從鍵盤接受二個數(shù)并轉換為十六制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中 </p><p> LEA DX,PR
25、 ;DX指向PR換行</p><p> CALL OUTPUT ;</p><p> LEA DX,INPUT1 ;DX指向INPUT1,提示輸入第一個數(shù)</p><p> CALL OUTPUT </p><p> CALL INPUT ;把輸入的數(shù)存放在BX中</p><p&
26、gt; LEA SI,RESULT ;SI指向RESULT</p><p> MOV [SI],BX ;把第一個十六制數(shù)存入RESULT的第一個位置</p><p> LEA DX,PR ;DX指向PR,換行</p><p> CALL OUTPUT </p><p> LEA D
27、X,INPUT2 ;DX指向INPUT2,提示輸入第一個數(shù)</p><p> CALL OUTPUT </p><p> CALL INPUT ;把輸入的數(shù)存放在BX中</p><p> ENDM ;宏結束</p><p> DATA SEGMENT ;數(shù)據(jù)
28、段</p><p> BUF DB ' ',0DH,0AH</p><p> DB '*------- WELCOME TO CALCULATOR SYSTEM ---------*',0DH,0AH</p><p> DB '*---1:ADD--2:SUB--3:MUL--4:DIV--0:QUIT---------
29、*',0DH,0AH</p><p> DB '*---------- 2011*6*21---------------*',0DH,0AH</p><p> DB 0DH,0AH,'Please input the choose number:','$' </p><p> INPUT1 DB
30、9;Please input the first number xiao yu 4 wei:','$'</p><p> INPUT2 DB 'Please input the second number xiao yu 4 wei:','$'</p><p> RESULT DW ?,? ;存放鍵盤輸入的兩個十六制數(shù)
31、</p><p> WRO DB 'You input the number is wrong,please input again:',0DH,0AH,'$'; </p><p> PR DB 0DH,0AH,'$' ;將光標移到下一行起始位置</p><p> PR1 DB 'A + B=$
32、9;</p><p> PR2 DB 'A - B=$'</p><p> PR3 DB 'A * B=$'</p><p> PR4 DB 'A / B=$'</p><p> PR5 DB '......$'</p><p> PR6 DB
33、'Are you sure exit?(Y/N)$' </p><p> DATA ENDS ;數(shù)據(jù)段落定義結束</p><p> CODE SEGMENT</p><p> MAIN PROC FAR ;主函數(shù)</p><p> ASSUME CS:CODE ,DS:DATA</
34、p><p><b> START:</b></p><p> MOV AX,DATA</p><p><b> MOV DS,AX</b></p><p> LEA DX,BUF ;DX指向BUF換行</p><p> CALL OUTPUT
35、 ;調用顯示字符串函數(shù)換行</p><p> SUB AX,AX ;AX清零</p><p> CALL CHOOSE ;調用選擇函數(shù)</p><p> JMP START ;跳轉到START</p><p> RET </p>&l
36、t;p><b> MAIN ENDP</b></p><p> INPUT PROC NEAR ;定義INPUT函數(shù),就是將從鍵盤輸入的數(shù)按原十六進制數(shù)存放在BX中</p><p> MOV BX,0 ;BX清零</p><p><b> NEWCHAR:</b></p&g
37、t;<p> MOV AH,1 </p><p> INT 21H ;接受鍵盤輸入一個字符</p><p> CMP AL,0DH ;輸入的字符與回車比較</p><p> JE EXIT ;是回車就結束 </p><p> CMP
38、 AL,'A' ;與A比較</p><p> JAE H0 ;大于等于就跳轉到H0 </p><p> CMP AL,'0' ;與0比較</p><p> JAE H1 ;大于等于就跳轉到H1 </p><p>
39、; H0:SUB AL,37H ;由于41-A=37,完成把字母字符轉換成對應的十六進制數(shù)</p><p> JMP ADDTO ;跳轉到ADDTO</p><p> H1:SUB AL,30H ;把0到9的字符轉換成對應的十六進制數(shù)</p><p> JMP ADDTO ;跳轉到ADDTO
40、 </p><p> ADDTO: </p><p> MOV CL,4 ;相當于讓BX乘以16</p><p> SHL BX,CL ;將BX邏輯左移</p><p> MOV AH,0 ;將AX清零</p><
41、p> ADD BX,AX ;AX+BX送到BX</p><p> JMP NEWCHAR ;跳轉到NEWCHAR,把第二個輸入的字符存放到BX的第二位</p><p><b> EXIT: RET</b></p><p> INPUT ENDP</p><p> OU
42、TPUT PROC NEAR ;顯示字符串函數(shù)</p><p> MOV AH,09H</p><p><b> INT 21H</b></p><p><b> RET</b></p><p> OUTPUT ENDP</p><p> CHOOSE PRO
43、C NEAR ;選擇函數(shù)</p><p> MOV AH,1 ;從鍵盤接受一個數(shù)</p><p><b> INT 21H</b></p><p> CMP AL,'1' ;與1比較</p><p> JE YES1 ;等于1就
44、跳轉到YES1,進行加法</p><p> CMP AL,'2' ;與1比較</p><p> JE YES2 ;等于2就跳轉到YES2,進行減法</p><p> CMP AL,'3' ;與1比較 </p><p> JE YES3
45、 ;等于3就跳轉到YES2,進行乘法</p><p> CMP AL,'4' ;與1比較</p><p> JE YES4 ;等于4就跳轉到YES2,進行除法</p><p> CMP AL,'0' ;與0比較</p><p>
46、JE EXIT1 ;等于4就跳轉到EXIT1,結束程序</p><p> CALL WRONG ;如果不是0到4之間的數(shù)就提示出錯</p><p> EXIT1: LEA DX,PR ;DX指向PR換行</p><p> CALL OUTPUT </p><p> LEA DX,PR6
47、 ;DX指向PR6,確認是否退出</p><p> CALL OUTPUT </p><p> MOV AH,1 ;從鍵盤接受一個數(shù)</p><p><b> INT 21H</b></p><p> CMP AL,'Y' ;與Y比較&
48、lt;/p><p> JE EXIT0 ;不是Y就看是否為y</p><p> CMP AL,'y' ;與y比較</p><p> JNE START ;不是y就跳轉到START</p><p> EXIT0:MOV AH,4CH ;結束本程序</p&
49、gt;<p><b> INT 21H</b></p><p> YES1:CALL JIA ;調用JIA函數(shù)</p><p> JMP START ;調用完之后跳轉到START</p><p> YES2:CALL JIAN ;調用JIAN函數(shù)</p><p&
50、gt; JMP START ;調用完之后跳轉到START</p><p> YES3:CALL CHENG ;調用CHENG函數(shù)</p><p> JMP START ;調用完之后跳轉到START</p><p> YES4:CALL CHU ;調用CHU函數(shù)</p><p>
51、; RET </p><p> CHOOSE ENDP ;選擇函數(shù)結束</p><p> WRONG PROC NEAR ;報錯函數(shù)</p><p> LEA DX,PR ;DX指向PR換行</p><p> LEA DX,WRO ;DX指向WRO,
52、提示輸入有錯,請重新輸入</p><p> JMP START ;跳轉到START</p><p><b> RET </b></p><p> WRONG ENDP ;報錯函數(shù)結束</p><p> JIA PROC NEAR ;加法函數(shù)</p>
53、<p> IN16 ;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中 </p><p> ADD BX,[SI] ;把第一個數(shù)加第二個數(shù)存放到BX中</p><p> LEA DX,PR ;DX指向PR,換行</p><p> CALL OUTPUT
54、 </p><p> LEA DX,PR1 ;DX指向PR1,顯示‘A + B=’</p><p> CALL OUTPUT </p><p> CALL OUTBX ;調用顯示BX寄存器的內容函數(shù)</p><p><b> RET</b></p><
55、;p> JIA ENDP ;加法結束</p><p> JIAN PROC NEAR ;減法函數(shù)</p><p> IN16 ;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中 </p><p> SUB BX,[SI] ;第二個數(shù)減第一個數(shù),結
56、果存放到BX中</p><p> NEG BX ;對結果取反后才是A-B的值,才是第一個數(shù)減去第二個數(shù)</p><p> LEA DX,PR ;DX指向PR,換行</p><p> CALL OUTPUT </p><p> LEA DX,PR2 ;DX指向PR2,顯
57、示‘A - B=’</p><p> CALL OUTPUT </p><p> CALL OUTBX ;調用顯示BX寄存器的內容</p><p><b> RET</b></p><p> JIAN ENDP ;加法函數(shù)結束</p><p>
58、CHENG PROC NEAR ;乘法函數(shù)</p><p> IN16 ;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中 </p><p> MOV DX,0 ;把DX清零</p><p> MOV AX,BX ;把第二個數(shù)賦給AX </p&g
59、t;<p> MUL WORD PTR[SI] ;AX乘[SI]并把結果存放到DX,AX中,是字的操作</p><p> MOV BX,AX ;將AX賦給BX</p><p> PUSH BX ;將BX壓棧,顯示下面DX的內容時要將DX的值賦給BX</p><p> PUSH DX
60、 ;將DX壓棧,因為下面要換行輸出,會改變DX的值</p><p> LEA DX,PR ;DX指向PR,換行輸出</p><p> CALL OUTPUT </p><p> LEA DX,PR3 ;DX指向PR3,顯示‘A * B=’</p><p> CALL OUTPUT
61、 </p><p> POP DX ;將DX出棧,要將做乘法后DX的內容顯示出來</p><p> MOV BX,DX ;把DX給BX</p><p> CALL OUTBX ;顯示DX的內容</p><p> POP BX ;將BX出棧<
62、/p><p> CALL OUTBX ;顯示AX的內容</p><p><b> RET</b></p><p> CHENG ENDP ;乘法函數(shù)結束</p><p> CHU PROC NEAR ;除法函數(shù)</p><p> IN16
63、 ;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個數(shù)SI指向,第二個數(shù)存放在BX中</p><p> MOV AX,[SI] ;將第一個數(shù)賦給AX</p><p> MOV DX,0 ;將DX清零</p><p> DIV BX ;AX除BX,結果存放到DX,AX,DX存放余
64、數(shù),AX存放商</p><p> PUSH DX ;壓棧DX</p><p> PUSH AX ;壓棧AX</p><p> LEA DX,PR ;DX指向PR,換行</p><p> CALL OUTPUT </p><p> LEA
65、DX,PR4 ;DX指向PR4,顯示‘A / B=’</p><p> CALL OUTPUT </p><p> POP AX ;出棧AX</p><p> MOV BX,AX ;將AX賦給BX,將商給BX</p><p> CALL OUTBX
66、;顯示AX寄存器的內容,即顯示商</p><p> LEA DX,PR5 ;DX指向PR5,顯示省略號</p><p> CALL OUTPUT </p><p> POP DX ;出棧DX</p><p> MOV BX,DX ;將DX賦給BX,即將余數(shù)賦給BX,&
67、lt;/p><p> CALL OUTBX ;顯示DX寄存器的內容,顯示余數(shù)</p><p> RET </p><p> CHU ENDP ;除法函數(shù)結束</p><p> OUTBX PROC NEAR ;顯示BX寄存器的內容函數(shù)</p><p>
68、; MOV CH,4 ;CH等于4</p><p> ROTATE:MOV CL,4 ;CL等于4</p><p> ROL BX,CL ;將BX循環(huán)左移4位</p><p> MOV AL,BL ;將BL賦給AL</p><p> AND AL,0FH
69、 ;將AL的高位置0</p><p> ADD AL,30H ;AL+30H可將AL變?yōu)閷腁SCII的值</p><p> CMP AL,3AH ;判斷是否是0-9之間</p><p> JL PRINTIT ;是則跳轉到PRINTIT</p><p> ADD AL,
70、7H ;是A-F再加上7H</p><p> PRINTIT:MOV DL,AL ;將AL賦給DL</p><p> MOV AH,2 </p><p> INT 21H ;顯示AL</p><p> DEC CH ;CH-1再賦給CH</p&
71、gt;<p> JNZ ROTATE ;CH!=0則跳轉到ROTATE</p><p> RET ;CH=0則結束</p><p> OUTBX ENDP ;顯示寄存器BX內容函數(shù)結束</p><p><b> CODE ENDS</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 匯編語言課程設計--實現(xiàn)加減乘除四則運算的計算器
- 匯編語言課程設計--四則運算計算器
- 匯編語言課程設計--四則運算計算器的設計
- 匯編課程設計計算平臺長度程序 加減乘除四則運算
- 簡單四則運算計算器
- c語言課程設計報告-長整數(shù)四則運算
- c語言課程設計報告-長整數(shù)四則運算
- c語言畢業(yè)課程設計報告-長整數(shù)四則運算
- 數(shù)據(jù)結構課程設計—十進制四則運算計算器的設計與實現(xiàn)
- 課程設計 長整數(shù)四則運算
- eda課程設計--2位十進制四則運算器電路四則運算器
- 課程設計 長整數(shù)四則運算
- 匯編語言課程設計--簡單計算器設計
- 大整數(shù)的四則運算課程設計
- eda課程設計之2位十進制四則運算器電路四則運算器
- 數(shù)據(jù)結構課程設計--長整數(shù)的四則運算
- 分數(shù)四則運算習題
- 1 四則運算 2、四則混合運算(有括號)
- 運用c語言編寫復數(shù)的四則運算
- eda課程設計--2位十進制四則運算器電路
評論
0/150
提交評論