《微型計算機原理及應(yīng)用》課程設(shè)計簡易計算器的設(shè)計1_第1頁
《微型計算機原理及應(yīng)用》課程設(shè)計簡易計算器的設(shè)計1_第2頁
《微型計算機原理及應(yīng)用》課程設(shè)計簡易計算器的設(shè)計1_第3頁
《微型計算機原理及應(yīng)用》課程設(shè)計簡易計算器的設(shè)計1_第4頁
《微型計算機原理及應(yīng)用》課程設(shè)計簡易計算器的設(shè)計1_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 微型計算機原理及應(yīng)用微型計算機原理及應(yīng)用課程設(shè)計課程設(shè)計 簡易計算器的設(shè)計 姓名陳* 院系信息學院自動化系 班級* 學號200911* 時間2011 年 12 月 29 日 目 錄 目目 錄錄 摘要 .i introduction. 1課程設(shè)計目的與任務(wù).1 1.1設(shè)計目的.1 1.2設(shè)計任務(wù).1 2基本要求.1 3簡易計算器的設(shè)計.0 3.1程序設(shè)計流程圖.0 3.2程序基本算法.1 3.3程序源代碼.1 3.4程序調(diào)試.8 4課程設(shè)計總結(jié)與心得.11 參考文獻.12 摘要 i 摘要 本次課程設(shè)計是通過使用 emu8086 匯編語言編程軟件實現(xiàn)較復(fù)雜程序的設(shè)計。該 課程設(shè)計的內(nèi)容為采用匯編

2、語言設(shè)計一個簡易計算器,界面顯示要求用鍵盤分別輸入 兩個隨機數(shù),完成加法,減法,乘法和除法的運算,然后將運算結(jié)果顯示出來。該設(shè) 計只能運行簡單正整數(shù)間的單步加減乘除運算,不能識別小數(shù)。除法中的結(jié)果可以精 確到 3 位小數(shù),減法可以顯示負數(shù)的結(jié)果。采用 dos 調(diào)用(int 21h)來完成輸入和輸 出,輸出字符串操作。通過這次設(shè)計實踐能夠進一步加深對專業(yè)知識和理論知識學習 的認識和理解,使自己的設(shè)計水平和對所學的知識的應(yīng)用能力以及分析問題解決問題 的能力得到全面提高。 關(guān)鍵詞:微機原理;計算器;匯編 abstract ii introduction this course is designed

3、 to through the use of emu8086 assembly language programming software to realize complex program design. the content of the course design for the assembly language design a simple calculator, interface display with the keyboard input requirements are two random number, complete the addition, subtrac

4、tion, multiplication, and division of the operation, and then will operation result shows it. this design can only easy operation between the positive integer single step add, subtract, multiply and divide operation, cant identify decimal. the result in the division accurate to 3 decimal places, sub

5、traction can display the negative results. using dos call (int 21 h) to complete the input and output, the output string operation. this design practice can further deepen the theoretical knowledge of professional knowledge and learning the understanding and the understanding, make oneself of the de

6、sign level of knowledge and the application ability and the ability to analyse and solve questions fully improve. keywords: microcomputer principle;calculator;assembly language 廣東海洋大學微型計算機原理及原理課程設(shè)計 1 簡易計算器的設(shè)計 自動*,200911*,陳* 1課程設(shè)計目的與任務(wù) 1.1設(shè)計目的 為了使學生加深對所學的微機原理知識的理解,培養(yǎng)學生的專業(yè)素質(zhì),提高其利 用微機原理知識處理問題的能力,為今后專業(yè)課

7、程的學習、畢業(yè)設(shè)計和工作打下良好 的基礎(chǔ)。使學生能比較扎實地掌握微機原理的基礎(chǔ)知識和基本理論,掌握控制系統(tǒng)及 有關(guān)設(shè)備的分析、開發(fā)等基本技能,受到必要工程訓練、初步的科學研究方法訓練和 實踐鍛練,增強分析問題和解決問題的能力,了解微機原理和接口技術(shù)的新發(fā)展。 1.2設(shè)計任務(wù) 本次課程設(shè)計有四個任務(wù)可供選擇,這里選擇設(shè)計一個簡易計算器,要求能正確完成 加、減、乘、除四則運算。 2基本要求 本次課程設(shè)計,1 人 1 題,可以相互討論,但設(shè)計報告由學生獨立完成,不得互 相抄襲。教師的主導作用主要在于指明設(shè)計思路,啟發(fā)學生獨立設(shè)計的思路,解答疑 難問題和按設(shè)計進度進行階段審查。學生必須發(fā)揮自身學習的主

