版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、常熟理工學(xué)院課程設(shè)計(jì)報(bào)告 課程設(shè)計(jì)報(bào)告課程 微機(jī)原理課程設(shè)計(jì) 題目 混合算術(shù)運(yùn)算的實(shí)現(xiàn) 系 別 物理與電子工程學(xué)院 年 級(jí) 08級(jí) 專 業(yè) 電子科學(xué)與技術(shù) 班 級(jí) 三 學(xué) 號(hào) 04 06 10 11 學(xué)生姓名 章維 趙峰 張浩 張崇光 指導(dǎo)教師 居偉駿 職 稱 講師 設(shè)計(jì)時(shí)間 2011-4-18 2011-4-22 目錄前言2第一章 題 目31.1題目名稱31.2題目?jī)?nèi)容及要求3第二章 分析與設(shè)計(jì)42.1題目要求42.2程序功能拓展設(shè)想42.3方案設(shè)計(jì)與論證42.4程序結(jié)構(gòu)框圖等設(shè)計(jì)5第三章 匯編程序設(shè)計(jì)73.1代碼結(jié)構(gòu)分析73.2匯編代碼設(shè)計(jì)73.2.1程序初始化73.2.2鍵盤輸入模塊83
2、.2.3輸入數(shù)據(jù)判斷93.2.4算術(shù)運(yùn)算113.2.5運(yùn)算結(jié)果輸出133.3實(shí)驗(yàn)結(jié)果15第四章 總結(jié)與體會(huì)16參考文獻(xiàn)17附錄18前言電子數(shù)字計(jì)算機(jī)是20世紀(jì)最重大的科技成就之一。自1946年第一臺(tái)電子計(jì)算機(jī)問世以來,計(jì)算機(jī)得到迅速發(fā)展,并已廣泛應(yīng)用于工農(nóng)業(yè)生產(chǎn)、科學(xué)研究、國防及人們?nèi)粘I畹母鱾€(gè)領(lǐng)域。伴隨人類進(jìn)入21世紀(jì),以高科技革命為支撐的信息化社會(huì)已經(jīng)到來,以“信息”為主導(dǎo)的新興產(chǎn)業(yè)正在全球經(jīng)濟(jì)領(lǐng)域掀起一場(chǎng)空前的革命?!爸R(shí)”是這場(chǎng)革命的直接推動(dòng)力,而計(jì)算機(jī)及其應(yīng)用技術(shù)則是知識(shí)經(jīng)濟(jì)的基礎(chǔ),掌握計(jì)算機(jī)知識(shí)和應(yīng)用能力的多少,已成為衡量現(xiàn)代人文化水平高低的一個(gè)重要標(biāo)志。隨著信息化時(shí)代的到來,計(jì)
3、算機(jī)技術(shù)的進(jìn)一步發(fā)展和應(yīng)用必將對(duì)社會(huì)發(fā)展和人類文明產(chǎn)生更大的促進(jìn)作用,對(duì)社會(huì)政治、經(jīng)濟(jì)、文化和人類生活的各個(gè)方面都將產(chǎn)生巨大而深遠(yuǎn)的影響。1 “微機(jī)計(jì)算機(jī)原理及應(yīng)用”是高等學(xué)校計(jì)算機(jī)及相關(guān)專業(yè)一門非常重要的專業(yè)基礎(chǔ)課,同時(shí)也是一門發(fā)展迅速、與實(shí)踐結(jié)合緊密的學(xué)科。基于計(jì)算機(jī)即微型機(jī)的微機(jī)原理課程設(shè)計(jì)是一項(xiàng)具有重要實(shí)踐意義的課程設(shè)計(jì)。首先我們必須了解微機(jī)的指令系統(tǒng)。指令是計(jì)算機(jī)用以控制各個(gè)部件協(xié)調(diào)動(dòng)作的指令。一臺(tái)計(jì)算機(jī)所具有的全部指令稱為機(jī)器的指令系統(tǒng),它全面描述了微處理器的功能,因此在其他條件相同時(shí),指令系統(tǒng)功能越強(qiáng),計(jì)算機(jī)的功能就越強(qiáng)。而這次課程設(shè)計(jì)所采用的編程語言則是匯編語言,匯編語言是一種
4、采用助記符表示的程序設(shè)計(jì)語言,即用助記符來表示指令的操作碼和操作數(shù),用符號(hào)或標(biāo)號(hào)代表地址、常量或標(biāo)量。助記符一般都是英文單詞的縮寫,便于識(shí)別和記憶。使用匯編語言編寫的程序稱為匯編語言源程序。匯編語言源程序一般不能由機(jī)器直接執(zhí)行,而必須翻譯成由機(jī)器代碼組成的目標(biāo)程序,這個(gè)翻譯過程稱為匯編。把匯編語言源程序翻譯成目標(biāo)程序的軟件稱為匯編程序。匯編語言與機(jī)器語言密切相關(guān),它們之間有明顯的對(duì)應(yīng)關(guān)系。一條匯編語言指令對(duì)應(yīng)一條機(jī)器語言代碼,所以匯編語言和機(jī)器語言一樣都是面向機(jī)器的語言。使用匯編語言進(jìn)行程序設(shè)計(jì)能充分利用機(jī)器的硬件功能和結(jié)構(gòu)特點(diǎn),從而有效地加快程序的執(zhí)行速度,減少程序占用的存儲(chǔ)空間。所以匯編語
5、言大量用于編寫計(jì)算機(jī)系統(tǒng)程序、實(shí)時(shí)通信程序和實(shí)時(shí)控制程序等。第一章 題 目1.1題目名稱混合算術(shù)運(yùn)算的實(shí)現(xiàn)1.2題目?jī)?nèi)容及要求題目?jī)?nèi)容:任意輸入4個(gè)一位無符號(hào)十進(jìn)制數(shù),它們之間用“+”,“-”,“*”號(hào)任意連接成為一個(gè)簡(jiǎn)單的算術(shù)運(yùn)算式,要求按照算術(shù)運(yùn)算法則計(jì)算得到正確結(jié)果。要求有輸入提示信息,并且當(dāng)輸入算式不符合要求時(shí)能夠輸出提示信息,并要求重新輸入。此過程自動(dòng)重復(fù)進(jìn)行,直到用戶鍵盤輸入“$”符號(hào)時(shí)程序退出。第二章 分析與設(shè)計(jì)2.1題目要求1. 判斷輸入數(shù)字及運(yùn)算符號(hào)正誤,首字符為數(shù)字位,數(shù)字與符號(hào)間隔輸入;如果輸入有錯(cuò)誤則應(yīng)有相應(yīng)錯(cuò)誤提示并可重新輸入;2. 判斷算術(shù)運(yùn)算的優(yōu)先級(jí),及乘法優(yōu)先于
6、加和減法,而加法和減法優(yōu)先級(jí)相同;3. 可在屏幕顯示正確的運(yùn)算結(jié)果;4. 程序可自動(dòng)重復(fù)運(yùn)行,直到輸入“$”終止;5. 要求程序結(jié)構(gòu)設(shè)計(jì)合理;6. 匯編語言語法正確,程序語句使用得當(dāng);7. 適當(dāng)追求匯編語言的編程技巧;8. 適當(dāng)優(yōu)化程序代碼,提高程序運(yùn)行效率。2.2程序功能拓展設(shè)想1. 增加錯(cuò)誤提示功能,如輸入運(yùn)算式超過4位等;2. 正確數(shù)據(jù)回顯功能,即如果用戶輸入錯(cuò)誤則將該次輸入運(yùn)算式前面正確輸入部分重新顯示,用戶只需重新輸入前一步輸入錯(cuò)誤的數(shù)據(jù)或符號(hào);3. 對(duì)程序界面友好及功能完善的其它功能。2.3方案設(shè)計(jì)與論證1. 考慮到錯(cuò)誤輸入情況,如符號(hào)與符號(hào)不能連在一起,數(shù)字不能超過一位,第一位輸
7、入的必須為數(shù)字等,在錯(cuò)誤輸入情況下有提示,并能重新輸入;2. 在進(jìn)行多位數(shù)字的混合運(yùn)算時(shí),乘法的優(yōu)先權(quán)大于加法和減法,必須先找出乘號(hào),然后對(duì)乘號(hào)兩邊的數(shù)進(jìn)行乘法計(jì)算;3. 用“=”判斷數(shù)字是否輸入完畢,定義一個(gè)數(shù)據(jù)存儲(chǔ)區(qū)存儲(chǔ)數(shù)據(jù),能從后向前檢驗(yàn)“*”。當(dāng)沒有“*”時(shí),按照“+、- ”運(yùn)算符的左右順序從左到右進(jìn)行“ +、- ”運(yùn)算,當(dāng)最后遇到等號(hào)“ = ”時(shí)輸出表達(dá)式的數(shù)值,然后再根據(jù)提示判斷是否繼續(xù)執(zhí)行下一個(gè)四則運(yùn)算表達(dá)式;4. 如果用戶已經(jīng)輸入4個(gè)數(shù)字和3個(gè)符號(hào),即運(yùn)算式已經(jīng)輸入完畢,則等待用戶輸入“=”,輸出運(yùn)算結(jié)果;5. 如果用戶輸入錯(cuò)誤,程序應(yīng)該提示輸入錯(cuò)誤信息并能將用戶之前輸入的正確
8、數(shù)據(jù),包括數(shù)字和符號(hào)重新輸出到屏幕,直到用戶輸入正確,而不必因?yàn)橐淮五e(cuò)誤輸入就得重新輸入運(yùn)算式;6. 程序可以自動(dòng)重復(fù)進(jìn)行運(yùn)算,這就要求每次運(yùn)算后置零數(shù)據(jù)存儲(chǔ)區(qū);7. 由于運(yùn)算的結(jié)果位數(shù)不確定,要設(shè)計(jì)一個(gè)能一位位顯示結(jié)果的輸出程序;8. 輸出“=”則自動(dòng)計(jì)算運(yùn)算式并顯示運(yùn)算結(jié)果,輸入“$”符號(hào)則退出程序;2.4程序結(jié)構(gòu)框圖等設(shè)計(jì)開始定義數(shù)據(jù)段定義堆棧段輸出程序提示信息相關(guān)寄存器初始化輸入數(shù)據(jù)“$”?結(jié)束程序“=”?含“*”?進(jìn)行乘法運(yùn)算進(jìn)行順序加減運(yùn)算輸出運(yùn)算結(jié)果輸入合法?保存輸入數(shù)據(jù)輸入完成?輸出錯(cuò)誤提示回顯正確輸入的數(shù)據(jù)ynyynnynny圖1 程序流程圖第三章 匯編程序設(shè)計(jì)3.1代碼結(jié)構(gòu)
9、分析實(shí)現(xiàn)該程序功能的匯編代碼可總體分為四個(gè)部分:用戶鍵盤輸入、數(shù)據(jù)判斷、算術(shù)運(yùn)算、系統(tǒng)屏幕輸出計(jì)算結(jié)果。用戶鍵盤輸入功能實(shí)現(xiàn)可采取調(diào)用1號(hào)系統(tǒng)功能的方法輸入單字符,然后根據(jù)需要決定是否將鍵盤輸入的ascii碼轉(zhuǎn)換為數(shù)字等。判斷輸入是否合法,程序設(shè)計(jì)相應(yīng)的判斷機(jī)制,確保識(shí)別用戶輸入的錯(cuò)誤數(shù)據(jù)并能反饋相應(yīng)出錯(cuò)提示,直到用戶輸入完正確數(shù)據(jù)。算數(shù)運(yùn)算模塊則通過程序判斷運(yùn)算優(yōu)先級(jí),以乘法為最高優(yōu)先級(jí),加法和減法優(yōu)先級(jí)相同。運(yùn)算結(jié)果的顯示功能我們可以再次調(diào)用2號(hào)系統(tǒng)功能輸出單字符,這里需要注意的是:如果運(yùn)算結(jié)果是多位數(shù),如何按順序輸出運(yùn)算結(jié)果的每一位數(shù)。3.2匯編代碼設(shè)計(jì)3.2.1程序初始化程序初始化的部
10、分主要包括數(shù)據(jù)段定義,堆棧段定義以及代碼段開始部分的相關(guān)通用寄存器的初始化等。代碼如下:start: mov ax,datas mov ds,ax disp mesg_w ;顯示歡迎界面begin: lea di,shuju;裝入有效地址 inc di mov ax,0 ;初始化寄存器 mov bx,0 mov cx,0 mov dx,0 disp mesg_i ;顯示輸入提示disp mesg_e3.2.2鍵盤輸入模塊鍵盤輸入模塊主要調(diào)用1號(hào)系統(tǒng)功能,實(shí)現(xiàn)單字符的輸入功能。代碼包括兩個(gè)部分,即數(shù)據(jù)的輸入和符號(hào)的輸入。且數(shù)字和符號(hào)交替輸入,即用戶第一次輸入為數(shù)字,第二次輸入為符號(hào),第三次輸入再
11、次為數(shù)字,如此往復(fù)輸入,直到輸入“$”程序終止,或“=”號(hào)輸出運(yùn)算結(jié)果。遇到用戶已經(jīng)輸入4個(gè)數(shù)字和3個(gè)運(yùn)算符號(hào)的情況則等待直到用戶輸入“=”,然后輸出運(yùn)算結(jié)果。代碼如下:input_number: ;數(shù)據(jù)輸入 mov ah,1 ;1號(hào)系統(tǒng)功能調(diào)用 int 21h cmp al,$ ;用戶是否輸入$ je zz1 ;等于/結(jié)果為0轉(zhuǎn)移 cmp al,30h ;減法比較,和0比較 jb wrong ;低于轉(zhuǎn)移 cmp al,39h ;和9比較 ja wrong ;高于轉(zhuǎn)移 jmp save_n ;用戶輸入合法,保存數(shù)據(jù)input_sign: ;符號(hào)輸入 mov ah,1 ;1號(hào)系統(tǒng)功能調(diào)用 int
12、 21h cmp al,$ ;用戶是否輸入$ je zz1 ; cmp al,3dh ;與等于號(hào)(=)比較 je zz2 ;輸出運(yùn)算結(jié)果 cmp cx,0ah ;用戶已經(jīng)輸入4個(gè)數(shù)據(jù)和3個(gè)符號(hào)ja wrong ;錯(cuò) cmp al,2ch ;去掉逗號(hào) je wrong cmp al,2ah ;乘 jb wrong ;低于轉(zhuǎn)移(ascii表中符號(hào)所在區(qū)域,去掉符號(hào)中間的逗號(hào)) cmp al,2dh ;減 ja wrong ;高于轉(zhuǎn)移 jmp save_s ;用戶輸入合法,保存數(shù)據(jù)3.2.3輸入數(shù)據(jù)判斷包括錯(cuò)誤信息的提示和數(shù)據(jù)的存儲(chǔ)。待輸入數(shù)據(jù)后判斷輸入數(shù)據(jù)是否為“$”,是則退出程序,不是則繼續(xù)判斷
13、是否為“=”,是則轉(zhuǎn)運(yùn)算程序,并顯示運(yùn)算結(jié)果。如果不是則判斷該次輸入是否符號(hào)要求,即在要求輸入數(shù)字的時(shí)候應(yīng)該輸入數(shù)字,在要求輸入符號(hào)的時(shí)候輸入運(yùn)算符號(hào)。用戶輸入合法則保存數(shù)據(jù),并準(zhǔn)備下一個(gè)數(shù)據(jù)輸出,如果用戶輸入不合法則有相關(guān)錯(cuò)誤提示并回顯正確輸入的數(shù)據(jù),讓用戶繼續(xù)上一個(gè)輸入。代碼如下:save_n: ;保存數(shù)字 xor ah,ah ;清零ah mov di,ah inc di sub al,30h ;減30h,將ascii碼值轉(zhuǎn)為運(yùn)算數(shù)據(jù) mov di,al ;將數(shù)據(jù)保存 inc di add cx,2 ;存儲(chǔ)空間+2 jmp input_sign ;轉(zhuǎn)符號(hào)輸入save_s: ;保存符號(hào) mo
14、v di,al ;將符號(hào)保存 inc di inc cx; jmp input_number ;轉(zhuǎn)數(shù)據(jù)輸入zz1: jmp jieshuzz2: jmp outputwrong: disp mesg_r ;顯示出錯(cuò)信息 disp mesg_e push cxout_num: sub di,cx inc dimov dl,di add dl,30h ;轉(zhuǎn)成ascii碼顯示 mov ah,2 ;2號(hào)系統(tǒng)功能調(diào)用 int 21h add di,cx dec di ;di返回原值 sub cx,2 cmp cx,0 je rein_sig sub di,cx mov dl,di mov ah,2 ;2
15、號(hào)系統(tǒng)功能調(diào)用,輸出單字符 int 21h add di,cx ;di返回原值 dec cx cmp cx,0 je rein_num jmp out_numrein_num: pop cx jmp input_numberrein_sig: pop cx jmp input_sign disp mesg_e jmp begin3.2.4算術(shù)運(yùn)算算術(shù)運(yùn)算其中包括乘法優(yōu)先的判斷和加減法的運(yùn)算。先找到乘法運(yùn)算符的位置,將其前后位置的數(shù)相乘,并存在前面數(shù)的位置上。待乘法運(yùn)算完成后,按順序?qū)嵭屑訙p法的運(yùn)算。將乘法運(yùn)算完成后的第一個(gè)數(shù)據(jù)放在result變量中,找到運(yùn)算符的位置,將result變量與運(yùn)算符
16、后一位的數(shù)進(jìn)行運(yùn)算。運(yùn)算過程代碼如下:yunsuan proc near ;運(yùn)算過程yunsuan定義 lea si,shuju ;裝入數(shù)據(jù)有效地址 inc sijudge:sub di,3;mov cl,di cmp cl,2ah ;和*號(hào)比較 je cf ;乘法轉(zhuǎn)移 cmp byte ptrdi,m je p1 jmp judgecf: ;乘法運(yùn)算 xor ax,ax xor bx,bx inc di xchg bh,di ;交換指令 xchg bl,di+1 sub di,2 xchg al,di ;被乘數(shù) xchg ah,di-1 mul bx ;乘數(shù)和積存放 mov di,al mo
17、v di-1,ah inc di ;地址加1 jmp judge ;繼續(xù)判斷p1: mov ah,si mov al,si+1 mov result,axp2: add si,2 mov cl,si cmp cl,2bh ;加法運(yùn)算 je jia cmp cl,2dh ;減法運(yùn)算 je jian inc si cmp si,offset shuju+11 ;等式是否運(yùn)算完 jb p2jia: ;加法 xor ax,ax xor bx,bx mov ax,result inc si xchg bh,si xchg bl,si+1 add ax,bx mov result,ax cmp si,of
18、fset shuju+11 jb p2 jmp eijian: ;減法 xor ax,ax xor bx,bx mov ax,result inc si xchg bh,si xchg bl,si+1 sub ax,bx mov result,ax cmp si,offset shuju+11 jb p2ei: ret ;過程返回yunsuan endp3.2.5運(yùn)算結(jié)果輸出其中包括結(jié)果正負(fù)的判斷和結(jié)果的輸出。調(diào)用yunsuan過程,得到result的值。先將結(jié)果的值和0比較,如果小于0則先輸出負(fù)號(hào)。再將結(jié)果除以1000得到的商作為最高位,判斷是否為0,是0則不輸出。再將余數(shù)除以100,得到次
19、高位,同上輸出。循環(huán)到最后位輸出完結(jié)束。代碼如下:output: call yunsuan cmp result,0 ;和0比較 jge w1 ;大于等于轉(zhuǎn)移至w1 neg result ;求補(bǔ)指令 mov dl,- mov ah,2 ;2號(hào)系統(tǒng)功能調(diào)用,輸出單字符 int 21hw1: mov bx,1000 mov cx,4 mov n,0 xor dx,dxw2: mov ax,result div bx ;將結(jié)果的各位分開 mov result,dx ;將余數(shù)給原來的值 cmp al,0 jne w3 cmp n,0 ;判斷最高位是否為0,是0不輸出 jne w3 cmp cx,1 ;
20、判斷是否循環(huán)完畢 je w3 jmp w4w3: mov dl,al add dl,30h ;將數(shù)字轉(zhuǎn)為ascii碼顯示 mov ah,2 ;2號(hào)系統(tǒng)功能調(diào)用,輸出單字符 int 21h mov n,1w4: mov ax,bx mov dx,0 mov bx,10 ;用于判斷下一位(除10) div bx mov bx,ax loop w2 ;循環(huán)w2開始下一位的輸出 mov result,0 ;清空結(jié)果 jmp begin ;程序返回3.3實(shí)驗(yàn)結(jié)果通過代碼編寫調(diào)試運(yùn)行,可以實(shí)現(xiàn)這次課程設(shè)計(jì)題目要求的程序功能,可以實(shí)現(xiàn)4個(gè)無符號(hào)10進(jìn)制之間用加、減、乘符號(hào)任意連接,按照算術(shù)運(yùn)算法則對(duì)輸入的算
21、式進(jìn)行算式運(yùn)算并輸出正確結(jié)果。且完成了較好的錯(cuò)誤提示及糾正功能,人機(jī)交互友好。程序運(yùn)行結(jié)果如下:圖2 實(shí)驗(yàn)結(jié)果圖第四章 總結(jié)與體會(huì)針對(duì)我們這次的微機(jī)原理課程設(shè)計(jì),雖然我們組所抽到的題目感覺是那種純軟件編程的,因?yàn)闆]有像其他組一樣用到了實(shí)驗(yàn)箱,用到了像8253、8259這些芯片。但是我們組匯編程序編寫的難度并不比他們簡(jiǎn)單,或者可以說更加難一點(diǎn)。在對(duì)四則運(yùn)算程序的設(shè)計(jì)上,剛開始不怎么明白題目的意思。再和老師請(qǐng)教討論后明確了設(shè)計(jì)任務(wù),老師也推薦了幾種可行的設(shè)計(jì)方法。程序設(shè)計(jì)主要包括鍵盤數(shù)據(jù)的輸入,按照運(yùn)算法則進(jìn)行的運(yùn)算程序以及運(yùn)算結(jié)果的輸出。編程的主要難點(diǎn)在于運(yùn)算法則上,即運(yùn)算符號(hào)的優(yōu)先級(jí)判斷上,經(jīng)
22、過和老師的討論我們選擇了查找的方法。通過對(duì)輸入的符號(hào)保存后再對(duì)其判斷,如果含有“*”號(hào),則取出其前一位數(shù)和后一位數(shù)進(jìn)行乘法運(yùn)算,重復(fù)進(jìn)行該過程直到?jīng)]有“*”號(hào)。然后再進(jìn)行簡(jiǎn)單的按順序的加減法運(yùn)算,并輸出正確的運(yùn)算結(jié)果。當(dāng)我們完成基本要求的功能后,我們考慮如何更加完善程序,如處理一些常見的錯(cuò)誤。主要添加了輸入數(shù)據(jù)監(jiān)控,即可以通過監(jiān)控來實(shí)現(xiàn)對(duì)用戶多次輸入合法數(shù)據(jù)但已明顯超出4個(gè)1位10進(jìn)制無符號(hào)數(shù)的限制。如果出現(xiàn)這種情況,將等待用戶輸入“=”來輸出運(yùn)算結(jié)果。我們遇到的一個(gè)很明顯的問題是當(dāng)用戶輸入出錯(cuò)的時(shí)候,只能通過重新輸入數(shù)據(jù)的方法來重新輸入數(shù)據(jù)。所以,在功能完善上我們考慮到了如何通過回顯正確的數(shù)
23、據(jù)來避免用戶的多次重復(fù)輸入數(shù)據(jù)。這樣用戶只需要重新輸入剛才輸錯(cuò)的數(shù)據(jù)就可以了,該功能的完善達(dá)到了較好的人機(jī)友好交互。在匯編程序設(shè)計(jì)階段,我們遇到的一個(gè)當(dāng)時(shí)比較費(fèi)解的問題是總是出現(xiàn)超出范圍的錯(cuò)誤提示信息,無法完成編譯。于是我們仔細(xì)查找錯(cuò)誤,卻怎么也發(fā)現(xiàn)不了錯(cuò)誤。山重水復(fù)不知如何是好的時(shí)候突然想到了匯編語言中程序跳轉(zhuǎn)指令的跳轉(zhuǎn)范圍,困擾著我們的問題找到了,我們程序中使用的跳轉(zhuǎn)指令超出了跳轉(zhuǎn)范圍!于是我們準(zhǔn)備優(yōu)化程序結(jié)構(gòu),但又遇到另一個(gè)嚴(yán)峻的問題,程序結(jié)構(gòu)基本固定,相應(yīng)程序模塊很難移動(dòng)。最好我們只能在中間加了jmp跳轉(zhuǎn)指令實(shí)現(xiàn)程序跳轉(zhuǎn)的“接力”。最后,感謝這次課程設(shè)計(jì)中老師和同學(xué)的相關(guān)建議!參考文獻(xiàn)
24、1朱金鈞. 微型計(jì)算機(jī)原理及應(yīng)用技術(shù)m.機(jī)械工業(yè)出版社,第2版2張雪蘭、譚毓安.匯編語言程序設(shè)計(jì)m.清華大學(xué)出版社附錄程序代碼:datas segment mesg_w db 0ah,0dh, welcome! $ mesg_i db 0ah,0dh,please input:$ mesg_r db 0ah,0dh,please reinput the right data:$ mesg_e db 0ah,0dh, $ shuju db m dw 20 dup(0) result dw ? n db ? datas ends;-stack segmentstt db 10 dup(?)stac
25、k ends;-disp macro str ;宏定義(形參) lea dx,str ;裝入有效地址 mov ah,9 ; 9號(hào)系統(tǒng)功能調(diào)用,輸出字符串,顯示dx寄存器內(nèi)容 int 21hendm;-codes segment assume cs:codes,ds:datas,ss:stack start: mov ax,datas mov ds,ax disp mesg_w ;顯示歡迎界面begin: lea di,shuju ;裝入有效地址 inc di ;di加1 mov ax,0 ;初始化寄存器 mov bx,0 mov cx,0 mov dx,0 disp mesg_i ;顯示輸入提
26、示disp mesg_einput_number: ;數(shù)據(jù)輸入 mov ah,1 ;1號(hào)系統(tǒng)功能調(diào)用,鍵盤輸入單字符int 21h cmp al,$ ;用戶是否輸入$ je zz1 ;等于/結(jié)果為0轉(zhuǎn)移 cmp al,30h ;減法比較,和0比較 jb wrong ;低于轉(zhuǎn)移 cmp al,39h ;和9比較 ja wrong ;高于轉(zhuǎn)移 jmp save_n ;用戶輸入合法,保存數(shù)據(jù)input_sign: ;符號(hào)輸入 ;inc cx; mov ah,1 ;1號(hào)系統(tǒng)功能調(diào)用,鍵盤輸入單字符 int 21h cmp al,$ ;用戶是否輸入$ je zz1 ; cmp al,3dh ;與等于號(hào)(
27、=)比較 je zz2 ;輸出運(yùn)算結(jié)果cmp cx,0ah ;用戶已經(jīng)輸入4個(gè)數(shù)據(jù)和3個(gè)符號(hào)ja wrong ;錯(cuò) cmp al,2ch ;去掉逗號(hào) je wrong cmp al,2ah ;乘 jb wrong ;低于轉(zhuǎn)移(ascii表中符號(hào)所在區(qū)域,去掉符號(hào)中間的逗號(hào)) cmp al,2dh ;減 ja wrong ;高于轉(zhuǎn)移 jmp save_s ;用戶輸入合法,保存數(shù)據(jù)save_n: ;保存數(shù)字 xor ah,ah ;清零ah mov di,ah inc di sub al,30h ;減30h,將ascii碼值轉(zhuǎn)為運(yùn)算數(shù)據(jù) mov di,al ;將數(shù)據(jù)保存inc diadd cx,2
28、;存儲(chǔ)空間+2 jmp input_sign ;轉(zhuǎn)符號(hào)輸入save_s: ;保存符號(hào) mov di,al ;將符號(hào)保存 inc di inc cx; jmp input_number ;轉(zhuǎn)數(shù)據(jù)輸入zz1: jmp jieshuzz2: jmp outputwrong: disp mesg_r ;顯示出錯(cuò)信息disp mesg_e push cxout_num: sub di,cx inc dimov dl,diadd dl,30h ;轉(zhuǎn)成ascii碼顯示mov ah,2 ;2號(hào)系統(tǒng)功能調(diào)用,輸出單字符,入口參數(shù):dl=要顯示字符的ascii碼 int 21hadd di,cxdec di ;d
29、i返回原值 sub cx,2cmp cx,0 je rein_sigsub di,cxmov dl,dimov ah,2 ;2號(hào)系統(tǒng)功能調(diào)用,輸出單字符,入口參數(shù):dl=要顯示字符的ascii碼 int 21hadd di,cx ;di返回原值dec cxcmp cx,0 je rein_numjmp out_numrein_num: pop cx jmp input_numberrein_sig: pop cx jmp input_signdisp mesg_ejmp begin;-yunsuan proc near ;運(yùn)算過程yunsuan定義 lea si,shuju ;裝入數(shù)據(jù)有效地址
30、 inc sijudge:sub di,3; mov cl,di cmp cl,2ah ;和*號(hào)比較 je cf ;乘法轉(zhuǎn)移 cmp byte ptrdi,m je p1 jmp judgecf: ;乘法運(yùn)算 xor ax,ax xor bx,bx inc di xchg bh,di ;交換指令 xchg bl,di+1 sub di,2 xchg al,di ;被乘數(shù) xchg ah,di-1 mul bx ;乘數(shù)和積存放 mov di,al mov di-1,ahinc di jmp judgep1: mov ah,si mov al,si+1 mov result,axp2: add si,2 mov cl,si cmp cl,2bh ;加法運(yùn)算 je jia cmp cl,2dh ;減法運(yùn)算 je jian inc si cmp si,offset shuju+11 ;等式是否運(yùn)算完 jb p2jia: xor ax,ax xo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年甲醇汽油市場(chǎng)調(diào)研報(bào)告
- 2020-2025年中國舒肝丸行業(yè)投資潛力分析及行業(yè)發(fā)展趨勢(shì)報(bào)告
- 2025年洗車機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年中國石材養(yǎng)護(hù)行業(yè)市場(chǎng)前景預(yù)測(cè)與投資戰(zhàn)略規(guī)劃分析報(bào)告
- 2024-2025年中國圖片編輯軟件行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報(bào)告
- 2025年開采磁石行業(yè)深度研究分析報(bào)告
- 2021-2026年中國13價(jià)肺炎球菌疫苗市場(chǎng)全面調(diào)研及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 2022-2027年中國山泉水行業(yè)市場(chǎng)深度分析及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 2025年中國純棉內(nèi)衣行業(yè)市場(chǎng)全景評(píng)估及發(fā)展戰(zhàn)略研究報(bào)告
- 2025-2031年中國路橋工程行業(yè)發(fā)展前景預(yù)測(cè)及投資方向研究報(bào)告
- 物業(yè)民法典知識(shí)培訓(xùn)課件
- 2023年初中畢業(yè)生信息技術(shù)中考知識(shí)點(diǎn)詳解
- 2024-2025學(xué)年山東省德州市高中五校高二上學(xué)期期中考試地理試題(解析版)
- 《萬方數(shù)據(jù)資源介紹》課件
- 麻風(fēng)病病情分析
- 《急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)》
- 第一章-地震工程學(xué)概論
- JJF(陜) 063-2021 漆膜沖擊器校準(zhǔn)規(guī)范
- 《中國糖尿病防治指南(2024版)》更新要點(diǎn)解讀
- TSGD7002-2023-壓力管道元件型式試驗(yàn)規(guī)則
- 2024年度家庭醫(yī)生簽約服務(wù)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論