已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
微型計(jì)算機(jī)原理及應(yīng)用微型計(jì)算機(jī)原理及應(yīng)用課程設(shè)計(jì)課程設(shè)計(jì) 簡(jiǎn)易計(jì)算器的設(shè)計(jì) 姓名陳* 院系信息學(xué)院自動(dòng)化系 班級(jí)* 學(xué)號(hào)200911* 時(shí)間2011 年 12 月 29 日 目 錄 目目 錄錄 摘要 i introduction. 1課程設(shè)計(jì)目的與任務(wù).1 1.1設(shè)計(jì)目的1 1.2設(shè)計(jì)任務(wù)1 2基本要求.1 3簡(jiǎn)易計(jì)算器的設(shè)計(jì).0 3.1程序設(shè)計(jì)流程圖0 3.2程序基本算法1 3.3程序源代碼1 3.4程序調(diào)試8 4課程設(shè)計(jì)總結(jié)與心得.11 參考文獻(xiàn)12 摘要 i 摘要 本次課程設(shè)計(jì)是通過(guò)使用 emu8086 匯編語(yǔ)言編程軟件實(shí)現(xiàn)較復(fù)雜程序的設(shè)計(jì)。該 課程設(shè)計(jì)的內(nèi)容為采用匯編語(yǔ)言設(shè)計(jì)一個(gè)簡(jiǎn)易計(jì)算器,界面顯示要求用鍵盤(pán)分別輸入 兩個(gè)隨機(jī)數(shù),完成加法,減法,乘法和除法的運(yùn)算,然后將運(yùn)算結(jié)果顯示出來(lái)。該設(shè) 計(jì)只能運(yùn)行簡(jiǎn)單正整數(shù)間的單步加減乘除運(yùn)算,不能識(shí)別小數(shù)。除法中的結(jié)果可以精 確到 3 位小數(shù),減法可以顯示負(fù)數(shù)的結(jié)果。采用 dos 調(diào)用(int 21h)來(lái)完成輸入和輸 出,輸出字符串操作。通過(guò)這次設(shè)計(jì)實(shí)踐能夠進(jìn)一步加深對(duì)專業(yè)知識(shí)和理論知識(shí)學(xué)習(xí) 的認(rèn)識(shí)和理解,使自己的設(shè)計(jì)水平和對(duì)所學(xué)的知識(shí)的應(yīng)用能力以及分析問(wèn)題解決問(wèn)題 的能力得到全面提高。 關(guān)鍵詞:微機(jī)原理;計(jì)算器;匯編 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 廣東海洋大學(xué)微型計(jì)算機(jī)原理及原理課程設(shè)計(jì) 1 簡(jiǎn)易計(jì)算器的設(shè)計(jì) 自動(dòng)*,200911*,陳* 1課程設(shè)計(jì)目的與任務(wù) 1.1設(shè)計(jì)目的 為了使學(xué)生加深對(duì)所學(xué)的微機(jī)原理知識(shí)的理解,培養(yǎng)學(xué)生的專業(yè)素質(zhì),提高其利 用微機(jī)原理知識(shí)處理問(wèn)題的能力,為今后專業(yè)課程的學(xué)習(xí)、畢業(yè)設(shè)計(jì)和工作打下良好 的基礎(chǔ)。使學(xué)生能比較扎實(shí)地掌握微機(jī)原理的基礎(chǔ)知識(shí)和基本理論,掌握控制系統(tǒng)及 有關(guān)設(shè)備的分析、開(kāi)發(fā)等基本技能,受到必要工程訓(xùn)練、初步的科學(xué)研究方法訓(xùn)練和 實(shí)踐鍛練,增強(qiáng)分析問(wèn)題和解決問(wèn)題的能力,了解微機(jī)原理和接口技術(shù)的新發(fā)展。 1.2設(shè)計(jì)任務(wù) 本次課程設(shè)計(jì)有四個(gè)任務(wù)可供選擇,這里選擇設(shè)計(jì)一個(gè)簡(jiǎn)易計(jì)算器,要求能正確完成 加、減、乘、除四則運(yùn)算。 2基本要求 本次課程設(shè)計(jì),1 人 1 題,可以相互討論,但設(shè)計(jì)報(bào)告由學(xué)生獨(dú)立完成,不得互 相抄襲。教師的主導(dǎo)作用主要在于指明設(shè)計(jì)思路,啟發(fā)學(xué)生獨(dú)立設(shè)計(jì)的思路,解答疑 難問(wèn)題和按設(shè)計(jì)進(jìn)度進(jìn)行階段審查。學(xué)生必須發(fā)揮自身學(xué)習(xí)的主動(dòng)性和能動(dòng)性,主動(dòng) 思考問(wèn)題、分析問(wèn)題和解決問(wèn)題,而不應(yīng)處處被動(dòng)地依賴指導(dǎo)老師。同學(xué)應(yīng)積極主動(dòng) 的提出問(wèn)題、解決問(wèn)題、討論問(wèn)題,互相幫助和啟發(fā)。 學(xué)生在設(shè)計(jì)中可以引用所需的參考資料,避免重復(fù)工作,加快設(shè)計(jì)進(jìn)程,但必須 和題目的要求相符合,保證設(shè)計(jì)的正確。指導(dǎo)教師要引導(dǎo)學(xué)生學(xué)會(huì)掌握和使用各種已 有的技術(shù)資料,不能盲目地、機(jī)械地抄襲資料,必須具體分析,使設(shè)計(jì)質(zhì)量和設(shè)計(jì)能 力都獲得提高。學(xué)生要在老師的指導(dǎo)下制定好自己各環(huán)節(jié)的詳細(xì)設(shè)計(jì)進(jìn)程計(jì)劃,按給 定的時(shí)間計(jì)劃保質(zhì)保量的完成個(gè)階段的設(shè)計(jì)任務(wù)。設(shè)計(jì)中可邊設(shè)計(jì),邊修改,軟件設(shè) 計(jì)與硬件設(shè)計(jì)可交替進(jìn)行,問(wèn)題答疑與調(diào)試和方案修改相結(jié)合,提高設(shè)計(jì)的效率,保 證按時(shí)完成設(shè)計(jì)工作并交出合格的設(shè)計(jì)報(bào)告。 廣東海洋大學(xué)微型計(jì)算機(jī)原理及原理課程設(shè)計(jì) 2 3簡(jiǎn)易計(jì)算器的設(shè)計(jì) 設(shè)計(jì)一個(gè)簡(jiǎn)易計(jì)算器過(guò)程包括:確定功能,畫(huà)流程圖,確定算法,編寫(xiě)程序,程 序調(diào)試。 設(shè)計(jì)工具:個(gè)人電腦,emu8086。設(shè)計(jì)語(yǔ)言:8086 匯編語(yǔ)言 3.1程序設(shè)計(jì)流程圖 圖 1 1/2? 輸入單字符 開(kāi)始 2:第一次輸入字符串 09/e? 09 轉(zhuǎn)換與暫存 第二次輸入字符串 09/e? 09 轉(zhuǎn)換與暫存 輸入運(yùn)算符 +-*/e? 相應(yīng)運(yùn)算 轉(zhuǎn)換與輸出 1:輸入字符串 az? az 轉(zhuǎn)換與輸出 e 退出 都不是 都不是 都不是 都不是 n n n 廣東海洋大學(xué)微型計(jì)算機(jī)原理及原理課程設(shè)計(jì) 3 流程圖介紹: 進(jìn)入 dos 界面,首先顯示出計(jì)算器功能介紹和個(gè)人信息,然后界面輸出操提示要 求用戶輸入 1 或者 2 選擇功能,1 表示字母轉(zhuǎn)換功能,2 表示計(jì)算功能。 字母轉(zhuǎn)換功能,只能從小寫(xiě)向大寫(xiě)轉(zhuǎn)換,當(dāng)用戶輸入字母時(shí),先判斷是否為小寫(xiě) 字母,不是則重新進(jìn)入功能選擇界面,是就開(kāi)始轉(zhuǎn)換并且顯示在界面大寫(xiě)。 計(jì)算功能,提示輸入第一個(gè)數(shù),先判斷是否符合要求的數(shù),符合的話再把輸入的 數(shù)據(jù)先從十六進(jìn)制的 ascii 碼轉(zhuǎn)換成相應(yīng)的十進(jìn)制,再轉(zhuǎn)換成有實(shí)際意義的十六進(jìn)制 進(jìn)制,將該十六進(jìn)制數(shù)存入一個(gè)緩沖器單元,對(duì)于不符合要求的數(shù)就返回重新輸入第 一個(gè)數(shù)據(jù)。輸入完第一個(gè)數(shù)后,界面再要求操用戶輸進(jìn)第二個(gè)數(shù),同樣的方法判斷再 進(jìn)行轉(zhuǎn)換數(shù)制,在存到緩沖期的下一個(gè)單元。這里轉(zhuǎn)換的方法是采用“乘 10 加次位” 的方法。接下來(lái)界面再提示用戶輸入“+,-,*,/”其中一個(gè)運(yùn)算符,然后程序進(jìn)行 比較輸入的運(yùn)算符,然后跳到相應(yīng)的代碼段執(zhí)行相應(yīng)的運(yùn)算,如果輸入的字符不是運(yùn) 算符就重新輸入運(yùn)算符。其中,減法運(yùn)算中,首先比較被減數(shù)與減數(shù)的大小,如果減 數(shù)大于被減數(shù)則結(jié)果會(huì)是負(fù)數(shù),所以,首先顯示出“-”號(hào),再將被減數(shù)與減數(shù)換位, 進(jìn)行減法運(yùn)算。當(dāng)完成運(yùn)算后,因?yàn)榻Y(jié)果是十六進(jìn)制的,所以要進(jìn)行轉(zhuǎn)換數(shù)制,采用 “除 10 取余倒排列”的方法,最后,就將結(jié)果逐位輸出顯示。 3.2程序基本算法 本次計(jì)算器計(jì)算功能的設(shè)計(jì),關(guān)鍵在于數(shù)制的轉(zhuǎn)換。用戶輸入的是字符串,而在 以每個(gè)字符的十六進(jìn)制的 ascii 碼存放,為了把字符串轉(zhuǎn)換成有實(shí)際數(shù)學(xué)意思的十六 進(jìn)制數(shù),就要首先把 ascii 碼先轉(zhuǎn)換成十進(jìn)制,再把十進(jìn)制數(shù)轉(zhuǎn)成可以運(yùn)算的十六進(jìn) 制。例如輸入 112,系統(tǒng)存放的是 31h、31h、32h,通過(guò)減去 30h,即可轉(zhuǎn)成 1、1、2 存放,再把三個(gè)數(shù) 1、1、2“乘以 10 加次位”的方法:(1*10+1)*10+2=112 ,把 112 也就是 70h 這個(gè)結(jié)果放到寄存器里,即可轉(zhuǎn)換成功。只有這樣的數(shù)才可以利用匯 編指令進(jìn)行正確運(yùn)算。運(yùn)算完之后采用“除 10 取余倒排序”的方法,把結(jié)果逐位轉(zhuǎn)換, 再加上 30h,即可顯示。 字母轉(zhuǎn)換部分,實(shí)現(xiàn)小寫(xiě)向大寫(xiě)轉(zhuǎn)換,只要把相應(yīng)的 ascii 碼進(jìn)行運(yùn)算就可以,利用這個(gè)方 法可以實(shí)現(xiàn)大小寫(xiě)互換,這里只是簡(jiǎn)單嘗試寫(xiě)出小寫(xiě)向大寫(xiě)轉(zhuǎn)換。例如,a 轉(zhuǎn)換成 a,a 的 ascii 碼是 41h,而 a 的是 61h,要實(shí)現(xiàn) a 向 a 轉(zhuǎn)換,61h 減去 20h 就可以了。要實(shí)現(xiàn) a 向 a 轉(zhuǎn)換, 對(duì)應(yīng) ascii 碼加上 20h 即可。 3.3程序源代碼 ;- - ; *數(shù)據(jù)段* ;- - data segment ;-計(jì)算器功能信息字符串定義- - 廣東海洋大學(xué)微型計(jì)算機(jī)原理及原理課程設(shè)計(jì) 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 個(gè)字空 間作暫存數(shù)據(jù)計(jì)算 result1 db 30 dup(0),$ ;保留 30 個(gè)字 節(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: $ ;-四則運(yùn)算部分- buff db 28 ;允許輸入的最多字符數(shù) db 0 ;實(shí)際輸入的字符數(shù) db 28 dup(0) ;保存實(shí)際輸入的字符 array1 db 0dh,0ah,0dh,0ah,please enter a number: $;輸入第一個(gè)數(shù)字符串說(shuō)明 array2 db 0dh,0ah,please enter another number: $;輸入第二個(gè)數(shù)字符串說(shuō)明 array3 db 0dh,0ah,the result is : $;輸出結(jié)果字符串說(shuō)明 array4 db 0dh,0ah,the number is wrong,please input again : $;輸入錯(cuò)誤提示字符串說(shuō)明 string db 0dh,0ah,please enter the operation(+,-,*,/) : $ ;運(yùn)算字符串說(shuō)明 array dw 2 dup(0) ;保留 2 個(gè)字 空間作暫存數(shù)據(jù)計(jì)算 result db 6 dup(0),$ ;保留 6 個(gè)字節(jié)存 結(jié)果數(shù) crlf db 0dh,0ah,$ ;顯示結(jié)果時(shí)回 車(chē),轉(zhuǎn)行說(shuō)明 yushu dw 4 dup(0) data ends ;- - ; *代碼段* ;- - code segment assume cs:code,ds:data ;段寄存器 說(shuō)明偽指令 start:mov ax, data mov ds,ax ;往 ds 段寄存 器送數(shù)據(jù)段基址 ;-輸出計(jì)算器的功能相關(guān)信息(調(diào)用 9 號(hào)功能輸 出字符串)- 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 ;輸出回車(chē)換行 廣東海洋大學(xué)微型計(jì)算機(jī)原理及原理課程設(shè)計(jì) 3 ;- - ;*功能選擇* ;- - stac: mov dx,offset str13 ;取 str13 偏 移地址送進(jìn) dx mov ah,9 int 21h mov ah,01h int 21h ;鍵盤(pán)輸入單字符 cmp al,e ;比較輸入運(yùn)算符是否為e jz last ;輸入運(yùn)算符為e,則跳到 last 處,若不是則繼續(xù)往下執(zhí)行 cmp al,31h jz lc ;如果輸入為 1,就跳到 lc cmp al,32h jz input1 ;如果輸入為 3,就跳到 input1 mov dx,offset crlf ;1、2 都不是,則回 車(chē)換行 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) cmp al,7ah ja lc ;大于 7ah 跳轉(zhuǎn) inc bx loop a1 pop bx call lcc jmp stac ;- - ;*四則運(yùn)算* ;- - ;*輸入第一個(gè)數(shù)* ;- - ;-調(diào)用 09 號(hào)輸出字符串功能,輸出 dx 內(nèi)容即 array1 內(nèi)容 - input1: mov dx,offset array1 ;取 array1 偏移地址送進(jìn) dx mov ah,9 int 21h ;-調(diào)用 0a 號(hào)輸入字符串功能,輸入內(nèi)容暫存在 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 ;比較輸入運(yùn)算符是否為e jz last ;輸入運(yùn)算符為e,則跳到 last 處,若不是則繼續(xù)往下執(zhí)行 cmp al,30h jb error1 ; ax 低于 30h 就跳到 error1 cmp al,39h ja error1 ;ax 高于 39h 就跳到 廣東海洋大學(xué)微型計(jì)算機(jī)原理及原理課程設(shè)計(jì) 4 error1 inc bx loop aa pop cx pop bx pop ax jmp cc1 ;-提示輸入錯(cuò)誤,重新輸入- error1: mov dx,offset array4 mov ah,9 int 21h jmp again1 ;- cc1: call asc_hex ;調(diào)用 asc_hex 子程序 mov array,ax ;將第一個(gè)數(shù) 存到暫存區(qū) array ;- - ;*輸入第二個(gè)數(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 ;比較輸入運(yùn)算符是否為e jz last ;輸入運(yùn)算符為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 ;-提示輸入錯(cuò)誤,重新輸入- error2: mov dx,offset array4 mov ah,9 int 21h jmp again2 ;- cc2: call asc_hex mov array+2,ax ;- - ;*輸入運(yùn)算符* ;- - input3:mov ah,09h mov dx,offset string int 21h ;調(diào)用 01 號(hào)輸入單字符功能,記運(yùn)算符 mov ah,01 ;鍵盤(pán)輸入單字符(運(yùn)算符+-*/) int 21h ;-比較輸入的運(yùn)算符- cmp al,+ ;比較輸入運(yùn)算符是否為+ jz add1 ;輸入運(yùn)算符為+,則跳到 add1 處,若不是則繼續(xù)往下執(zhí)行 cmp al,- ;比較輸入運(yùn)算符是否為- jz sub2 ;輸入運(yùn)算符為-,則跳到 sub2 處,若不是則繼續(xù)往下執(zhí)行 cmp al,* ;比較輸入運(yùn)算符是否為* jz mul3 ;輸入運(yùn)算符為*,則跳到 mul3 處,若不是則繼續(xù)往下執(zhí)行 cmp al,/ ;比較輸入運(yùn)算符是否為/ jz div4 ;輸入運(yùn)算符為/,則跳到 div4 處,若不是則繼續(xù)往下執(zhí)行 cmp al,e ;比較輸入運(yùn)算符是否為e jz last ;輸入運(yùn)算符為e,則跳到 last 處,若不是則繼續(xù)往下執(zhí)行 jmp input3 ;如果輸入運(yùn)算不是以上,則 從新返回到 input3 處 ;- ;* 加法運(yùn)算* 廣東海洋大學(xué)微型計(jì)算機(jī)原理及原理課程設(shè)計(jì) 5 ;- add1: ;-回車(chē),換行顯示- push ax mov dx,offset array3 ;取 array3 偏移地址送進(jìn) 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 ;輸出回車(chē)換行 jmp stac ;- ;* 減法運(yùn)算* ;- sub2: ;-回車(chē),換行顯示- push ax mov dx,offset array3 ;取 array3 偏移地址送進(jìn) 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 ;輸出回車(chē)換行 jmp stac ;-負(fù)數(shù)處理- kk: sub bx,ax mov ax,bx call hex_asc1 mov dx,offset crlf mov ah,9 int 21h ;輸出回車(chē)換行 jmp stac ;- ;* 乘法運(yùn)算* ;- mul3: ;-回車(chē),換行顯示- push ax mov dx,offset array3 ;取 array3 偏移地址送進(jìn) 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 ;- ;* 除法運(yùn)算* ;- div4: ;-回車(chē),換行顯示- push ax mov dx,offset array3 ;取 array3 偏移地址送進(jìn) 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 ;保護(hù)余數(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ù)點(diǎn) 廣東海洋大學(xué)微型計(jì)算機(jī)原理及原理課程設(shè)計(jì) 6 int 21h ys2: mov ax,yushu mov bx,10 mul bx ;取余數(shù)乘以 10 繼續(xù)計(jì)算, 把結(jié)果放到 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 碼轉(zhuǎn)換成對(duì)應(yīng)的十六進(jìn) 制數(shù)) ;- asc_hex proc xor cx,cx ;清空 cx,cx=0 mov cl,buff1 ;存入字符數(shù) jcxz abcd ;如果 cx=0,即輸 入字符數(shù)為 0,跳到 abcd 處,返回主程序 push cx ; 保護(hù) cx,把 cx 的值放入棧區(qū) mov bx,offset buff+2 ;取首字符地址 push bx ; 保護(hù) bx,把 bx 的值(首字符地址)放入棧區(qū) l0: sub bx,30h ;輸入字符即十六進(jìn) 制的 ascii 碼轉(zhuǎn)換成相對(duì)應(yīng)的十進(jìn)制碼(09) ,以 bx 作為指針 inc bx loop l0 pop bx ;釋放原來(lái)?xiàng)^(qū)的 bx 的值(首字符地址) mov ax,0 mov ch,0 mov cl,bx-1 ; 取字符數(shù) l1: mov dx,10 ;十進(jìn)制轉(zhuǎn)換成二進(jìn) 制 ,以 10 為基數(shù) mul dx add al,byte ptr bx ; inc bx loop l1 pop cx abcd: ret ;返回主程序 asc_hex endp ;- - ; * hex_asc 子程序(十六進(jìn)制 轉(zhuǎn)換成相應(yīng)的 ascii 碼)* ;- - hex_asc proc mov si,offset result ;將 result 暫存 結(jié)果的單元偏移地址送到 si 寄存器中 add si,4 ;將源變址指針指到 最后一個(gè)單元 mov si+1,“$“ ;預(yù)先放結(jié)束碼,用來(lái) 后面調(diào)用 09 號(hào)輸出功能的停止 mov cx,5 ;循環(huán)次數(shù),最多不 超過(guò) 5 位十進(jìn)制數(shù),因?yàn)?16 位二進(jìn)制數(shù)即 4 位 16 進(jìn)制 數(shù)不超過(guò) 65535 ha1: mov dx,0 ;dx 用來(lái)放余數(shù)的, 所以每次都要清零 mov bx,10 ;以 10 為基數(shù) div bx ;二進(jìn)制轉(zhuǎn)換成十進(jìn) 制,除 10 取余法 add dl,30h ;十進(jìn)制轉(zhuǎn)換成十六 進(jìn)制的 ascii 碼 mov si,dl ;保存當(dāng)前位結(jié)果, (先個(gè)位、再十位、后百位、 、 、倒序?。?dec si ;指向前一位 loop ha1 mov cx,4 ;循環(huán)次數(shù)為 4 次, 對(duì)應(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 號(hào)輸出字符串功能調(diào)用,顯示出內(nèi)容- - mov dx,si mov ah,9 int 21h ret 廣東海洋大學(xué)微型計(jì)算機(jī)原理及原理課程設(shè)計(jì) 7 hex_asc endp ;- - ; *減法負(fù)數(shù)情況的 hex_asc1 子程 序(十六進(jìn)制轉(zhuǎn)換成相應(yīng)的 ascii 碼)* ;- - hex_asc1 proc mov si,offset result ;將 result 暫存結(jié) 果的單元偏移地址送到 si 寄存器中 add si,4 ;將源變址指針指到最 后一個(gè)單元 mov si+1,“$“ ;預(yù)先放結(jié)束碼,用來(lái)后 面調(diào)用 09 號(hào)輸出功能的停止 mov cx,5 ;循環(huán)次數(shù),最多不 超過(guò) 5 位十進(jìn)制數(shù),因?yàn)?16 位二進(jìn)制數(shù)即 4 位 16 進(jìn)制 數(shù)不超過(guò) 65535 ab1: mov dx,0 ;dx 用來(lái)放余數(shù)的, 所以每次都要清零 mov bx,10 ;以 10 為基數(shù) div bx ;二進(jìn)制轉(zhuǎn)換成十進(jìn) 制,除 10 取余法 add dl,30h ;十進(jìn)制轉(zhuǎn)換成十六 進(jìn)制的 ascii 碼 mov si,dl ;保存當(dāng)前位結(jié)果, (先個(gè)位、再十位、后百位) dec si ;指向前一位 loop ab1 mov cx,4 ;循環(huán)次數(shù)為 4 次, 對(duì)應(yīng)上面的 si 所設(shè)的單元數(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,- ;預(yù)先輸出一個(gè)-號(hào),表示結(jié)果 為負(fù)數(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 廣東海洋大學(xué)微型計(jì)算機(jī)原理及應(yīng)用課程設(shè)計(jì) 8 3.4程序調(diào)試 功能選擇界面: 圖 2 圖 3 如圖 2 所示,運(yùn)行程序,首先顯示計(jì)算器的相關(guān)信息,主要利用系統(tǒng)功能調(diào)用實(shí)現(xiàn)。然后是輸 出提示要求用戶通過(guò)輸入 1 或者 2 選擇功能。 字母轉(zhuǎn)換功能 功能 1 可以實(shí)現(xiàn)小寫(xiě)字母向大寫(xiě)字母的轉(zhuǎn)換,當(dāng)用戶輸入 1 會(huì)進(jìn)入圖 3 界面。提示用戶輸入字母, 注意要是小寫(xiě),如果輸入不是小寫(xiě)則會(huì)提示重新輸入如圖 4 所示。輸入正確的小寫(xiě)字母自動(dòng)轉(zhuǎn)換并 且返回功能選擇。 圖 4(上) 圖 6(下) 圖 5(上) 圖 7(下) 廣東海洋大學(xué)微型計(jì)算機(jī)原理及應(yīng)用課程設(shè)計(jì) 9 加法運(yùn)算功能 如圖 6 所示,任意輸入兩個(gè)正整數(shù)相加,結(jié)果正確。先輸入第一個(gè)數(shù),然后再輸入第二個(gè)數(shù), 接著輸入運(yùn)算符,這樣程序就會(huì)自動(dòng)輸出結(jié)果。注意運(yùn)算兩數(shù)相加的兩個(gè)數(shù)不能超過(guò)五位數(shù),并且 結(jié)果不能超過(guò) 65535 。 減法運(yùn)算功能 如圖 7 所示,操作方法和加法相同。雖然不可以進(jìn)行負(fù)數(shù)間的運(yùn)算,但是可以輸出負(fù)數(shù),如圖 8 所示。 圖 8 圖 9 乘法運(yùn)算功能 如圖 9 所示,操作方法和加法相同。 除法運(yùn)算功能 廣東海洋大學(xué)微型計(jì)算機(jī)原理及應(yīng)用課程設(shè)計(jì) 10 如圖 10 所示,操作方法和加法相同。除法輸出結(jié)果精確到 3 位小數(shù),但是不會(huì)四舍五入,而 是直接舍去后面剩下的小數(shù)。如圖 11 所示。 圖 10 圖 11 輸入錯(cuò)誤提示功能 以下述說(shuō)的前提是:輸入的字符非大寫(xiě) e。 在功能選擇的時(shí)候,選擇錯(cuò)誤即輸入的既不是 1 也不是 2,則會(huì)提示重新選擇,如圖 12 所示。 在字母轉(zhuǎn)換的時(shí)候,輸入字母非小寫(xiě)字母,也會(huì)提示重新輸入,如圖 5 所示。 在運(yùn)算的時(shí)候,第一個(gè)和第二個(gè)輸入的必須是數(shù)字,輸入的運(yùn)算符號(hào)必須是+、-、*、/ 其中之 一,否則都會(huì)提示錯(cuò)誤重新輸入。如圖 13、圖 14 所示。運(yùn)算時(shí)中間有輸入錯(cuò)誤的字符,會(huì)提示重 新輸入,直到輸入正確為止,才繼續(xù)進(jìn)行運(yùn)算,如圖 15 所示。 圖 12 圖 13 廣東海洋大學(xué)微型計(jì)算機(jī)原理及應(yīng)用課程設(shè)計(jì) 11 圖 14 圖 15 退出功能 本程序設(shè)置了退出功能。當(dāng)用戶輸入大寫(xiě)字母 e 的時(shí)候就會(huì)退出程序。但是在進(jìn)行小寫(xiě)字母向 小寫(xiě)字母轉(zhuǎn)換的時(shí)候,不能這種方式退出。其他輸入 e 即可退出。如圖 16 所示。 圖 16 4課程設(shè)計(jì)總結(jié)與心得 本次課程設(shè)計(jì)自由選擇設(shè)計(jì)課題的,我選擇了簡(jiǎn)易加減法計(jì)算器的題目,看起來(lái) 不是很難,但是真正做起來(lái)才發(fā)現(xiàn)其困難之處。 其實(shí)老師也說(shuō)過(guò)這個(gè)題目相對(duì)于其他題目比較難的。因?yàn)檫@次設(shè)計(jì)不僅僅是課本 上知識(shí)的整合,而且還有很多是課外的擴(kuò)展。這次課程設(shè)計(jì)可以說(shuō)是一個(gè)挑戰(zhàn)。我做 的題目是簡(jiǎn)易計(jì)算器的設(shè)計(jì)。剛開(kāi)始思路還是挺清晰的,經(jīng)過(guò)思考,發(fā)現(xiàn)計(jì)算器中數(shù) 制的轉(zhuǎn)換是這個(gè)設(shè)計(jì)的難點(diǎn)和重點(diǎn),但是思考數(shù)制轉(zhuǎn)換的算法的時(shí)候很快就碰壁了, 因?yàn)橥ㄟ^(guò)系統(tǒng)功能調(diào)用輸入的字符是以 ascii 碼存放的,并不是有本來(lái)實(shí)際數(shù)學(xué)意義 的。首先,我解決了輸入后的轉(zhuǎn)換,這里使用“乘 10 加次位”的方法,最初想使用普 通的數(shù)制轉(zhuǎn)換,結(jié)果覺(jué)得很難實(shí)現(xiàn)。在完成運(yùn)算完后再轉(zhuǎn)換輸出模塊的時(shí)候,我開(kāi)始 查看課本和有關(guān)的資料,知道了一些編程常用的方法。受益匪淺。而后我用心編寫(xiě)這 程序。經(jīng)過(guò)自己的努力和同學(xué)的幫助終于完成了相應(yīng)的要求。 在程序完成基本的要求后,我嘗試做另外一個(gè)題目:代碼轉(zhuǎn)換。原計(jì)劃是:首先 單獨(dú)完成代碼轉(zhuǎn)換這一程序,可以實(shí)現(xiàn)小寫(xiě)字母向大寫(xiě)字母的轉(zhuǎn)換,還可以實(shí)現(xiàn)十進(jìn) 制數(shù)向二進(jìn)制數(shù)的轉(zhuǎn)換;然后再把計(jì)算器和代碼轉(zhuǎn)換結(jié)合起來(lái),做成多功能計(jì)算器。 可是真正實(shí)現(xiàn)起來(lái)遇到一個(gè)問(wèn)題,就是在十進(jìn)制向二進(jìn)制轉(zhuǎn)換的時(shí)候,是通過(guò)調(diào)用子 程序轉(zhuǎn)換的,轉(zhuǎn)換完之后不能返回原來(lái)調(diào)用的地方,而是返回程序的開(kāi)始。最后只把 字母轉(zhuǎn)換功能加到計(jì)算器里,最后完成本次的課程設(shè)計(jì)。下圖 17 是二進(jìn)制轉(zhuǎn)換的程序 運(yùn)行界面: 廣東海洋大學(xué)微型計(jì)算機(jī)原理及應(yīng)用課程設(shè)計(jì) 12 圖 17 當(dāng)然我還有很多不足之處,比如知識(shí)掌握的不夠全面,研究的深度不夠,寫(xiě)出的 代碼效率不高,不能做到精簡(jiǎn)。這些都是我需要去改進(jìn)的地方。我會(huì)在以后的學(xué)習(xí)中 多加注意。 通過(guò)這次課程設(shè)計(jì),最深體會(huì)就是編程調(diào)試是很需要耐心的,就算思路清晰,算 法正確,但是當(dāng)要寫(xiě)的代碼比較多的時(shí)候,特別是使用匯編編程,還是會(huì)遇到很多問(wèn) 題的。使用的跳轉(zhuǎn)比較多,而且是對(duì)寄存器和存儲(chǔ)器進(jìn)行操作,同時(shí)考慮標(biāo)志位的影 響,用起來(lái)比較繁瑣,在調(diào)試的時(shí)候經(jīng)常會(huì)發(fā)現(xiàn)很漏洞,但是只要認(rèn)真思考和調(diào)試還 是會(huì)解決問(wèn)題的。 最后感謝老師的辛苦指導(dǎo),使我的設(shè)計(jì)能過(guò)成功實(shí)現(xiàn),使我完成了這次課程設(shè)計(jì)。 另外感謝網(wǎng)絡(luò)給予我便利,讓我找到有些相關(guān)資料幫我解決了一些問(wèn)題。同時(shí)也感謝 與我一起學(xué)習(xí)、探討,一起研究、查找資料的同學(xué)們。 參考文獻(xiàn) 微型計(jì)算機(jī)原理及應(yīng)用 鄧學(xué)堅(jiān) 周斌 編著 廣東海洋大學(xué)微型計(jì)算機(jī)原理及應(yīng)用課程設(shè)計(jì) 13 ut2apodfxxc02gybkskcww97mrqqwhoj5tl15zt6jipyytycummtarp3v1n5luizi3xh3bhwyreko8d9g7nmzqowpjetldrw08gvs8dsdqqygc3ce7moo2tlf0jf1gk74iuxybmtivr97ckrfvqult5fn2t6mpjr6rbzvpsortzvij5nb5ndvvsr4iwr1twlfkglspzuhrjq3cmzu98euouijdlszqpmvrw9zkupxf8wfug9l2g9277g2rtipa1ypczeuqxpkbhtvdcooqozxuz3vjrzmocijym62zchmeootyes8ebmm932tbz2yo09rtszeys8zrd2yktj8l6jeazvajnfbtrylvsm6ofbftoxvrffn7owiygjlamkunxjybz5rrb7r4vsur9zpfzfmfsjhcfca37lnw2vvlrkn7r8psz1bn6oric5hu5z6hcxayqynpog8duybawqsl20csg06dh
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度場(chǎng)營(yíng)銷(xiāo)分公司智慧城市項(xiàng)目合作協(xié)議3篇
- 二零二五版商業(yè)街區(qū)場(chǎng)地租賃合作協(xié)議書(shū)6篇
- 2025年度高新技術(shù)產(chǎn)業(yè)常年法律顧問(wèn)聘用協(xié)議3篇
- 二零二五年度企業(yè)稅收籌劃與稅收籌劃實(shí)施合同3篇
- 二零二五年度出口退稅證明開(kāi)具及國(guó)際金融服務(wù)合同3篇
- 二零二五年度港口碼頭租賃及港口貨物裝卸、倉(cāng)儲(chǔ)及配送服務(wù)協(xié)議8篇
- 二零二五年度土地承包經(jīng)營(yíng)權(quán)糾紛調(diào)解合同-@-2
- 2025草原禁牧與水資源保護(hù)管理協(xié)議合同3篇
- 2025年度個(gè)人個(gè)人借款合同信用評(píng)估標(biāo)準(zhǔn)3篇
- 二零二五食用油產(chǎn)品包裝設(shè)計(jì)與印刷合同
- 中考模擬考試化學(xué)試卷與答案解析(共三套)
- 新人教版五年級(jí)小學(xué)數(shù)學(xué)全冊(cè)奧數(shù)(含答案)
- 風(fēng)電場(chǎng)升壓站培訓(xùn)課件
- 收納盒注塑模具設(shè)計(jì)(論文-任務(wù)書(shū)-開(kāi)題報(bào)告-圖紙)
- 博弈論全套課件
- CONSORT2010流程圖(FlowDiagram)【模板】文檔
- 腦電信號(hào)處理與特征提取
- 高中數(shù)學(xué)知識(shí)點(diǎn)全總結(jié)(電子版)
- GB/T 10322.7-2004鐵礦石粒度分布的篩分測(cè)定
- 2023新譯林版新教材高中英語(yǔ)必修一重點(diǎn)詞組歸納總結(jié)
- 蘇教版四年級(jí)數(shù)學(xué)下冊(cè)第3單元第2課時(shí)“常見(jiàn)的數(shù)量關(guān)系”教案
評(píng)論
0/150
提交評(píng)論