8、動性和能動性,主動 思考問題、分析問題和解決問題,而不應(yīng)處處被動地依賴指導老師。同學應(yīng)積極主動 的提出問題、解決問題、討論問題,互相幫助和啟發(fā)。 學生在設(shè)計中可以引用所需的參考資料,避免重復(fù)工作,加快設(shè)計進程,但必須 和題目的要求相符合,保證設(shè)計的正確。指導教師要引導學生學會掌握和使用各種已 有的技術(shù)資料,不能盲目地、機械地抄襲資料,必須具體分析,使設(shè)計質(zhì)量和設(shè)計能 力都獲得提高。學生要在老師的指導下制定好自己各環(huán)節(jié)的詳細設(shè)計進程計劃,按給 定的時間計劃保質(zhì)保量的完成個階段的設(shè)計任務(wù)。設(shè)計中可邊設(shè)計,邊修改,軟件設(shè) 計與硬件設(shè)計可交替進行,問題答疑與調(diào)試和方案修改相結(jié)合,提高設(shè)計的效率,保 證

9、按時完成設(shè)計工作并交出合格的設(shè)計報告。 廣東海洋大學微型計算機原理及原理課程設(shè)計 2 3簡易計算器的設(shè)計 設(shè)計一個簡易計算器過程包括:確定功能,畫流程圖,確定算法,編寫程序,程 序調(diào)試。 設(shè)計工具:個人電腦,emu8086。設(shè)計語言:8086 匯編語言 3.1程序設(shè)計流程圖 圖 1 1/2? 輸入單字符 開始 2:第一次輸入字符串 09/e? 09 轉(zhuǎn)換與暫存 第二次輸入字符串 09/e? 09 轉(zhuǎn)換與暫存 輸入運算符 +-*/e? 相應(yīng)運算 轉(zhuǎn)換與輸出 1:輸入字符串 az? az 轉(zhuǎn)換與輸出 e 退出 都不是 都不是 都不是 都不是 n n n 廣東海洋大學微型計算機原理及原理課程設(shè)計 3

10、 流程圖介紹: 進入 dos 界面,首先顯示出計算器功能介紹和個人信息,然后界面輸出操提示要 求用戶輸入 1 或者 2 選擇功能,1 表示字母轉(zhuǎn)換功能,2 表示計算功能。 字母轉(zhuǎn)換功能,只能從小寫向大寫轉(zhuǎn)換,當用戶輸入字母時,先判斷是否為小寫 字母,不是則重新進入功能選擇界面,是就開始轉(zhuǎn)換并且顯示在界面大寫。 計算功能,提示輸入第一個數(shù),先判斷是否符合要求的數(shù),符合的話再把輸入的 數(shù)據(jù)先從十六進制的 ascii 碼轉(zhuǎn)換成相應(yīng)的十進制,再轉(zhuǎn)換成有實際意義的十六進制 進制,將該十六進制數(shù)存入一個緩沖器單元,對于不符合要求的數(shù)就返回重新輸入第 一個數(shù)據(jù)。輸入完第一個數(shù)后,界面再要求操用戶輸進第二個數(shù)

11、,同樣的方法判斷再 進行轉(zhuǎn)換數(shù)制,在存到緩沖期的下一個單元。這里轉(zhuǎn)換的方法是采用“乘 10 加次位” 的方法。接下來界面再提示用戶輸入“+,-,*,/”其中一個運算符,然后程序進行 比較輸入的運算符,然后跳到相應(yīng)的代碼段執(zhí)行相應(yīng)的運算,如果輸入的字符不是運 算符就重新輸入運算符。其中,減法運算中,首先比較被減數(shù)與減數(shù)的大小,如果減 數(shù)大于被減數(shù)則結(jié)果會是負數(shù),所以,首先顯示出“-”號,再將被減數(shù)與減數(shù)換位, 進行減法運算。當完成運算后,因為結(jié)果是十六進制的,所以要進行轉(zhuǎn)換數(shù)制,采用 “除 10 取余倒排列”的方法,最后,就將結(jié)果逐位輸出顯示。 3.2程序基本算法 本次計算器計算功能的設(shè)計,關(guān)鍵

