版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上匯編語(yǔ)言程序設(shè)計(jì)綜合程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告 題 目: 計(jì)算器 專心-專注-專業(yè)1、 項(xiàng)目簡(jiǎn)介 在我們生活中無(wú)時(shí)不刻不用到計(jì)算,雖說計(jì)算并不是很麻煩,但有的時(shí)候復(fù)雜的運(yùn)算仍需要花費(fèi)我們大量的時(shí)間去解決。所以要有這樣一個(gè)程序解決這個(gè)問題。基于這個(gè)目的,而且在這個(gè)學(xué)期中,我們又接觸到了匯編語(yǔ)言,運(yùn)用匯編語(yǔ)言編寫了計(jì)算器,來(lái)解決這個(gè)實(shí)際并且經(jīng)常遇到的問題。改程序主要針對(duì)加減乘除運(yùn)算,可以進(jìn)行相對(duì)復(fù)雜的問題,包含括號(hào)的相關(guān)運(yùn)算。該問題主要注意四則運(yùn)算的優(yōu)先級(jí)問題:懲處運(yùn)算比加減運(yùn)算優(yōu)先級(jí)高,統(tǒng)計(jì)運(yùn)算按從左到右的順序計(jì)算,含有括號(hào)是應(yīng)該先計(jì)算括號(hào)里面的內(nèi)容。2、 小組成員具體分工徐其仲
2、:調(diào)試匯編語(yǔ)言環(huán)境,設(shè)計(jì)匯編程序功能李 秦:實(shí)現(xiàn)程序功能,撰寫實(shí)驗(yàn)報(bào)告3、 需求分析與設(shè)計(jì)問題:利用匯編語(yǔ)言編寫計(jì)算器內(nèi)容:從鍵盤輸入一個(gè)四則運(yùn)算表達(dá)式,按=號(hào)輸出計(jì)算結(jié)果,并當(dāng)結(jié)束時(shí)詢問:是否繼續(xù)?如果按q或Q,則退出,按其余任意鍵則繼續(xù)。計(jì)算器主要包括以下幾個(gè)模塊:(1) 主程序模塊 主程序模塊首先實(shí)現(xiàn)調(diào)用子程序clear清屏,初始化數(shù)據(jù)段,調(diào)用顯示宏show顯示界面,將寄存器ax,bx,cx,dx初始化賦初值為0,調(diào)用回車換行宏,輸入字符或數(shù)字并判斷調(diào)用子程序dyfq調(diào)用賦權(quán)宏fq為符號(hào)賦權(quán),從而判斷優(yōu)先級(jí),調(diào)用加減乘除子程序match對(duì)判斷出的相應(yīng)運(yùn)算符進(jìn)行運(yùn)算,輸出運(yùn)算結(jié)果,判斷是否
3、繼續(xù),繼續(xù)則返回輸入,不則退出程序。(2) 賦權(quán)宏模塊 通過定義宏fq,定義了變?cè)猘,b進(jìn)行參數(shù)傳遞,并使用替換運(yùn)算符&使變?cè)猘與標(biāo)號(hào)s對(duì)應(yīng),接著給對(duì)應(yīng)的符號(hào)賦予權(quán)值,將其權(quán)值存入ch中。(3) 加減乘除運(yùn)算子程序模塊 運(yùn)算模塊實(shí)現(xiàn)了將ax入棧保存,然后將ax,bx賦值為0,判斷cl中的符號(hào)是否為乘號(hào),若為乘號(hào),則將number中的數(shù)字與其下一位的數(shù)字相乘,并把結(jié)果存入該位置。類似的若不為乘號(hào)則接著判斷。(4) 調(diào)用賦權(quán)宏子程序模塊 該模塊實(shí)現(xiàn)了賦權(quán)宏fq為(,),*,、,+,-,=等符號(hào)分別賦權(quán)值為5,1,4,4,3,3,0.從而可以通過設(shè)定的權(quán)值來(lái)判斷優(yōu)先級(jí)(5) 清屏子程序模塊 本模塊先
4、將即將用到的ax,bx,cx,dx寄存器入棧保存,通過ah=06h屏幕上卷功能,用bh=07h將屏幕設(shè)置為黑底白字,給dh,dl賦值將其清屏位置設(shè)定在30行80列范圍,從而實(shí)現(xiàn)了清屏功能,然后再講ax,bx,cx,dx寄存器出棧(6) 回車換行宏模塊 通過2號(hào)功能的輸出功能,將0dh賦予dl輸出,再調(diào)用2號(hào)功能,將0ah賦予dl輸出,從而實(shí)現(xiàn)回車換行功能。 (7)9號(hào)功能顯示字符串宏模塊 通過定義宏show,用9號(hào)顯示功能,通過變?cè)猻tr將字符串顯示出來(lái) 開始程序設(shè)計(jì)流程圖:清屏 加載數(shù)據(jù)段附加段顯示界面Input輸入字符或數(shù)字輸入的是=,數(shù)字,符號(hào)? =Sign=0? 數(shù)字 保存數(shù)字顯示數(shù)字
5、 符號(hào)Sign=0? y下移兩位將sign1賦0 y n設(shè)優(yōu)先級(jí),并判斷是何符號(hào)取number,operator的偏移地址 根據(jù)符號(hào)決定運(yùn)算,將值存入numbOutput通過2號(hào)功能顯示結(jié)果Di+2是否繼續(xù)?結(jié)束y n4、 代碼及分析程序代碼: datas segment space db 1000 dup( ) partten1 db 5 dup( ),23 dup( ),$ str1 db 0ah,0dh, ,179,*,179,$ str2 db 0ah,0dh, ,179,* *,179,$ str3 db 0ah,0dh, ,179,* Weclome! *,179,$ str4 d
6、b 0ah,0dh, ,179,* *,179,$ str5 db 0ah,0dh, ,179,*,179,$ str6 db 0ah,0dh,Press any key to continue or q to exit?$ sign1 dw 0 ;判斷是否有數(shù)字輸入存儲(chǔ)區(qū),值為0代表輸入的不是數(shù)字,為1代表輸入的是數(shù)字 sign2 dw 0 ;判斷括號(hào)是否配對(duì),值為0代表輸入的是符號(hào)是匹配的,為1代表不匹配 number dw 20 dup(0) ;保存輸入的數(shù)值 operator db $ ;判斷輸入的運(yùn)算符是否為空 db 10 dup(0) ;保存該運(yùn)算符對(duì)應(yīng)的權(quán)值 error db W
7、rong!$ datas endsshow macro str ;宏定義,顯示字符串 lea dx,str mov ah,09h int 21h endmfq macro ascii,a,b ;宏定義,給運(yùn)算符賦權(quán)值 cmp al,ascii jne s&a mov ch,b jmp s7 endmhuiche macro ;宏定義,回車換行 mov ah,02h mov dl,0dh int 21h mov ah,02h mov dl,0ah int 21h endmcodes segment assume cs:codes,ds:datas start: call clear mov ax
8、,0600h call scren ; mov ax,0001h ;int 10h mov ax,datas mov ds,ax lea di,number lea si,operator show partten1 show str1 show str2 show str3 show str4 show str5 huiche mov ax,0 mov bx,0 mov cx,0 mov dx,0 start1: huiche input: mov ah,01h int 21h cmp al,= ;第一種情況,第一次輸入的是=,則直接=0. 第一次輸入的數(shù)分為2大種情況:1.=2.數(shù)字或字符
9、:28h-39h je let0 ;是等號(hào),進(jìn)一步判斷輸入括號(hào)是否配對(duì) 第1大種情況排除后就剩下數(shù)字和字符了,再判斷是數(shù)字還是字符 cmp al,28h ;第二種情況,第一次輸入的與28h也就是(比較 jb input ;小于28h時(shí)重新輸入 cmp al,39h ;大于39h是重新輸入 ja input cmp al,2fh ;判斷是數(shù)字還是符號(hào) jbe let1 ;是符號(hào)轉(zhuǎn)入響應(yīng)操作 inc word ptr sign1 ;是數(shù)字將數(shù)字標(biāo)志位加一 sub al,30h ;將ascii碼轉(zhuǎn)為16進(jìn)制 mov ah,0 xchg ax,di mul bx mov bx,10 xchg ax,d
10、i add di,ax jmp input let0: cmp word ptr sign2,0 ;判斷配對(duì)標(biāo)志位 je let1 ;經(jīng)過左括號(hào)和右括號(hào)抵消為0則跳轉(zhuǎn) jmp let8 ;否則顯示輸入錯(cuò)誤 let1: cmp word ptr sign1,0 ;判斷數(shù)值指針是否已經(jīng)下移一位 je let2 add di,2 ;證明之前操作已輸入了數(shù)字,則下移一字單元位置將其賦0 mov word ptr sign1,0 ;將數(shù)字標(biāo)志位復(fù)0 let2: call dyfq ;設(shè)定優(yōu)先級(jí) cmp ch,5 ;判斷輸入的符號(hào)是否是左括號(hào) jne let3 ;不是則判斷輸入的是否是右括號(hào) inc wo
11、rd ptr sign2 ;是左括號(hào),括號(hào)標(biāo)志位加1 let3: cmp ch,1 ;判斷輸入的符號(hào)是否是右括號(hào) jne let4 dec word ptr sign2 ;是右括號(hào),括號(hào)標(biāo)志位減1 let4: cmp byte ptrsi,$ ;判斷運(yùn)算符存儲(chǔ)區(qū)是否為空 je let6 cmp ch,si ;【si】的內(nèi)容為前一個(gè)符號(hào)或其權(quán)值 ja let6 cmp byte ptrsi,( jne let5 dec si jmp input let5: dec si mov cl,si call match ;判斷是什么運(yùn)算符并進(jìn)行相應(yīng)的運(yùn)算 jmp let4 let6: cmp ch,0
12、;判斷是否是等號(hào) je output cmp ch,1 je input ;)不保存,輸入下一個(gè)數(shù) inc si mov si,al ;保存符號(hào) inc si cmp ch,5 ;判斷是否是左括號(hào) jne let7 mov ch,2 ;改變(的權(quán)值 let7: mov si,ch ;緊跟著保存符號(hào)的權(quán)值 jmp input let8: lea dx,error mov ah,9 int 21h jmp exitmatch proc near ;子程序,進(jìn)行相應(yīng)的運(yùn)算 push ax mov ax,0 mov bx,0 cmp cl,2ah ;乘法運(yùn)算 jne chu sub di,2 xchg
13、 bx,di sub di,2 xchg ax,di imul bx mov di,ax add di,2 jmp finish chu: ;除法運(yùn)算 cmp cl,2fh jne jia sub di,2 xchg bx,di sub di,2 xchg ax,di cwd idiv bx mov di,ax add di,2 jmp finish jia: ;加法運(yùn)算 cmp cl,2bh jne jian sub di,2 xchg bx,di sub di,2 add di,bx add di,2 jmp finish jian: ;減法運(yùn)算 cmp cl,2dh jne finish
14、 sub di,2 xchg bx,di sub di,2 sub di,bx add di,2 finish: pop ax retmatch endpdyfq proc ;子程序dyfq調(diào)用宏fq fq 28h,1,5 ;調(diào)用宏fq為(賦權(quán)值 s1: fq 29h,2,1 ;) s2: fq 2ah,3,4 ;* s3: fq 2fh,4,4 ;/ s4: fq 2bh,5,3 ;+ s5: fq 2dh,6,3 ;- s6: fq 3dh,7,0 ;= s7: retdyfq endpclear proc near ;清屏 push ax push bx push cx push dx
15、mov ah,06h mov bh,07h mov cx,0 mov dh,30 mov dl,80 int 10h pop ax pop bx pop cx pop dx retclear endpoutput: ;輸出結(jié)果 sub di,2 cmp word ptrdi,0 jge k1 neg word ptrdi ;求負(fù)數(shù)的絕對(duì)值 mov dl,- mov ah,2 int 21h k1: mov bx,10000 mov cx,5 mov si,0 k2: mov ax,di cwd div bx mov di,dx cmp al,0 jne k3 cmp si,0 jne k3 c
16、mp cx,1 je k3 jmp k4 k3: mov dl,al add dl,30h mov ah,2 int 21h mov si,1 k4: ;實(shí)現(xiàn)將10000變?yōu)?000,100,10 mov ax,bx mov dx,0 mov bx,10 div bx mov bx,ax loop k2 huiche show str6 mov ah,1 int 21h cmp al,q ;判斷輸入是否繼續(xù) je exit cmp al,Q je exit mov word ptrdi+2,0 huiche lea di,number lea si,operator jmp start1 ex
17、it: mov ah,4ch int 21h scren proc near mov bh,2eh mov cx,0 mov dx,184fh ;dos窗口,設(shè)置全屏,一共24行,每行78,184f就是十進(jìn)制的24和78 int 10h retscren endp codes ends end start 5、 總結(jié)本次課程設(shè)計(jì)的題目是計(jì)算器,通過在課堂上學(xué)習(xí)的基本知識(shí)和基本方法以及平時(shí)積累的知識(shí)和方法來(lái)實(shí)現(xiàn)對(duì)帶符號(hào)數(shù)的加減乘除運(yùn)算。在設(shè)計(jì)的過程中,我們組的成員對(duì)課上講解的內(nèi)容進(jìn)行了鞏固,同時(shí)也了解了一些匯編語(yǔ)言必備的其他知識(shí),讓我們的實(shí)際動(dòng)手能力得以增強(qiáng)。其次,通過本次課程設(shè)計(jì),使我們對(duì)模塊化,結(jié)構(gòu)化的程序設(shè)計(jì)方法掌握的更加透徹。在這,就是對(duì)宏的定義,調(diào)用以及子程序的定義,調(diào)用的方法掌握的更加熟練。本次課程設(shè)計(jì)是要實(shí)現(xiàn)對(duì)有符號(hào)數(shù)的加減乘除運(yùn)算,程序開始定義了顯示界面的諸多字符串,經(jīng)過調(diào)用后的清屏宏指令后顯示界面,接下來(lái),定義了判斷數(shù)字和判斷運(yùn)算符的存儲(chǔ)區(qū),通過這兩個(gè)存儲(chǔ)區(qū)來(lái)判斷當(dāng)前位置輸入的是數(shù)字還是運(yùn)算符,然后,定義了保存數(shù)字和保存運(yùn)算符的存儲(chǔ)區(qū),提示錯(cuò)誤的字符串,顯示宏、賦權(quán)宏、回車換行符等,通過主程序?qū)Ω绺绾昙捌渥映绦虻恼{(diào)用,判斷出輸入時(shí)數(shù)字還是運(yùn)算符,若是運(yùn)算符又是運(yùn)算符中的哪類運(yùn)算符,然
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工方案報(bào)審流程(3篇)
- 破局活動(dòng)策劃方案(3篇)
- 閱讀日歷活動(dòng)方案策劃(3篇)
- 童裝活動(dòng)策劃布置方案(3篇)
- 大樓清理施工方案(3篇)
- 物流倉(cāng)儲(chǔ)服務(wù)與管理規(guī)范(標(biāo)準(zhǔn)版)
- 2025年礦山安全生產(chǎn)規(guī)范與操作指南
- 2025年大學(xué)大一(審計(jì)學(xué))審計(jì)工作底稿階段測(cè)試題及答案
- 2025年高職護(hù)理(口腔護(hù)理操作)試題及答案
- 2025年中職給排水工程施工與運(yùn)行(給排水系統(tǒng)維護(hù))試題及答案
- 靶向阿托品遞送系統(tǒng)設(shè)計(jì)-洞察及研究
- 2025檢驗(yàn)科個(gè)人年終工作總結(jié)
- 救護(hù)車急救護(hù)理查房
- 工程竣工移交單(移交甲方、物業(yè))
- 交熟食技術(shù)協(xié)議書
- 靜脈采血不良事件分析與改進(jìn)
- JJF 2216-2025電磁流量計(jì)在線校準(zhǔn)規(guī)范
- 2024-2025學(xué)年廣東省深圳市福田區(qū)六年級(jí)(上)期末數(shù)學(xué)試卷
- 發(fā)改價(jià)格〔2007〕670號(hào)建設(shè)工程監(jiān)理與相關(guān)服務(wù)收費(fèi)標(biāo)準(zhǔn)
- 道岔滾輪作用原理講解信號(hào)設(shè)備檢修作業(yè)課件
- 小學(xué)師徒結(jié)對(duì)師傅工作總結(jié)
評(píng)論
0/150
提交評(píng)論