匯編語言課程設計四則運算器_第1頁
匯編語言課程設計四則運算器_第2頁
匯編語言課程設計四則運算器_第3頁
匯編語言課程設計四則運算器_第4頁
匯編語言課程設計四則運算器_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、信息科學與工程學院匯編語言課程設計題 目: 四則運算器 姓 名: 學 號: 班 級: 課 程: 匯編語言 任課教師: 2011年6月20日課程設計任務書及成績評定題 目設計一個四則運算器課程設計的任務及要求1、 設計任務: 設計一個能實現(xiàn)加減乘除取余計算的程序2、設計要求:要求該程序接受從鍵盤輸入的十六進制數(shù),執(zhí)行相應的進算后,計算結果以十六進制數(shù)輸出。 課程設計所需的軟件、硬件等計算機、masm5課程設計進度計劃2011年5月 5月中旬,進行可行性研究,完成選題. 2011年5月中旬 5月底,根據(jù)選題查閱資料、進行概要設計,確定設計方案. 詳細設計,實施設計方案,調試作品.2011年6月初,

2、完成課程設計(任務書)的撰寫。任課教師評語 成績: 教師簽名: 日期: 選題背景及意義 運用匯編語言,實現(xiàn)簡單計算器的一般功能。通過該程序設計,讓我們熟悉并掌握dos系統(tǒng)功能調用方法及bios系統(tǒng)功能調用方法,同時在程序設計過程中熟悉并掌握各種指令的應用,知道編程的具體流程,以及掌握debug的一系列的功能指令命令,及用它進行調試,運行功能。主要設計內容及預期目標設計一個能實現(xiàn)加減乘除取余計算的程序。將鍵盤輸入的表達式預放入一緩存區(qū)中,然后從該緩沖區(qū)的第一個字符開始讀取判斷,當讀到一個有效的表達式時對表達式進行相應的運算后,輸出用十六進制數(shù)表示的運算結果。目標:要求該程序接受從鍵盤輸入的十六進

3、制數(shù),執(zhí)行相應的進算后,計算結果以十六進制數(shù)輸出。概要設計(1)界面設置主要實現(xiàn)確定界面樣式的功能,以菜單形式顯示。(2)選擇算法設置用于選擇加減乘除進行運算。(3) 十進制轉換設置應用十進制的轉換算法來處理加減乘除四則運算。詳細設計1、頁面設置通過定義數(shù)據(jù)段,利用09h顯示出功能列表。通過定義數(shù)據(jù)段,以字符串的形式輸入每個提示信息,利用09h鍵盤輸入并回顯命令顯示每一個功能提示,是計算器的功能列表有序清晰的顯示在屏幕上。2、選擇算法設置首先選擇要進行的四則運算,若選擇1,則進行加法;若選擇2,則進行減法;若選擇3則進行乘法;若選擇4則進行除法。加法:先輸入第一個小于4位十六進制數(shù)存入si中,

4、在輸入第二個小于4位十六進制數(shù)存入bx和si中的內容相加存在bx中。減法:先輸入第一個小于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位十六進制數(shù)存入si中,在輸入第二個小于4位十六進制數(shù)存入bx中,將si賦給ax作被除數(shù),讓bx作

5、除數(shù),得到的商存在ax中,余數(shù)放在dx中,然后依次賦給bx,將依次顯示即為商。3、十進制轉換設置要完成十進制轉換成十六,一般采用除十六取余法來完成,其大致過程如下:將待裝換的數(shù)除以16得到第一個商和余數(shù),此第一個余數(shù)就是所求的十六進制數(shù)的各位,再用第一個商除以16,得到第二個商和余數(shù),此第二個余數(shù)就是所求十六進制數(shù)的十位,重復這一過程直至商為0,此時的余數(shù)就是所求十六進制數(shù)的最高位。在內存中分配一緩沖區(qū),用來存放以上分離出來的十六進制數(shù)的每一位,然后再逐個轉換成ascii碼的過程很簡單,就是給每個十六進制位加上30h即可,最后送顯示器輸出。使用說明(1) 按照提示選擇數(shù)字1,2,3,4。(2)