12、在于數(shù)制的轉(zhuǎn)換。用戶輸入的是字符串,而在 以每個字符的十六進制的 ascii 碼存放,為了把字符串轉(zhuǎn)換成有實際數(shù)學意思的十六 進制數(shù),就要首先把 ascii 碼先轉(zhuǎn)換成十進制,再把十進制數(shù)轉(zhuǎn)成可以運算的十六進 制。例如輸入 112,系統(tǒng)存放的是 31h、31h、32h,通過減去 30h,即可轉(zhuǎn)成 1、1、2 存放,再把三個數(shù) 1、1、2“乘以 10 加次位”的方法:(1*10+1)*10+2=112 ,把 112 也就是 70h 這個結(jié)果放到寄存器里,即可轉(zhuǎn)換成功。只有這樣的數(shù)才可以利用匯 編指令進行正確運算。運算完之后采用“除 10 取余倒排序”的方法,把結(jié)果逐位轉(zhuǎn)換, 再加上 30h,即可

13、顯示。 字母轉(zhuǎn)換部分,實現(xiàn)小寫向大寫轉(zhuǎn)換,只要把相應(yīng)的 ascii 碼進行運算就可以,利用這個方 法可以實現(xiàn)大小寫互換,這里只是簡單嘗試寫出小寫向大寫轉(zhuǎn)換。例如,a 轉(zhuǎn)換成 a,a 的 ascii 碼是 41h,而 a 的是 61h,要實現(xiàn) a 向 a 轉(zhuǎn)換,61h 減去 20h 就可以了。要實現(xiàn) a 向 a 轉(zhuǎn)換, 對應(yīng) ascii 碼加上 20h 即可。 3.3程序源代碼 ;- - ; *數(shù)據(jù)段* ;- - data segment ;-計算器功能信息字符串定義- - 廣東海洋大學微型計算機原理及原理課程設(shè)計 2 str1 db 0ah,0dh,* *$ str2 db 0ah,0dh,

14、a simple calculator $ str3 db 0ah,0dh, function :$ str4 db 0ah,0dh, 1.letter conversion$ str5 db 0ah,0dh, 2.four operations$ str6 db 0ah,0dh,$ str7 db 0ah,0dh,0ah,0dh, design by cheukkin chan$ str8 db 0ah,0dh,* *$ ;-提示字符串變量定義- str13 db 0dh,0ah,please choose the function:$ array6 dw 2 dup(0) ;保留 2 個字

15、空 間作暫存數(shù)據(jù)計算 result1 db 30 dup(0),$ ;保留 30 個字 節(jié)存結(jié)果數(shù) result2 db 30 dup(0)$ ;-字母轉(zhuǎn)換部分- str9 db 0dh,0ah,0dh,0ah,letters conversion $ str10 db 0dh,0ah,please input the codes:$ str11 db 0dh,0ah,after conversion: $ ;-四則運算部分- buff db 28 ;允許輸入的最多字符數(shù) db 0 ;實際輸入的字符數(shù) db 28 dup(0) ;保存實際輸入的字符 array1 db 0dh,0ah,0dh,

16、0ah,please enter a number: $;輸入第一個數(shù)字符串說明 array2 db 0dh,0ah,please enter another number: $;輸入第二個數(shù)字符串說明 array3 db 0dh,0ah,the result is : $;輸出結(jié)果字符串說明 array4 db 0dh,0ah,the number is wrong,please input again : $;輸入錯誤提示字符串說明 string db 0dh,0ah,please enter the operation(+,-,*,/) : $ ;運算字符串說明 array dw 2 d

17、up(0) ;保留 2 個字 空間作暫存數(shù)據(jù)計算 result db 6 dup(0),$ ;保留 6 個字節(jié)存 結(jié)果數(shù) crlf db 0dh,0ah,$ ;顯示結(jié)果時回 車,轉(zhuǎn)行說明 yushu dw 4 dup(0) data ends ;- - ; *代碼段* ;- - code segment assume cs:code,ds:data ;段寄存器 說明偽指令 start:mov ax, data mov ds,ax ;往 ds 段寄存 器送數(shù)據(jù)段基址 ;-輸出計算器的功能相關(guān)信息(調(diào)用 9 號功能輸 出字符串)- mov dx,offset str1 mov ah,9 int 2

