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

下載本文檔

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

文檔簡介

微型計算機原理及應用微型計算機原理及應用課程設計課程設計 簡易計算器的設計 姓名陳* 院系信息學院自動化系 班級* 學號200911* 時間2011 年 12 月 29 日 目 錄 目目 錄錄 摘要 i introduction. 1課程設計目的與任務.1 1.1設計目的1 1.2設計任務1 2基本要求.1 3簡易計算器的設計.0 3.1程序設計流程圖0 3.2程序基本算法1 3.3程序源代碼1 3.4程序調試8 4課程設計總結與心得.11 參考文獻12 摘要 i 摘要 本次課程設計是通過使用 emu8086 匯編語言編程軟件實現(xiàn)較復雜程序的設計。該 課程設計的內容為采用匯編語言設計一個簡易計算器,界面顯示要求用鍵盤分別輸入 兩個隨機數(shù),完成加法,減法,乘法和除法的運算,然后將運算結果顯示出來。該設 計只能運行簡單正整數(shù)間的單步加減乘除運算,不能識別小數(shù)。除法中的結果可以精 確到 3 位小數(shù),減法可以顯示負數(shù)的結果。采用 dos 調用(int 21h)來完成輸入和輸 出,輸出字符串操作。通過這次設計實踐能夠進一步加深對專業(yè)知識和理論知識學習 的認識和理解,使自己的設計水平和對所學的知識的應用能力以及分析問題解決問題 的能力得到全面提高。 關鍵詞:微機原理;計算器;匯編 abstract ii introduction this course is designed 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, subtraction, 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, subtraction 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 design level of knowledge and the application ability and the ability to analyse and solve questions fully improve. keywords: microcomputer principle;calculator;assembly language 廣東海洋大學微型計算機原理及原理課程設計 1 簡易計算器的設計 自動*,200911*,陳* 1課程設計目的與任務 1.1設計目的 為了使學生加深對所學的微機原理知識的理解,培養(yǎng)學生的專業(yè)素質,提高其利 用微機原理知識處理問題的能力,為今后專業(yè)課程的學習、畢業(yè)設計和工作打下良好 的基礎。使學生能比較扎實地掌握微機原理的基礎知識和基本理論,掌握控制系統(tǒng)及 有關設備的分析、開發(fā)等基本技能,受到必要工程訓練、初步的科學研究方法訓練和 實踐鍛練,增強分析問題和解決問題的能力,了解微機原理和接口技術的新發(fā)展。 1.2設計任務 本次課程設計有四個任務可供選擇,這里選擇設計一個簡易計算器,要求能正確完成 加、減、乘、除四則運算。 2基本要求 本次課程設計,1 人 1 題,可以相互討論,但設計報告由學生獨立完成,不得互 相抄襲。教師的主導作用主要在于指明設計思路,啟發(fā)學生獨立設計的思路,解答疑 難問題和按設計進度進行階段審查。學生必須發(fā)揮自身學習的主動性和能動性,主動 思考問題、分析問題和解決問題,而不應處處被動地依賴指導老師。同學應積極主動 的提出問題、解決問題、討論問題,互相幫助和啟發(fā)。 學生在設計中可以引用所需的參考資料,避免重復工作,加快設計進程,但必須 和題目的要求相符合,保證設計的正確。指導教師要引導學生學會掌握和使用各種已 有的技術資料,不能盲目地、機械地抄襲資料,必須具體分析,使設計質量和設計能 力都獲得提高。學生要在老師的指導下制定好自己各環(huán)節(jié)的詳細設計進程計劃,按給 定的時間計劃保質保量的完成個階段的設計任務。設計中可邊設計,邊修改,軟件設 計與硬件設計可交替進行,問題答疑與調試和方案修改相結合,提高設計的效率,保 證按時完成設計工作并交出合格的設計報告。 廣東海洋大學微型計算機原理及原理課程設計 2 3簡易計算器的設計 設計一個簡易計算器過程包括:確定功能,畫流程圖,確定算法,編寫程序,程 序調試。 設計工具:個人電腦,emu8086。設計語言:8086 匯編語言 3.1程序設計流程圖 圖 1 1/2? 輸入單字符 開始 2:第一次輸入字符串 09/e? 09 轉換與暫存 第二次輸入字符串 09/e? 09 轉換與暫存 輸入運算符 +-*/e? 相應運算 轉換與輸出 1:輸入字符串 az? az 轉換與輸出 e 退出 都不是 都不是 都不是 都不是 n n n 廣東海洋大學微型計算機原理及原理課程設計 3 流程圖介紹: 進入 dos 界面,首先顯示出計算器功能介紹和個人信息,然后界面輸出操提示要 求用戶輸入 1 或者 2 選擇功能,1 表示字母轉換功能,2 表示計算功能。 字母轉換功能,只能從小寫向大寫轉換,當用戶輸入字母時,先判斷是否為小寫 字母,不是則重新進入功能選擇界面,是就開始轉換并且顯示在界面大寫。 計算功能,提示輸入第一個數(shù),先判斷是否符合要求的數(shù),符合的話再把輸入的 數(shù)據(jù)先從十六進制的 ascii 碼轉換成相應的十進制,再轉換成有實際意義的十六進制 進制,將該十六進制數(shù)存入一個緩沖器單元,對于不符合要求的數(shù)就返回重新輸入第 一個數(shù)據(jù)。輸入完第一個數(shù)后,界面再要求操用戶輸進第二個數(shù),同樣的方法判斷再 進行轉換數(shù)制,在存到緩沖期的下一個單元。這里轉換的方法是采用“乘 10 加次位” 的方法。接下來界面再提示用戶輸入“+,-,*,/”其中一個運算符,然后程序進行 比較輸入的運算符,然后跳到相應的代碼段執(zhí)行相應的運算,如果輸入的字符不是運 算符就重新輸入運算符。其中,減法運算中,首先比較被減數(shù)與減數(shù)的大小,如果減 數(shù)大于被減數(shù)則結果會是負數(shù),所以,首先顯示出“-”號,再將被減數(shù)與減數(shù)換位, 進行減法運算。當完成運算后,因為結果是十六進制的,所以要進行轉換數(shù)制,采用 “除 10 取余倒排列”的方法,最后,就將結果逐位輸出顯示。 3.2程序基本算法 本次計算器計算功能的設計,關鍵在于數(shù)制的轉換。用戶輸入的是字符串,而在 以每個字符的十六進制的 ascii 碼存放,為了把字符串轉換成有實際數(shù)學意思的十六 進制數(shù),就要首先把 ascii 碼先轉換成十進制,再把十進制數(shù)轉成可以運算的十六進 制。例如輸入 112,系統(tǒng)存放的是 31h、31h、32h,通過減去 30h,即可轉成 1、1、2 存放,再把三個數(shù) 1、1、2“乘以 10 加次位”的方法:(1*10+1)*10+2=112 ,把 112 也就是 70h 這個結果放到寄存器里,即可轉換成功。只有這樣的數(shù)才可以利用匯 編指令進行正確運算。運算完之后采用“除 10 取余倒排序”的方法,把結果逐位轉換, 再加上 30h,即可顯示。 字母轉換部分,實現(xiàn)小寫向大寫轉換,只要把相應的 ascii 碼進行運算就可以,利用這個方 法可以實現(xiàn)大小寫互換,這里只是簡單嘗試寫出小寫向大寫轉換。例如,a 轉換成 a,a 的 ascii 碼是 41h,而 a 的是 61h,要實現(xiàn) a 向 a 轉換,61h 減去 20h 就可以了。要實現(xiàn) a 向 a 轉換, 對應 ascii 碼加上 20h 即可。 3.3程序源代碼 ;- - ; *數(shù)據(jù)段* ;- - data segment ;-計算器功能信息字符串定義- - 廣東海洋大學微型計算機原理及原理課程設計 2 str1 db 0ah,0dh,* *$ str2 db 0ah,0dh, 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 個字空 間作暫存數(shù)據(jù)計算 result1 db 30 dup(0),$ ;保留 30 個字 節(jié)存結果數(shù) result2 db 30 dup(0)$ ;-字母轉換部分- 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,0ah,please enter a number: $;輸入第一個數(shù)字符串說明 array2 db 0dh,0ah,please enter another number: $;輸入第二個數(shù)字符串說明 array3 db 0dh,0ah,the result is : $;輸出結果字符串說明 array4 db 0dh,0ah,the number is wrong,please input again : $;輸入錯誤提示字符串說明 string db 0dh,0ah,please enter the operation(+,-,*,/) : $ ;運算字符串說明 array dw 2 dup(0) ;保留 2 個字 空間作暫存數(shù)據(jù)計算 result db 6 dup(0),$ ;保留 6 個字節(jié)存 結果數(shù) crlf db 0dh,0ah,$ ;顯示結果時回 車,轉行說明 yushu dw 4 dup(0) data ends ;- - ; *代碼段* ;- - code segment assume cs:code,ds:data ;段寄存器 說明偽指令 start:mov ax, data mov ds,ax ;往 ds 段寄存 器送數(shù)據(jù)段基址 ;-輸出計算器的功能相關信息(調用 9 號功能輸 出字符串)- mov dx,offset str1 mov ah,9 int 21h 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 ;輸出回車換行 廣東海洋大學微型計算機原理及原理課程設計 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 都不是,則回 車換行 mov ah,9 int 21h jmp stac ;跳回 stac,重新選擇 功能 ;- - ;*字母轉換* ;- - 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 跳轉 cmp al,7ah ja lc ;大于 7ah 跳轉 inc bx loop a1 pop bx call lcc jmp stac ;- - ;*四則運算* ;- - ;*輸入第一個數(shù)* ;- - ;-調用 09 號輸出字符串功能,輸出 dx 內容即 array1 內容 - input1: mov dx,offset array1 ;取 array1 偏移地址送進 dx mov ah,9 int 21h ;-調用 0a 號輸入字符串功能,輸入內容暫存在 buff 緩沖區(qū)- again1:mov dx,offset buff ;把緩沖區(qū) buff 的偏移地址送到 dx mov ah,0ah 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 就跳到 廣東海洋大學微型計算機原理及原理課程設計 4 error1 inc bx loop 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 ;調用 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 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: 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 ;調用 01 號輸入單字符功能,記運算符 mov ah,01 ;鍵盤輸入單字符(運算符+-*/) int 21h ;-比較輸入的運算符- cmp al,+ ;比較輸入運算符是否為+ jz add1 ;輸入運算符為+,則跳到 add1 處,若不是則繼續(xù)往下執(zhí)行 cmp al,- ;比較輸入運算符是否為- 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 處 ;- ;* 加法運算* 廣東海洋大學微型計算機原理及原理課程設計 5 ;- 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 ;調用 hex_asc 子程 序 mov dx,offset crlf mov ah,9 int 21h ;輸出回車換行 jmp stac ;- ;* 減法運算* ;- sub2: ;-回車,換行顯示- push ax mov dx,offset array3 ;取 array3 偏移地址送進 dx mov 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 ;- ;* 乘法運算* ;- 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 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 就跳轉到 ys2 mov dl,2eh mov ah,2 ; 輸出小數(shù)點 廣東海洋大學微型計算機原理及原理課程設計 6 int 21h ys2: mov ax,yushu mov bx,10 mul bx ;取余數(shù)乘以 10 繼續(xù)計算, 把結果放到 ax loop div5 mov dx,offset crlf mov ah,9 int 21h jmp stac ;-返回操作系統(tǒng)- last: mov ah,4ch int 21h ;- ;* asc_hex 子程序(把 ascii 碼轉換成對應的十六進 制數(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 的值(首字符地址)放入棧區(qū) l0: sub bx,30h ;輸入字符即十六進 制的 ascii 碼轉換成相對應的十進制碼(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 ;十進制轉換成二進 制 ,以 10 為基數(shù) mul dx add al,byte ptr bx ; inc bx loop l1 pop cx abcd: ret ;返回主程序 asc_hex endp ;- - ; * hex_asc 子程序(十六進制 轉換成相應的 ascii 碼)* ;- - hex_asc proc mov si,offset result ;將 result 暫存 結果的單元偏移地址送到 si 寄存器中 add si,4 ;將源變址指針指到 最后一個單元 mov si+1,“$“ ;預先放結束碼,用來 后面調用 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 ;二進制轉換成十進 制,除 10 取余法 add dl,30h ;十進制轉換成十六 進制的 ascii 碼 mov si,dl ;保存當前位結果, (先個位、再十位、后百位、 、 、倒序!) dec si ;指向前一位 loop ha1 mov cx,4 ;循環(huán)次數(shù)為 4 次, 對應上面的 si 所設的單元數(shù) ha2: inc si mov al,si cmp al,30h ;判斷是否為 0,若 是,則繼續(xù)循環(huán)。 jnz notzearo ;若不是則跳到 nozearo,顯示出該字符 loop ha2 inc si notzearo: ;-09 號輸出字符串功能調用,顯示出內容- - mov dx,si mov ah,9 int 21h ret 廣東海洋大學微型計算機原理及原理課程設計 7 hex_asc endp ;- - ; *減法負數(shù)情況的 hex_asc1 子程 序(十六進制轉換成相應的 ascii 碼)* ;- - hex_asc1 proc mov si,offset result ;將 result 暫存結 果的單元偏移地址送到 si 寄存器中 add si,4 ;將源變址指針指到最 后一個單元 mov si+1,“$“ ;預先放結束碼,用來后 面調用 09 號輸出功能的停止 mov cx,5 ;循環(huán)次數(shù),最多不 超過 5 位十進制數(shù),因為 16 位二進制數(shù)即 4 位 16 進制 數(shù)不超過 65535 ab1: mov dx,0 ;dx 用來放余數(shù)的, 所以每次都要清零 mov bx,10 ;以 10 為基數(shù) div bx ;二進制轉換成十進 制,除 10 取余法 add dl,30h ;十進制轉換成十六 進制的 ascii 碼 mov si,dl ;保存當前位結果, (先個位、再十位、后百位) dec si ;指向前一位 loop ab1 mov cx,4 ;循環(huán)次數(shù)為 4 次, 對應上面的 si 所設的單元數(shù) ab2: inc si mov al,si cmp al,30h ;判斷是否為 0,若 是,則繼續(xù)循環(huán)。 jnz notzearo1 ;若不是則跳到 nozearo1,顯示出該字符 loop ab2 inc si notzearo1: ;- push ax mov ah,02h mov dl,- ;預先輸出一個-號,表示結果 為負數(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 21h 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 廣東海洋大學微型計算機原理及應用課程設計 8 3.4程序調試 功能選擇界面: 圖 2 圖 3 如圖 2 所示,運行程序,首先顯示計算器的相關信息,主要利用系統(tǒng)功能調用實現(xiàn)。然后是輸 出提示要求用戶通過輸入 1 或者 2 選擇功能。 字母轉換功能 功能 1 可以實現(xiàn)小寫字母向大寫字母的轉換,當用戶輸入 1 會進入圖 3 界面。提示用戶輸入字母, 注意要是小寫,如果輸入不是小寫則會提示重新輸入如圖 4 所示。輸入正確的小寫字母自動轉換并 且返回功能選擇。 圖 4(上) 圖 6(下) 圖 5(上) 圖 7(下) 廣東海洋大學微型計算機原理及應用課程設計 9 加法運算功能 如圖 6 所示,任意輸入兩個正整數(shù)相加,結果正確。先輸入第一個數(shù),然后再輸入第二個數(shù), 接著輸入運算符,這樣程序就會自動輸出結果。注意運算兩數(shù)相加的兩個數(shù)不能超過五位數(shù),并且 結果不能超過 65535 。 減法運算功能 如圖 7 所示,操作方法和加法相同。雖然不可以進行負數(shù)間的運算,但是可以輸出負數(shù),如圖 8 所示。 圖 8 圖 9 乘法運算功能 如圖 9 所示,操作方法和加法相同。 除法運算功能 廣東海洋大學微型計算機原理及應用課程設計 10 如圖 10 所示,操作方法和加法相同。除法輸出結果精確到 3 位小數(shù),但是不會四舍五入,而 是直接舍去后面剩下的小數(shù)。如圖 11 所示。 圖 10 圖 11 輸入錯誤提示功能 以下述說的前提是:輸入的字符非大寫 e。 在功能選擇的時候,選擇錯誤即輸入的既不是 1 也不是 2,則會提示重新選擇,如圖 12 所示。 在字母轉換的時候,輸入字母非小寫字母,也會提示重新輸入,如圖 5 所示。 在運算的時候,第一個和第二個輸入的必須是數(shù)字,輸入的運算符號必須是+、-、*、/ 其中之 一,否則都會提示錯誤重新輸入。如圖 13、圖 14 所示。運算時中間有輸入錯誤的字符,會提示重 新輸入,直到輸入正確為止,才繼續(xù)進行運算,如圖 15 所示。 圖 12 圖 13 廣東海洋大學微型計算機原理及應用課程設計 11 圖 14 圖 15 退出功能 本程序設置了退出功能。當用戶輸入大寫字母 e 的時候就會退出程序。但是在進行小寫字母向 小寫字母轉換的時候,不能這種方式退出。其他輸入 e 即可退出。如圖 16 所示。 圖 16 4課程設計總結與心得 本次課程設計自由選擇設計課題的,我選擇了簡易加減法計算器的題目,看起來 不是很難,但是真正做起來才發(fā)現(xiàn)其困難之處。 其實老師也說過這個題目相對于其他題目比較難的。因為這次設計不僅僅是課本 上知識的整合,而且還有很多是課外的擴展。這次課程設計可以說是一個挑戰(zhàn)。我做 的題目是簡易計算器的設計。剛開始思路還是挺清晰的,經(jīng)過思考,發(fā)現(xiàn)計算器中數(shù) 制的轉換是這個設計的難點和重點,但是思考數(shù)制轉換的算法的時候很快就碰壁了, 因為通過系統(tǒng)功能調用輸入的字符是以 ascii 碼存放的,并不是有本來實際數(shù)學意義 的。首先,我解決了輸入后的轉換,這里使用“乘 10 加次位”的方法,最初想使用普 通的數(shù)制轉換,結果覺得很難實現(xiàn)。在完成運算完后再轉換輸出模塊的時候,我開始 查看課本和有關的資料,知道了一些編程常用的方法。受益匪淺。而后我用心編寫這 程序。經(jīng)過自己的努力和同學的幫助終于完成了相應的要求。 在程序完成基本的要求后,我嘗試做另外一個題目:代碼轉換。原計劃是:首先 單獨完成代碼轉換這一程序,可以實現(xiàn)小寫字母向大寫字母的轉換,還可以實現(xiàn)十進 制數(shù)向二進制數(shù)的轉換;然后再把計算器和代碼轉換結合起來,做成多功能計算器。 可是真正實現(xiàn)起來遇到一個問題,就是在十進制向二進制轉換的時候,是通過調用子 程序轉換的,轉換完之后不能返回原來調用的地方,而是返回程序的開始。最后只把 字母轉換功能加到計算器里,最后完成本次的課程設計。下圖 17 是二進制轉換的程序 運行界面: 廣東海洋大學微型計算機原理及應用課程設計 12 圖 17 當然我還有很多不足之處,比如知識掌握的不夠全面,研究的深度不夠,寫出的 代碼效率不高,不能做到精簡。這些都是我需要去改進的地方。我會在以后的學習中 多加注意。 通過這次課程設計,最深體會就是編程調試是很需要耐心的,就算思路清晰,算 法正確,但是當要寫的代碼比較多的時候,特別是使用匯編編程,還是會遇到很多問 題的。使用的跳轉比較多,而且是對寄存器和存儲器進行操作,同時考慮標志位的影 響,用起來比較繁瑣,在調試的時候經(jīng)常會發(fā)現(xiàn)很漏洞,但是只要認真思考和調試還 是會解決問題的。 最后感謝老師的辛苦指導,使我的設計能過成功實現(xiàn),使我完成了這次課程設計。 另外感謝網(wǎng)絡給予我便利,讓我找到有些相關資料幫我解決了一些問題。同時也感謝 與我一起學習、探討,一起研究、查找資料的同學們。 參考文獻 微型計算機原理及應用 鄧學堅 周斌 編著 廣東海洋大學微型計算機原理及應用課程設計 13 ut2apodfxxc02gybkskcww97mrqqwhoj5tl15zt6jipyytycummtarp3v1n5luizi3xh3bhwyreko8d9g7nmzqowpjetldrw08gvs8dsdqqygc3ce7moo2tlf0jf1gk74iuxybmtivr97ckrfvqult5fn2t6mpjr6rbzvpsortzvij5nb5ndvvsr4iwr1twlfkglspzuhrjq3cmzu98euouijdlszqpmvrw9zkupxf8wfug9l2g9277g2rtipa1ypczeuqxpkbhtvdcooqozxuz3vjrzmocijym62zchmeootyes8ebmm932tbz2yo09rtszeys8zrd2yktj8l6jeazvajnfbtrylvsm6ofbftoxvrffn7owiygjlamkunxjybz5rrb7r4vsur9zpfzfmfsjhcfca37lnw2vvlrkn7r8psz1bn6oric5hu5z6hcxayqynpog8duybawqsl20csg06dh

溫馨提示

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

評論

0/150

提交評論