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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

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

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

4、在輸入第二個(gè)小于4位十六進(jìn)制數(shù)存入bx和si中的內(nèi)容相加存在bx中。減法:先輸入第一個(gè)小于4位十六進(jìn)制數(shù)存入si中,在輸入第二個(gè)小于4位十六進(jìn)制數(shù)存入bx中,然后顯示bx和si中的內(nèi)容相減存在bx中,然后用neg來求反,即為第一個(gè)數(shù)減去第二個(gè)數(shù)的差,顯示bx的內(nèi)容即為差。乘法:先輸入第一個(gè)小于4位十六進(jìn)制數(shù)存入si中,在輸入第二個(gè)小于4位十六進(jìn)制數(shù)存入bx中,把bx的值給ax,然后讓ax乘以si,然后再分別將dx,ax中的內(nèi)容賦給bx,接著依次顯示dx,ax的內(nèi)容,即為積。除法:先輸入第一個(gè)小于4位十六進(jìn)制數(shù)存入si中,在輸入第二個(gè)小于4位十六進(jìn)制數(shù)存入bx中,將si賦給ax作被除數(shù),讓bx作

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

6、 1:加法add。(3) 2:減法sub。(4) 3:乘法mul。(5) 4:除法div。(6) 輸入一個(gè)小于四位的任意進(jìn)制的數(shù),回車。(7) 再輸入一個(gè)小于四位的任意進(jìn)制的數(shù),回車。(8) 顯示結(jié)果。(9) 退出按q,選擇y或n。程序清單in16macro ;完成從鍵盤接受兩個(gè)數(shù)并轉(zhuǎn)換為十六進(jìn)制數(shù),第一個(gè)數(shù)由si指向,第二個(gè)數(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 ;把第一個(gè)十六

7、進(jìn)制數(shù)存入result的第一個(gè)位置lea dx,pr ;把第一個(gè)十六進(jìn)制數(shù)存入result的第一個(gè)位置lea dx,pr ;dx指向pr,換行call outputlea dx,input2 ;dx指向input2,提示輸入第一個(gè)數(shù)call outputcall input ;把輸入的數(shù)存放在bx中endm ;宏結(jié)束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 ?,? ;存放鍵盤輸入的兩個(gè)十六制數(shù)wro db you input the number is wrong,please input again:,0dh,0ah,$pr db 0dh

9、,0ah,$ ;將光標(biāo)移到下一行 起始位置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ù)段定義結(jié)束code segmentmain proc far ;主函數(shù)assume cs:code, ds:datastart:mov ax,datamov ds,axlea dx,buf ;dx指向buf換行call output ;調(diào)用顯示字符串函數(shù)換行sub ax,ax ;ax清零call choose ;調(diào)用選擇函數(shù)jmp start ;跳轉(zhuǎn)到s

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

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

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

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

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

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

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

17、op bx ;把bx出棧call outbx ;顯示ax的內(nèi)容ret cheng endp ;乘法函數(shù)結(jié)束chu proc near ;除法函數(shù)in16 ;調(diào)用宏,接受鍵盤輸入的兩個(gè)十六進(jìn)制數(shù),第一個(gè)數(shù)si指向,第二個(gè)數(shù)存放在bx中mov ax,si ;將第一個(gè)數(shù)賦給axmov dx,0 ;將dx清零div bx ;ax除bx,結(jié)果存放到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寄存器的內(nèi)容,顯示余數(shù)lea dx,pr5 ;dx指向pr5,顯示省略號call outputpop dx ;出棧dxmov bx,dx ;將dx賦給bx,即將余數(shù)賦給bxcall outbx ;顯示dx寄存器的內(nèi)容,顯示余數(shù)ret chu endp ;除法函數(shù)結(jié)束outbx proc near ;顯示bx寄存器的內(nèi)容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)閷?yīng)的ascii的值cmp al,3ah ;判斷是否是0-9之間jl printit ;是則跳轉(zhuǎn)到printitadd al,7h ;是a-f再加上7hprintit:mov dl,al ;將al賦給dlmov ah,2 int 21h ;顯示aldec ch ;ch -1再賦給chjnz rotate ;ch!=0則跳轉(zhuǎn)到rotateret ;ch=0則結(jié)束outbx endp ;顯示寄存器bx內(nèi)容函數(shù)結(jié)束code endpend main設(shè)計(jì)總結(jié)匯編語言的課程設(shè)計(jì)已經(jīng)結(jié)束,這門課程在檢驗(yàn)我們成績的同時(shí),也檢驗(yàn)了我

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論