18、1h mov dx,offset str2 mov ah,9 int 21h mov dx,offset str3 mov ah,9 int 21h mov dx,offset str4 mov ah,9 int 21h mov dx,offset str5 mov ah,9 int 21h mov dx,offset str6 mov ah,9 int 21h mov dx,offset str7 mov ah,9 int 21h mov dx,offset str8 mov ah,9 int 21h ;- mov dx,offset crlf mov ah,9 int 21h ;輸出回車換

19、行 廣東海洋大學微型計算機原理及原理課程設(shè)計 3 ;- - ;*功能選擇* ;- - stac: mov dx,offset str13 ;取 str13 偏 移地址送進 dx mov ah,9 int 21h mov ah,01h int 21h ;鍵盤輸入單字符 cmp al,e ;比較輸入運算符是否為e jz last ;輸入運算符為e,則跳到 last 處,若不是則繼續(xù)往下執(zhí)行 cmp al,31h jz lc ;如果輸入為 1,就跳到 lc cmp al,32h jz input1 ;如果輸入為 3,就跳到 input1 mov dx,offset crlf ;1、2 都不是,則回

20、車換行 mov ah,9 int 21h jmp stac ;跳回 stac,重新選擇 功能 ;- - ;*字母轉(zhuǎn)換* ;- - lc: mov dx,offset str9 mov ah,9 int 21h mov dx,offset str10 mov ah,9 int 21h mov dx,offset buff ;把緩沖區(qū) buff 的偏移地址送到 dx mov ah,0ah int 21h mov bx,offset buff push bx xor cx,cx mov cl,bx+1 a1: mov al,bx+2 cmp al,61h ;比較輸入 jb lc ;小于 61h 跳轉(zhuǎn)

21、 cmp al,7ah ja lc ;大于 7ah 跳轉(zhuǎn) inc bx loop a1 pop bx call lcc jmp stac ;- - ;*四則運算* ;- - ;*輸入第一個數(shù)* ;- - ;-調(diào)用 09 號輸出字符串功能,輸出 dx 內(nèi)容即 array1 內(nèi)容 - input1: mov dx,offset array1 ;取 array1 偏移地址送進 dx mov ah,9 int 21h ;-調(diào)用 0a 號輸入字符串功能,輸入內(nèi)容暫存在 buff 緩沖區(qū)- again1:mov dx,offset buff ;把緩沖區(qū) buff 的偏移地址送到 dx mov ah,0ah

22、 int 21h ;-判斷輸入的是否符合要求- push ax push bx push cx xor cx,cx mov bx,offset buff mov cl,bx+1 ;把輸入的字符數(shù)給 cx aa: mov al,bx+2 cmp al,e ;比較輸入運算符是否為e jz last ;輸入運算符為e,則跳到 last 處,若不是則繼續(xù)往下執(zhí)行 cmp al,30h jb error1 ; ax 低于 30h 就跳到 error1 cmp al,39h ja error1 ;ax 高于 39h 就跳到 廣東海洋大學微型計算機原理及原理課程設(shè)計 4 error1 inc bx loop

23、 aa pop cx pop bx pop ax jmp cc1 ;-提示輸入錯誤,重新輸入- error1: mov dx,offset array4 mov ah,9 int 21h jmp again1 ;- cc1: call asc_hex ;調(diào)用 asc_hex 子程序 mov array,ax ;將第一個數(shù) 存到暫存區(qū) array ;- - ;*輸入第二個數(shù)* ;- - mov dx,offset array2 mov ah,9 int 21h again2:mov dx,offset buff mov ah,0ah int 21h ;-判斷輸入的是否符合要求- push ax

24、push bx push cx xor cx,cx mov bx,offset buff mov cl,bx+1 ;把輸入的字符數(shù)給 cx bb: mov al,bx+2 cmp al,e ;比較輸入運算符是否為e jz last ;輸入運算符為e,則跳到 last 處,若不是則繼續(xù)往下執(zhí)行 cmp al,30h jb error2 ; ax 低于 30h 就跳到 error2 cmp al,39h ja error2 ;ax 高于 39h 就跳到 error2 inc bx loop bb pop cx pop bx pop ax jmp cc2 ;-提示輸入錯誤,重新輸入- error2:

25、 mov dx,offset array4 mov ah,9 int 21h jmp again2 ;- cc2: call asc_hex mov array+2,ax ;- - ;*輸入運算符* ;- - input3:mov ah,09h mov dx,offset string int 21h ;調(diào)用 01 號輸入單字符功能,記運算符 mov ah,01 ;鍵盤輸入單字符(運算符+-*/) int 21h ;-比較輸入的運算符- cmp al,+ ;比較輸入運算符是否為+ jz add1 ;輸入運算符為+,則跳到 add1 處,若不是則繼續(xù)往下執(zhí)行 cmp al,- ;比較輸入運算符是

26、否為- jz sub2 ;輸入運算符為-,則跳到 sub2 處,若不是則繼續(xù)往下執(zhí)行 cmp al,* ;比較輸入運算符是否為* jz mul3 ;輸入運算符為*,則跳到 mul3 處,若不是則繼續(xù)往下執(zhí)行 cmp al,/ ;比較輸入運算符是否為/ jz div4 ;輸入運算符為/,則跳到 div4 處,若不是則繼續(xù)往下執(zhí)行 cmp al,e ;比較輸入運算符是否為e jz last ;輸入運算符為e,則跳到 last 處,若不是則繼續(xù)往下執(zhí)行 jmp input3 ;如果輸入運算不是以上,則 從新返回到 input3 處 ;- ;* 加法運算* 廣東海洋大學微型計算機原理及原理課程設(shè)計 5

27、 ;- add1: ;-回車,換行顯示- push ax mov dx,offset array3 ;取 array3 偏移地址送進 dx mov ah,9 int 21h pop ax mov ax,array mov bx,array+2 add ax,bx call hex_asc ;調(diào)用 hex_asc 子程 序 mov dx,offset crlf mov ah,9 int 21h ;輸出回車換行 jmp stac ;- ;* 減法運算* ;- sub2: ;-回車,換行顯示- push ax mov dx,offset array3 ;取 array3 偏移地址送進 dx mov

28、ah,9 int 21h pop ax mov ax,array mov bx,array+2 cmp ax,bx jb kk ;比較 ax 與 bx 的大小, 如果 ax 低于 bx,則跳到 kk sub ax,bx ;如果 ax 大于或者等于, 則 ax 減 bx call hex_asc mov dx,offset crlf mov ah,9 int 21h ;輸出回車換行 jmp stac ;-負數(shù)處理- kk: sub bx,ax mov ax,bx call hex_asc1 mov dx,offset crlf mov ah,9 int 21h ;輸出回車換行 jmp stac

29、;- ;* 乘法運算* ;- mul3: ;-回車,換行顯示- push ax mov dx,offset array3 ;取 array3 偏移地址送進 dx mov ah,9 int 21h pop ax mov ax,array mov bx,array+2 mul bx call hex_asc mov dx,offset crlf mov ah,9 int 21h jmp stac ;- ;* 除法運算* ;- div4: ;-回車,換行顯示- push ax mov dx,offset array3 ;取 array3 偏移地址送進 dx mov ah,9 int 21h pop

30、ax mov cx,4 mov ax,array div5: mov bx,array+2 mov dx,0 div bx push dx ;保護余數(shù) push cx call hex_asc pop cx pop dx ;釋放余數(shù) mov yushu,dx cmp cx,4 jnz ys2 ;cx 不等于 2 就跳轉(zhuǎn)到 ys2 mov dl,2eh mov ah,2 ; 輸出小數(shù)點 廣東海洋大學微型計算機原理及原理課程設(shè)計 6 int 21h ys2: mov ax,yushu mov bx,10 mul bx ;取余數(shù)乘以 10 繼續(xù)計算, 把結(jié)果放到 ax loop div5 mov d

31、x,offset crlf mov ah,9 int 21h jmp stac ;-返回操作系統(tǒng)- last: mov ah,4ch int 21h ;- ;* asc_hex 子程序(把 ascii 碼轉(zhuǎn)換成對應(yīng)的十六進 制數(shù)) ;- asc_hex proc xor cx,cx ;清空 cx,cx=0 mov cl,buff1 ;存入字符數(shù) jcxz abcd ;如果 cx=0,即輸 入字符數(shù)為 0,跳到 abcd 處,返回主程序 push cx ; 保護 cx,把 cx 的值放入棧區(qū) mov bx,offset buff+2 ;取首字符地址 push bx ; 保護 bx,把 bx 的值