6、 1:加法add。(3) 2:減法sub。(4) 3:乘法mul。(5) 4:除法div。(6) 輸入一個小于四位的任意進制的數(shù),回車。(7) 再輸入一個小于四位的任意進制的數(shù),回車。(8) 顯示結果。(9) 退出按q,選擇y或n。程序清單in16macro ;完成從鍵盤接受兩個數(shù)并轉換為十六進制數(shù),第一個數(shù)由si指向,第二個數(shù)存放在bx中l(wèi)ea dx,pr ;dx指向pr換行call outputlea dx,input1 ;dx指向input1,提示輸入第一數(shù)call output ;把輸入的數(shù)存放在bx中l(wèi)ea si,result ;si指向resultmov si,bx ;把第一個十六

7、進制數(shù)存入result的第一個位置lea dx,pr ;把第一個十六進制數(shù)存入result的第一個位置lea dx,pr ;dx指向pr,換行call outputlea dx,input2 ;dx指向input2,提示輸入第一個數(shù)call outputcall input ;把輸入的數(shù)存放在bx中endm ;宏結束data segment ;數(shù)據(jù)段buf db ,0dh,0ahdb *- welcome to calculator system -*,0dh,0ahdb *-1:add-2:sub-3:ul-4:iy-0:quit-*,0dh,0ahdb *- made by zhouzhi

8、hao -*,0dh,0ahdb *- 2009*6*26 -*,0dh,0ahdb 0dh,0ah,please input the choose number:,$input1 db please input the first number xiao yu 4 wei:,$input2 db please input the second number xiao yu 4 wei:,$result dw ?,? ;存放鍵盤輸入的兩個十六制數(shù)wro db you input the number is wrong,please input again:,0dh,0ah,$pr db 0dh

9、,0ah,$ ;將光標移到下一行 起始位置pr1 db a+b=$ pr2 db a-b=$pr3 db a*b=$pr4 db a/b=$pr5 db $pr6 db are you sure exit?(y/n)$data ends ;數(shù)據(jù)段定義結束code segmentmain proc far ;主函數(shù)assume cs:code, ds:datastart:mov ax,datamov ds,axlea dx,buf ;dx指向buf換行call output ;調用顯示字符串函數(shù)換行sub ax,ax ;ax清零call choose ;調用選擇函數(shù)jmp start ;跳轉到s

10、tartretmain endpinput proc near ;定義input函數(shù),就是將從鍵盤輸入的數(shù)按原十六進制數(shù)存放在bx中mov bx,0 ;bx清零newchar:mov ah,1int 21h ;接受鍵盤輸入一個字符cmp al,0dh ;輸入的字符與回車比較je exit ;是回車就結束cmp al,a ;與a比較jae h0 ;大于等于就跳轉到h0cmp al,0 ;與0比較jae h1 ;大于等于就跳轉到h1h0:sub al,37h ;由于41-a=37,完成把字母字符轉換成對應的十六進制數(shù)jmp addto ;跳轉到addtoh1:sub al,30h ;把0到9的字符

11、轉換成對應的十六進制數(shù)jmp addto ;跳轉到addtoaddto:mov cl,4 ;相當于讓bx乘以16shl bx,cl ;將bx邏輯左移mov ah,0 ;將ax清零add bx,ax ;ax+bx送到bxjmp newchar ;跳轉到newchar,把第二個輸入的字符存放到bx的第二位exit:retinput endpoutput proc near ;顯示字符串函數(shù)mov ah,9hint 21hretoutput endpchoose proc near ;選擇函數(shù)mov ah,1 ;從鍵盤接受一個數(shù)int 21hcmp al,1 ;與1比較je yes1 ;等于1就跳轉

12、到y(tǒng)es1,進行加法cmp al,2 ;與2比較je yes2 ;等于2就跳轉到y(tǒng)es2,進行減法cmp al,3 ;與3比較je yes3 ;等于3就跳轉到y(tǒng)es3,進行乘法cmp al,4 ;與4比較je yes4 ;等于4就跳轉到y(tǒng)es4,進行除法cmp al,0 ;與0比較je exit1 ;等于0就跳轉到exit1,結束程序call wrong ;如果不是0到4之間的數(shù)就提示出錯exit1:lea dx,pr ;dx指向pr換行call outputlea dx,pr6 ;dx指向pr6,確認是否退出call outputmov ah,1 ;從鍵盤接受一個數(shù)int 21hcmp al

