




已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課 程 設 計 報 告課程設計名稱: 簡易計算器 系 別: 三系 學生姓名: 張夢瑤 班 級: 11通信1班 學 號: 20110306111 成 績: 指導教師: 袁靜 開課時間: 2013-2014 學年 1 學期一設計題目 簡易計算器二主要內容1、采用模塊化程序結構設計軟件,可將整個軟件分成若干功能模塊。2、畫出程序流程圖。3、根據流程圖,編寫源程序。4、上機調試程序。三具體要求1、利用BIOS和DOS的中斷來設計一個計算器,要求在屏幕上顯示一個主菜單,提示用戶輸入相應的數字鍵,分別執(zhí)行加、減、乘、除四種計算功能和結束程序的功能。2、利用BIOS中斷的10號功能調用來設置顯示方式。3、利用DOS中斷的01號和02號子功能來完成鍵盤接收,結果顯示。四進度安排周一周二周三周四周五講課設內容,安排任務查資料,確定硬件電路方案編程調試編程調試寫總結報告五成績評定考核方法:現場驗收(占50%),課程設計報告(占50%)??己藘热荩簩W習態(tài)度(出勤情況,平時表現等)、方案合理性、程序編制質量、演示效果、設計報告質量。成績評定:優(yōu),良,中,及格,不及格。特別說明:如發(fā)現抄襲,按照不及格處理。目 錄前言41、設計題目52、設計內容52.1 基本內容52.2 主要功能53、設計原理及方案63.1 總體方案63.2 程序流程圖73.2.1 主程序73.2.2 計算子程序83.3 系統(tǒng)模塊詳細設計93.3.1 界面設置93.3.2 算法選擇設置103.3.3 數制轉換設置114.匯編源程序代碼135、調試運行結果205.1 操作說明205.2 調試運行結果206、心得體會237、參考文獻24前言課程設計是培養(yǎng)和鍛煉學生在學習完本門課后綜合應用所學理論知識,解決實際工程設計和應用問題的能力的重要教學環(huán)節(jié)。它具有動手、動腦和理論聯(lián)系實際的特點,是培養(yǎng)在校工科大學生理論聯(lián)系實際、敢于動手、善于動手和獨立自主解決設計實踐中遇到的各種問題能力的一個重要教學環(huán)節(jié)。計算器在我們日常生活中應用是相當普遍的,可以說它已經成為現代社會生活不可或缺的一部分。本次課程設計就是根據微機原理與接口的相關知識,利用BIOS和DOS的中斷來設計一個簡易計算器,能夠實現加減乘除四則運算,并在屏幕上顯示一個主菜單,提示用戶輸入相應的數字鍵,分別執(zhí)行加、減、乘、除四種計算功能和結束程序的功能。同時利用BIOS中斷的10號功能調用來設置顯示方式,利用DOS中斷的01號和02號子功能來完成鍵盤接收,結果顯示。通過本次課程設計,要求學生熟悉和掌握微機系統(tǒng)的軟件的方法、設計步驟,使學生得到微機開發(fā)應用方面的初步訓練,熟練應用8086匯編語言編寫應用程序和實際設計中的軟件調試方法和步驟,熟悉微機系統(tǒng)的軟件開發(fā)工具的使用方法。通過課程設計實踐,不僅要培養(yǎng)學生事實求是和嚴肅認真的工作態(tài)度,培養(yǎng)學生的實際動手能力,檢驗學生對本門課學習的情況,更要培養(yǎng)學生在實際的工程設計中查閱資料,撰寫設計報告表達設計思想和結果的能力。1、設計題目簡易計算器2、設計內容2.1 基本內容1、編寫一個程序,能從鍵盤上讀入數據,并完成加、減、乘、除的計算。2、利用BIOS和DOS的中斷來設計一個計算器,要求在屏幕上顯示一個主菜單,提示用戶輸入相應的數字鍵,分別執(zhí)行加、減、乘、除四種計算功能和結束程序的功能。3、利用BIOS中斷的10號功能調用來設置顯示方式。4、利用DOS中斷的01號和02號子功能來完成鍵盤接收,結果顯示。2.2 主要功能一、顯示主菜單功能主菜單如下:Please input a number to choose the arithmetic operation1add 2subtract 3multiply 4divide qreturn to DOS二、計算功能1、別按數字鍵“1”、“2”、“3”,則執(zhí)行相應子模塊1、2、3,進行兩個字節(jié)與兩個字節(jié)的加法、減法和乘法運算,并在屏幕上顯示運算結果。2、按數字鍵“4”,執(zhí)行子模塊4,進行兩個字節(jié)除一個字節(jié)的除法運算,并顯示結果。3、按字母鍵“q”,執(zhí)行子模塊5,程序退出,返回DOS。4、若按其它鍵則顯示提示字符串:“Please Press Number 1、2、3、4、q:”,然后繼續(xù)顯示主菜單。3、設計原理及方案3.1 總體方案利用BIOS中斷的10號功能調用來設置顯示方式。利用DOS中斷的01號、02號子功能來完成鍵盤接受、結果顯示。設置屏幕顯示方式。 MOV AH,00H MOV AL,NUM (NUM為顯示方式屬性字) INT 10H接著從鍵盤上接受鍵值,并判別后轉到相應的子模塊進行運算,并顯示結果。 MOV AH,01H INT 21H ;AL=鍵入字符的ASCII碼從鍵盤上接收一串字符串命令: MOV AH,0AH MOV DX,OFFSET BUF ;BUF為數據段中定義的數據緩沖區(qū) INT 21H顯示單個字符命令: MOV AH,02H INT 21H顯示一串字符串的命令: MOV AH,09H MOV DX,OFFSET BUF ;BUF為被顯示字符串的首地址 INT 21H十進制數顯示過程:將十進制數送到BX中,BX除以1000,余數送BX中,商在AL中,范圍為09,顯示AL中的內容。BX除以100,余數送BX中,商在AL中,顯示AL中的內容,依次類推,直到分出個位數字。如最高位為0,則不應顯示,而非最高位的0則顯示??衫迷O標志位并結合商的方法來決定是否顯示0。3.2 程序流程圖3.2.1 主程序顯示主菜單接收數字AL=1?AL=2?AL=3?AL=4?AL=5?調用加法子程序調用減法子程序調用乘法子程序調用除法子程序結束開始圖3.1 主程序流程圖3.2.2 計算子程序提示輸入第一個數提示輸入第二個數計 算判斷結果正負,并儲存結果將結果轉為ASCII碼,并顯示結果提示返回DOS還是重新計算將第一個數的ASCII碼轉為二進制并保存將第二個數的ASCII碼轉為二進制并保存結 束圖3.2 計算子程序流程圖3.3 系統(tǒng)模塊詳細設計本次設計需要實現的模塊圖圖如1所示 四則運算器程序設計 界面設置算法選擇設置數制轉換設置圖3.3 模塊圖(1)界面設置 主要實現確定界面樣式的功能,以菜單形式顯示。(2) 算法選擇設置 用于選擇加、減、乘、除來進行運算。(3)數制轉換設置 應用十進制二進制的轉換算法來處理加、減、乘、除四則運算。3.3.1 界面設置1、設置屏幕顯示方式: MOV AH,00H MOV AL,2 INT 10H通過調用BOIS的O2H號功能來設置屏幕顯示方式。此處AL=2,即設置屏幕顯示方式為80*25黑白文本。2、顯示主菜單:DOS不僅為用戶提供了許多指令,而且還有用戶可以直接調用的上百個常用子程序。這些子程序的功能主要是進行磁盤讀/寫、基本輸入/輸出管理等。在使用時,用戶只需要了解各個子程序的編號即可,這些編號成為DOS功能調用號。其調用過程為: (1)DOS功能條用號送AH寄存器。(2)如果需要,按要求給定輸入參數(由得不需要輸入參數)。(3)寫入中斷指令“INT 21H”。調用結束,按功能使用其輸出參數。本程序主菜單顯示代碼如下:MOV AH,09H MOV DX,OFFSET TOP INT 21H先在數據段中定義主菜單中要顯示的字符串,再通過調用DOS系統(tǒng)的09H號功能顯示字符串(串尾字符為,但不顯示)來完成。3.3.2 算法選擇設置匯編語言中加減乘除運算指令分別為ADD、SUB、MUL、DIV。首先選擇要進行的四則運算,規(guī)定:若選擇1,則進行加法;選擇2,則進行減法;選擇3,則進行乘法;選擇4,則進行除法。具體計算過程分析如下:1、從鍵盤接收一個數字:MOV AH,01H INT 21H通過調用DOS系統(tǒng)的01H號功能鍵入字符并回車來實現,其出口參數為鍵入字符的ASCII碼,存在AL中。2、接收鍵入用于計算的數:MOV AH,0AH MOV DX,OFFSET BUF1通過調用DOS系統(tǒng)的0AH號功能鍵入字符串至內存緩沖區(qū)來實現,其入口參數如下:DS:DX=存放鍵入字符串的緩沖區(qū)的首地址;(DS:DX)=用戶規(guī)定的緩沖區(qū);(DS:DX+1)=實際鍵入的字符數;從(DS:DX+2)開始放鍵入的字符串。因此,在下面的程序中運用所鍵入的數字時要注意字符串的首地址。3、顯示結果:MOV AH,09H MOV DX,OFFSET BUF3 INT 21H將結果存入數據段中定義的緩沖區(qū)BUF3中,再通過調用DOS系統(tǒng)的09H號功能顯示字符串(串尾字符為,但不顯示)來完成。3.3.3 數制轉換設置 1、子程序A2將數的ASCII碼轉為二進制數:A2 PROC NEAR MOV CL,BUF1+1 ; 把BUF1+1中的實際鍵入的字符數放入CL MOV CH,0 ; CH清零 MOV BX,OFFSET BUF1+2 ; 把第一個數字的地址放在BX PUSH BX ; 保存BX中的值 PUSH CX ; 保存CX中的值L1: MOV AL,BX AND AL,0FH ; 把ASCII碼轉換為十進制 MOV BX,AL ; 存放十進制 INC BX ; 下一個數字的地址 LOOP L1 POP CX ; 恢復CX POP BX ; 恢復BX MOV AX,0 ; 將累加和賦零 MOV SI,10L2: MUL SI ADD AL,BX ADC AH,0 INC BX LOOP L2 ; 累加乘10L3: RET A2 ENDP入口:十進制數的ASCII在BUF1內;出口:轉換后的二進制數在AX內。算法:先將其轉換為十進制,再用累加和乘10加X的方法變?yōu)槎M制,如將163轉換為二進制數,可先將累加和賦0,再計算(0*10+1)*10+6)*10+3)結果為二進制數。2、將計算結果的二進制數轉換為對應的十進制數ASCII碼并輸出顯示(A3程序段):該模塊的程序設計詳見程序清單及說明中A3、BB程序段 入口:二進制數在AX內;出口:轉換后的ASCII碼在BUF內。算法:AX內的數范圍在+32767到-32768之間,先檢查AX符號位,決定輸出+ -,若為負,先求補碼得到原碼后可與正數統(tǒng)一處理。方法:把將被轉換的二進制數先除以10000,商為萬位數,再將余數除以1000,商為千位數,以此類推,求出百十位數,剩下的為個位數。最后各個數加上30H,即為對應字符。4.匯編源程序代碼DATA SEGMENT N=15TOP DB 5 DUP(0AH) DB N DUP( ), Please input a number to choose the arithmetic operation, 0DH,0AH DB N DUP( ), , 0DH,0AH DB N DUP( ),1add 2subtract 3multiply, 0DH,0AH DB N DUP( ),4divide qreturn to DOS, 0DH,0AH DB N DUP( ), , 0DH,0AH DB N DUP( ),Choice (1.2.3.4.q):$MESG1 DB 0DH,0AH,Please press number: 1.2.3.4.q !$ MESG2 DB 0DH,0AH,Please input the first number :$MESG3 DB 0DH,0AH,Please input the second number :$MESG4 DB 0DH,0AH,Play Add :$MESG5 DB 0DH,0AH,Play Subtract :$MESG6 DB 0DH,0AH,Play Multiply :$MESG7 DB 0DH,0AH,Play Divide :$MESG8 DB 0DH,0AH,The Result :$MESG9 DB 0DH,0AH,PRESS Q RETURN DOC,ANY PRESS RETURN START!$BUF1 DB 6 ; 十進制數的緩沖區(qū),可接收6個字符 DB ? ; 保留,用于10號調用時DOC填入實際輸入字符數 DB 6 DUP(?) ; 一個符號位,四位數字ASCII碼,加上一個回車符BUF2 DW ? ; 將第一個數轉換為二進制后,放于這里BUF3 DB 6 DUP(?),$ ; 將結果轉換為ASCII碼后,放在這里DATA ENDSSTACK SEGMENT STACKSTACKCODE SEGMENT ASSUME CS:CODE , DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AH,00H ; 設置屏幕顯示方式 MOV AL,2 INT 10H MOV AH,09H ; 顯示菜單 MOV DX,OFFSET TOP INT 21HAA: MOV AH,01H ; 從鍵盤接收一個數字 INT 21H CMP AL,1 ; 與1比較 JNE NEXT1 ; 不等于1就轉到NEXT1 JMP JIA ; 等于1就轉到加法程序NEXT1: CMP AL,2 ; 與2比較 JNE NEXT2 ; 不等于2就轉到NEXT2 JMP JIAN ; 等于2就轉到減法程序NEXT2: CMP AL,3 ; 與3比較 JNE NEXT3 ; 不等于3就轉到NEXT3 JMP CHENG ; 等于3就轉到乘法程序NEXT3: CMP AL,4 ; 與4比較 JNE NEXT4 ; 不等于4就轉到NEXT4 JMP CHU ; 等于4就轉到除法程序NEXT4: CMP AL,q ; 與q比較 JNE NEXT5 ; 不等于q就轉到NEXT5 MOV AH,4CH ; 回DOS INT 21HNEXT5: MOV AH,09H ; 顯示MESG1 MOV DX,OFFSET MESG1 INT 21H JMP AA ; 跳到AAA1 PROC NEAR MOV AH,09H ; 提示輸入第一個數 MOV DX,OFFSET MESG2 INT 21H MOV AH,0AH ; 接收第一個數 MOV DX,OFFSET BUF1 INT 21H CALL A2 ; 調用A2進行ASCII-二進制的轉換 MOV BUF2,AX ; 把第一個數轉換的二進制放在BUF2 MOV AH,09H ; 提示輸入第二個數 MOV DX,OFFSET MESG3 INT 21H MOV AH,0AH ; 接收第二個數 MOV DX,OFFSET BUF1 INT 21H CALL A2 ; 調用A2把第二個數進行ASCII-二進制轉換 RETA1 ENDPA2 PROC NEAR MOV CL,BUF1+1 ; 把BUF1+1中的實際鍵入的字符數放入CL MOV CH,0 ; CH清零 MOV BX,OFFSET BUF1+2 ; 把第一個數字的地址放在BX PUSH BX ; 保存BX中的值 PUSH CX ; 保存CX中的值L1: MOV AL,BX AND AL,0FH ; 把ASCII碼轉換為十進制 MOV BX,AL ; 存放十進制 INC BX ; 下一個數字的地址 LOOP L1 POP CX ; 恢復CX POP BX ; 恢復BX MOV AX,0 ; 將累加和賦零 MOV SI,10L2: MUL SI ADD AL,BX ADC AH,0 INC BX LOOP L2 ; 累加乘10L3: RET A2 ENDPJIA: MOV AH,09H ; 加法程序 MOV DX,OFFSET MESG4 INT 21H CALL A1 ; 調用A1 ADD AX,BUF2 ; 把轉換后的放在BUF2中的第一個數和放在AX JMP A3 ; 的第二個數相加JIAN: MOV AH,09H ; 減法程序 MOV DX,OFFSET MESG5 INT 21H CALL A1 MOV BX,AX ; 把轉換后的放在AX的第二個數放到BX MOV AX,BUF2 ; 把轉換后放在BUF2中的第一個數放到AX SBB AX,BX ; 兩數相減 JMP A3CHENG: MOV AH,09H ; 乘法程序 MOV DX,OFFSET MESG6 INT 21H CALL A1 MOV BX,AX ; 把轉換后的放在AX的第二個數放到BX MOV AX,BUF2 ; 把轉換后的放在BUF2中第一個數放到AX MUL BX ; 兩數相乘 JMP A3CHU: MOV AH,09H ; 除法程序 MOV DX,OFFSET MESG7 INT 21H CALL A1 MOV DX,AX ; 把轉換后的放在AX的第二個數放到DX MOV AX,BUF2 ; 把轉換后的放在BUF2中第一個數放到AX DIV DL ; 兩數相除,商在AL里 MOV AH,0H ; 使AH清零 JMP A3A3: MOV BUF3,+ ; 把BUF3放+ CMP AX,0 ; 把結果于0比較 JGE L4 ; AX0轉到 L4 NEG AX ; AX0將AX取反 MOV BUF3,- ; 把BUF3放-L4: CWD MOV BX,10000 DIV BX ; 商為第一位數字放在AL,余數放在DX CALL BB MOV BUF3+1,AL ; 把第一個數放在BUF3+1單元中 MOV AX,DX ; 把放在DX中的余數放到AX CWD MOV BX,1000 DIV BX ; 商為第二位數字放在AL,余數放在DX CALL BB MOV BUF3+2,AL ; 把第二個數放在BUF3+2單元中 MOV AX,DX ; 把放在DX中的余數放到AX MOV BL,100 DIV BL ; 商為第三位數字放在AL,余數放在AH CALL BB MOV BUF3+3,AL ; 把第三個數放在BUF3+3單元中 MOV AL,AH ; 把放在AH 中的余數放到AL CBW MOV BL,10 DIV BL ; 商為第四位數字放在AL,余數放在A CALL BB MOV BUF3+4,AL ; 把第四個數放在BUF3+4單元中 ADD AH,30H ; 把個位轉為ASSCII碼 MOV BUF3+5,AH ; 把第五個數放在BUF3+5單元中 MOV AH,09H ; 提示結果 MOV DX,OFFSET MESG8 INT 21H MOV AH,09H MOV DX,OFFSET BUF3 ; 把放在BUF3緩沖區(qū)中的結果顯示出來 INT 21H MOV AH,09H ; 提示是返回DOS還是重新計算 MOV DX,OFFSET TOP INT 21H JMP NEXT5 ; 其他數字重新計算BB PROC NEAR CMP AL,0H ; 與零比較 JE L5 JMP L6L5: MOV AL,20H ; 等于零,賦AL空格 JMP L7L6: ADD AL,30H ; 不等于零,把數轉為ASSCII碼L7: RETBB ENDPA4: MOV AH,4CH ; AL等于Q就返回DOS INT 21HCODE ENDS END START5、調試運行結果5.1 操作說明(1)按提示輸入1,2,3,4。(2)1:加法 ADD。(3)2:減法 SUB。(4)3:乘法 MUL。(5)4:除法 DIV。(6) 輸入一個十進制數,回車。(7) 再輸入一個十進制數,回車。(8) 顯示計算結果。(9) 退出按q。5.2 調試運行結果(1)進入系統(tǒng)界面,程序運行截圖如圖5.1所示。圖5.1 進入系統(tǒng)界面(2)加法:算法選擇1,按提示輸入兩個十六進制數,回車后顯示計算式和結果。程序運行截圖如圖5.2所示。圖5.2 加法程序截圖(3)減法:算法選擇2,按提示輸入兩個十進制數,回車后顯示計算結果,程序運行截圖如圖5.3所示。圖5.3 減法程序截圖(4)乘法:算法選擇3,按提示輸入兩個十進制數,回車后顯示計算結果。程序運行截圖如圖5.4所示。圖5.4 乘法程序截圖(5)除法:算法選擇3,按提示出入兩個十進制數,回車后顯示計算結果,程序運行截圖如圖5.5所示。圖5.5 除法程序截圖(6)退出:按q鍵即可退出程序。程序運行截圖如圖5.6所示。圖5.6 退出運行截圖程序運行后可以看出,程序完成了十進制加減乘除四則運算,按q鍵則退出程序,符合設計要求。同時,屏幕上可以顯示計算結果,也完成了設計要求。6、心得體會本次為期一周的微機原理與接口課程設計已經結束了,在這并不算長的時間里我卻獲益良多。第一,我對本學期所學的理論知識有了更加深刻的理解。首先是對匯編語言的編程思想、程序設計流程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合成公司年會策劃方案
- 呈貢元宵活動策劃方案
- 同村籌款活動方案
- 醫(yī)美女神節(jié)線下活動方案
- 發(fā)育商測評活動方案
- 聽取招商活動方案
- 單位送香囊活動方案
- 名師觀摩活動方案
- 十一餐廳活動方案
- 華為團建活動方案
- 第19章一次函數-一次函數專題數形結合一一次函數與45°角模型講義人教版數學八年級下冊
- 2023年四川省宜賓市敘州區(qū)數學六年級第二學期期末考試模擬試題含解析
- 幼兒園警察職業(yè)介紹課件
- 棉印染清潔生產審核報告
- 滅火器維修與報廢規(guī)程
- 皮膚病的臨床取材及送檢指南-修訂版
- 機型理論-4c172實用類重量平衡
- 校企合作項目立項申請表(模板)
- 管道工廠化預制推廣應用課件
- 海水的淡化精品課件
- 項目工程移交生產驗收報告
評論
0/150
提交評論