32、(首字符地址)放入棧區(qū) l0: sub bx,30h ;輸入字符即十六進 制的 ascii 碼轉(zhuǎn)換成相對應(yīng)的十進制碼(09) ,以 bx 作為指針 inc bx loop l0 pop bx ;釋放原來棧區(qū)的 bx 的值(首字符地址) mov ax,0 mov ch,0 mov cl,bx-1 ; 取字符數(shù) l1: mov dx,10 ;十進制轉(zhuǎn)換成二進 制 ,以 10 為基數(shù) mul dx add al,byte ptr bx ; inc bx loop l1 pop cx abcd: ret ;返回主程序 asc_hex endp ;- - ; * hex_asc 子程序(十六進制 轉(zhuǎn)換成

33、相應(yīng)的 ascii 碼)* ;- - hex_asc proc mov si,offset result ;將 result 暫存 結(jié)果的單元偏移地址送到 si 寄存器中 add si,4 ;將源變址指針指到 最后一個單元 mov si+1,$ ;預(yù)先放結(jié)束碼,用來 后面調(diào)用 09 號輸出功能的停止 mov cx,5 ;循環(huán)次數(shù),最多不 超過 5 位十進制數(shù),因為 16 位二進制數(shù)即 4 位 16 進制 數(shù)不超過 65535 ha1: mov dx,0 ;dx 用來放余數(shù)的, 所以每次都要清零 mov bx,10 ;以 10 為基數(shù) div bx ;二進制轉(zhuǎn)換成十進 制,除 10 取余法 ad