13、,y ;與y比較je exit0 ;不是y就看是否為ycmp al,y ;與y比較jne start ;不是y就跳轉到startexito:mov ah,4ch ;結束本程序int 21hyes1:call jia ;調用jia函數(shù)jmp start ;調用完之后跳轉到startyes2:call jian ;調用jian函數(shù)jmp start ;調用完之后跳轉到startyes3:call cheng ; 調用cheng函數(shù)jmp start ;調用完之后跳轉到startyes4:call chu ; 調用chu函數(shù)retchoose endp ;選擇函數(shù)結束wrong proc near

14、;報錯函數(shù)lea dx,pr ;dx指向pr換行l(wèi)ea dx,wro ;dx指向wro,提示輸入有錯誤,請重新輸入jmp start ;跳轉到syartretwrong endp ;報錯函數(shù)結束jia proc nea ;加法函數(shù)in16 ;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個由si指向,第二個數(shù)存放到bx中add bx,si ;把第一個數(shù)加第二個數(shù)存放在bx中l(wèi)ea dx,pr ;dx指向pr,換行call output lea dx,pr1 ;dx指向pr1,顯示a+b=call output call outbx ;調用顯示bx寄存器的內容函數(shù)retjia endp ;加法結束j

15、ian proc near ;減法函數(shù)in16 ;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個由si指向,第二個數(shù)存放到bx中sub bx,si ;把第二個數(shù)減第一個數(shù)存放在bx中neg bx ;對結果取反后才是a-b的值,才是第一個數(shù)減去第二個數(shù)lea dx,pr ;dx指向pr,換行call output lea dx,pr2 ;dx指向pr2,顯示a-b=call outputcall outbx ;調用顯示bx寄存器的內容retjian endp ;減法函數(shù)結束cheng proc near ;乘法函數(shù)in16 ;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個由si指向,第二個數(shù)存放到b

16、x中mov dx,0 ;把dx清零mov ax,bx ;把第二個數(shù)賦給axmul word ptrsi ;ax乘【si】并把結果存放在dx,ax中,是字的操作mov bx,ax ;把ax賦給bxpush bx ;將bx壓棧,顯示下面dx的內容是要將dx的值賦給bxpush dx ;將dx壓棧,因為下面換行輸出,會改變dx的值lea dx,pr ;dx指向pr,換行輸出call outputlea dx,pr3 ;dx指向pr3,顯示a*b=call outputpop dx ;將dx出棧,將要做乘法后dx的內容顯示出來mov bx, dx ;把bx給dxcall outbx ;顯示dx的內容p

17、op bx ;把bx出棧call outbx ;顯示ax的內容ret cheng endp ;乘法函數(shù)結束chu proc near ;除法函數(shù)in16 ;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個數(shù)si指向,第二個數(shù)存放在bx中mov ax,si ;將第一個數(shù)賦給axmov dx,0 ;將dx清零div bx ;ax除bx,結果存放到dx,ax,dx存放余數(shù),ax存放商push dx ;壓棧dxpush ax ; 壓棧axlea dx,pr ;dx指向pr,換行call output lea dx,pr4 ;dx指向pr4,顯示a/b=call outputpop ax ;出棧axmov

18、bx,ax ;將ax賦給bx,將商給bxcall outbx ;顯示ax寄存器的內容,顯示余數(shù)lea dx,pr5 ;dx指向pr5,顯示省略號call outputpop dx ;出棧dxmov bx,dx ;將dx賦給bx,即將余數(shù)賦給bxcall outbx ;顯示dx寄存器的內容,顯示余數(shù)ret chu endp ;除法函數(shù)結束outbx proc near ;顯示bx寄存器的內容mov ch,4 ;ch等于4rotate:mov cl,4 ;cl等于4rol bx,cl ;將bx循環(huán)左移四位mov al,bl ;將bl賦給aland al,0fh ;將al的高位置零add al,30h ;al+30h可將al變?yōu)閷腶scii的值cmp al,3ah ;判斷是否是0-9之間jl printit ;是則跳轉到printitadd al,7h ;是a-f再加上7hprintit:mov dl,al ;將al賦給dlmov ah,2 int 21h ;顯示aldec ch ;ch -1再賦給chjnz rotate ;ch!=0則跳轉到rotateret ;ch=0則結束outbx endp ;顯示寄存器bx內容函數(shù)結束code endpend main設計總結匯編語言的課程設計已經結束,這門課程在檢驗我們成績的同時,也檢驗了我

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論