34、d dl,30h ;十進制轉(zhuǎn)換成十六 進制的 ascii 碼 mov si,dl ;保存當前位結(jié)果, (先個位、再十位、后百位、 、 、倒序?。?dec si ;指向前一位 loop ha1 mov cx,4 ;循環(huán)次數(shù)為 4 次, 對應(yīng)上面的 si 所設(shè)的單元數(shù) ha2: inc si mov al,si cmp al,30h ;判斷是否為 0,若 是,則繼續(xù)循環(huán)。 jnz notzearo ;若不是則跳到 nozearo,顯示出該字符 loop ha2 inc si notzearo: ;-09 號輸出字符串功能調(diào)用,顯示出內(nèi)容- - mov dx,si mov ah,9 int 21h

35、ret 廣東海洋大學微型計算機原理及原理課程設(shè)計 7 hex_asc endp ;- - ; *減法負數(shù)情況的 hex_asc1 子程 序(十六進制轉(zhuǎn)換成相應(yīng)的 ascii 碼)* ;- - hex_asc1 proc mov si,offset result ;將 result 暫存結(jié) 果的單元偏移地址送到 si 寄存器中 add si,4 ;將源變址指針指到最 后一個單元 mov si+1,$ ;預(yù)先放結(jié)束碼,用來后 面調(diào)用 09 號輸出功能的停止 mov cx,5 ;循環(huán)次數(shù),最多不 超過 5 位十進制數(shù),因為 16 位二進制數(shù)即 4 位 16 進制 數(shù)不超過 65535 ab1: mo

36、v dx,0 ;dx 用來放余數(shù)的, 所以每次都要清零 mov bx,10 ;以 10 為基數(shù) div bx ;二進制轉(zhuǎn)換成十進 制,除 10 取余法 add dl,30h ;十進制轉(zhuǎn)換成十六 進制的 ascii 碼 mov si,dl ;保存當前位結(jié)果, (先個位、再十位、后百位) dec si ;指向前一位 loop ab1 mov cx,4 ;循環(huán)次數(shù)為 4 次, 對應(yīng)上面的 si 所設(shè)的單元數(shù) ab2: inc si mov al,si cmp al,30h ;判斷是否為 0,若 是,則繼續(xù)循環(huán)。 jnz notzearo1 ;若不是則跳到 nozearo1,顯示出該字符 loop a

37、b2 inc si notzearo1: ;- push ax mov ah,02h mov dl,- ;預(yù)先輸出一個-號,表示結(jié)果 為負數(shù) int 21h pop ax ;- mov dx,si mov ah,9 int 21h ret hex_asc1 endp ;- ;-lcc 子程序- ;- lcc proc xor cx,cx mov cl,bx+1 push bx push cx lcc1:mov al,bx+2 sub al,20h mov bx+2,al inc bx loop lcc1 mov bx+2,$ mov dx,offset str11 mov ah,9 int 2

38、1h pop cx pop bx add bx,2 mov dx,bx mov ah,9 int 21h mov dx,offset crlf mov ah,9 int 21h mov dx,offset crlf mov ah,9 int 21h ret lcc endp code ends end start 廣東海洋大學微型計算機原理及應(yīng)用課程設(shè)計 8 3.4程序調(diào)試 功能選擇界面: 圖 2 圖 3 如圖 2 所示,運行程序,首先顯示計算器的相關(guān)信息,主要利用系統(tǒng)功能調(diào)用實現(xiàn)。然后是輸 出提示要求用戶通過輸入 1 或者 2 選擇功能。 字母轉(zhuǎn)換功能 功能 1 可以實現(xiàn)小寫字母向大寫字母的

39、轉(zhuǎn)換,當用戶輸入 1 會進入圖 3 界面。提示用戶輸入字母, 注意要是小寫,如果輸入不是小寫則會提示重新輸入如圖 4 所示。輸入正確的小寫字母自動轉(zhuǎn)換并 且返回功能選擇。 圖 4(上) 圖 6(下) 圖 5(上) 圖 7(下) 廣東海洋大學微型計算機原理及應(yīng)用課程設(shè)計 9 加法運算功能 如圖 6 所示,任意輸入兩個正整數(shù)相加,結(jié)果正確。先輸入第一個數(shù),然后再輸入第二個數(shù), 接著輸入運算符,這樣程序就會自動輸出結(jié)果。注意運算兩數(shù)相加的兩個數(shù)不能超過五位數(shù),并且 結(jié)果不能超過 65535 。 減法運算功能 如圖 7 所示,操作方法和加法相同。雖然不可以進行負數(shù)間的運算,但是可以輸出負數(shù),如圖 8

40、所示。 圖 8 圖 9 乘法運算功能 如圖 9 所示,操作方法和加法相同。 除法運算功能 廣東海洋大學微型計算機原理及應(yīng)用課程設(shè)計 10 如圖 10 所示,操作方法和加法相同。除法輸出結(jié)果精確到 3 位小數(shù),但是不會四舍五入,而 是直接舍去后面剩下的小數(shù)。如圖 11 所示。 圖 10 圖 11 輸入錯誤提示功能 以下述說的前提是:輸入的字符非大寫 e。 在功能選擇的時候,選擇錯誤即輸入的既不是 1 也不是 2,則會提示重新選擇,如圖 12 所示。 在字母轉(zhuǎn)換的時候,輸入字母非小寫字母,也會提示重新輸入,如圖 5 所示。 在運算的時候,第一個和第二個輸入的必須是數(shù)字,輸入的運算符號必須是+、-、

41、*、/ 其中之 一,否則都會提示錯誤重新輸入。如圖 13、圖 14 所示。運算時中間有輸入錯誤的字符,會提示重 新輸入,直到輸入正確為止,才繼續(xù)進行運算,如圖 15 所示。 圖 12 圖 13 廣東海洋大學微型計算機原理及應(yīng)用課程設(shè)計 11 圖 14 圖 15 退出功能 本程序設(shè)置了退出功能。當用戶輸入大寫字母 e 的時候就會退出程序。但是在進行小寫字母向 小寫字母轉(zhuǎn)換的時候,不能這種方式退出。其他輸入 e 即可退出。如圖 16 所示。 圖 16 4課程設(shè)計總結(jié)與心得 本次課程設(shè)計自由選擇設(shè)計課題的,我選擇了簡易加減法計算器的題目,看起來 不是很難,但是真正做起來才發(fā)現(xiàn)其困難之處。 其實老師也

42、說過這個題目相對于其他題目比較難的。因為這次設(shè)計不僅僅是課本 上知識的整合,而且還有很多是課外的擴展。這次課程設(shè)計可以說是一個挑戰(zhàn)。我做 的題目是簡易計算器的設(shè)計。剛開始思路還是挺清晰的,經(jīng)過思考,發(fā)現(xiàn)計算器中數(shù) 制的轉(zhuǎn)換是這個設(shè)計的難點和重點,但是思考數(shù)制轉(zhuǎn)換的算法的時候很快就碰壁了, 因為通過系統(tǒng)功能調(diào)用輸入的字符是以 ascii 碼存放的,并不是有本來實際數(shù)學意義 的。首先,我解決了輸入后的轉(zhuǎn)換,這里使用“乘 10 加次位”的方法,最初想使用普 通的數(shù)制轉(zhuǎn)換,結(jié)果覺得很難實現(xiàn)。在完成運算完后再轉(zhuǎn)換輸出模塊的時候,我開始 查看課本和有關(guān)的資料,知道了一些編程常用的方法。受益匪淺。而后我用心

43、編寫這 程序。經(jīng)過自己的努力和同學的幫助終于完成了相應(yīng)的要求。 在程序完成基本的要求后,我嘗試做另外一個題目:代碼轉(zhuǎn)換。原計劃是:首先 單獨完成代碼轉(zhuǎn)換這一程序,可以實現(xiàn)小寫字母向大寫字母的轉(zhuǎn)換,還可以實現(xiàn)十進 制數(shù)向二進制數(shù)的轉(zhuǎn)換;然后再把計算器和代碼轉(zhuǎn)換結(jié)合起來,做成多功能計算器。 可是真正實現(xiàn)起來遇到一個問題,就是在十進制向二進制轉(zhuǎn)換的時候,是通過調(diào)用子 程序轉(zhuǎn)換的,轉(zhuǎn)換完之后不能返回原來調(diào)用的地方,而是返回程序的開始。最后只把 字母轉(zhuǎn)換功能加到計算器里,最后完成本次的課程設(shè)計。下圖 17 是二進制轉(zhuǎn)換的程序 運行界面: 廣東海洋大學微型計算機原理及應(yīng)用課程設(shè)計 12 圖 17 當然我還

44、有很多不足之處,比如知識掌握的不夠全面,研究的深度不夠,寫出的 代碼效率不高,不能做到精簡。這些都是我需要去改進的地方。我會在以后的學習中 多加注意。 通過這次課程設(shè)計,最深體會就是編程調(diào)試是很需要耐心的,就算思路清晰,算 法正確,但是當要寫的代碼比較多的時候,特別是使用匯編編程,還是會遇到很多問 題的。使用的跳轉(zhuǎn)比較多,而且是對寄存器和存儲器進行操作,同時考慮標志位的影 響,用起來比較繁瑣,在調(diào)試的時候經(jīng)常會發(fā)現(xiàn)很漏洞,但是只要認真思考和調(diào)試還 是會解決問題的。 最后感謝老師的辛苦指導,使我的設(shè)計能過成功實現(xiàn),使我完成了這次課程設(shè)計。 另外感謝網(wǎng)絡(luò)給予我便利,讓我找到有些相關(guān)資料幫我解決了一

45、些問題。同時也感謝 與我一起學習、探討,一起研究、查找資料的同學們。 參考文獻 微型計算機原理及應(yīng)用 鄧學堅 周斌 編著 廣東海洋大學微型計算機原理及應(yīng)用課程設(shè)計 13 ut2apodfxxc02gybkskcww97mrqqwhoj5tl15zt6jipyytycummtarp3v1n5luizi3xh3bhwyreko8d9g7nmzqowpjetldrw08gvs8dsdqqygc3ce7moo2tlf0jf1gk74iuxybmtivr97ckrfvqult5fn2t6mpjr6rbzvpsortzvij5nb5ndvvsr4iwr1twlfkglspzuhrjq3cmzu98euouijdlszqpmvrw9zkupxf8wfug9l2g9277g2rtipa1ypczeuqxpkbhtvdcooqozxuz3vjrzmocijym62zchmeootyes8ebmm932tbz2yo09rtszeys8zrd2yktj8l6jeazvajnfbtrylvsm6ofbftoxvrffn7owiygjlamkunxjybz5rrb7r4vsur9zpfzfmfsjhcfca37lnw2vvlrkn7r8psz1bn6oric5hu5z6hcxayqynpog8duybawqsl20csg06dh2

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論