




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 微型計(jì)算機(jī)原理及應(yīng)用微型計(jì)算機(jī)原理及應(yīng)用課程設(shè)計(jì)課程設(shè)計(jì) 簡易計(jì)算器的設(shè)計(jì) 姓名陳* 院系信息學(xué)院自動化系 班級* 學(xué)號200911* 時(shí)間2011 年 12 月 29 日 目目 錄錄 摘要 .i introduction.ii 1課程設(shè)計(jì)目的與任務(wù).1 1.1設(shè)計(jì)目的.1 1.2設(shè)計(jì)任務(wù).1 2基本要求.1 3簡易計(jì)算器的設(shè)計(jì).2 3.1程序設(shè)計(jì)流程圖.2 3.2程序基本算法.3 3.3程序源代碼.3 3.4程序調(diào)試.8 4課程設(shè)計(jì)總結(jié)與心得.11 參考文獻(xiàn).12 摘要 本次課程設(shè)計(jì)是通過使用 emu8086 匯編語言編程軟件實(shí)現(xiàn)較復(fù)雜程序的設(shè)計(jì)。該 課程設(shè)計(jì)的內(nèi)容為采用匯編語言設(shè)計(jì)一個(gè)簡
2、易計(jì)算器,界面顯示要求用鍵盤分別輸入 兩個(gè)隨機(jī)數(shù),完成加法,減法,乘法和除法的運(yùn)算,然后將運(yùn)算結(jié)果顯示出來。該設(shè) 計(jì)只能運(yùn)行簡單正整數(shù)間的單步加減乘除運(yùn)算,不能識別小數(shù)。除法中的結(jié)果可以精 確到 3 位小數(shù),減法可以顯示負(fù)數(shù)的結(jié)果。采用 dos 調(diào)用(int 21h)來完成輸入和輸 出,輸出字符串操作。通過這次設(shè)計(jì)實(shí)踐能夠進(jìn)一步加深對專業(yè)知識和理論知識學(xué)習(xí) 的認(rèn)識和理解,使自己的設(shè)計(jì)水平和對所學(xué)的知識的應(yīng)用能力以及分析問題解決問題 的能力得到全面提高。 關(guān)鍵詞:微機(jī)原理;計(jì)算器;匯編 introduction this course is designed to through the use
3、 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, multiplicatio
4、n, 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 displa
5、y 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 knowl
6、edge and the application ability and the ability to analyse and solve questions fully improve. keywords: microcomputer principle;calculator;assembly language 簡易計(jì)算器的設(shè)計(jì) 自動化 1091,200911632102,陳焯堅(jiān) 1課程設(shè)計(jì)目的與任務(wù) 1.1設(shè)計(jì)目的 為了使學(xué)生加深對所學(xué)的微機(jī)原理知識的理解,培養(yǎng)學(xué)生的專業(yè)素質(zhì),提高其利 用微機(jī)原理知識處理問題的能力,為今后專業(yè)課程的學(xué)習(xí)、畢業(yè)設(shè)計(jì)和工作打下良好 的基礎(chǔ)。使學(xué)生能比較扎實(shí)地掌
7、握微機(jī)原理的基礎(chǔ)知識和基本理論,掌握控制系統(tǒng)及 有關(guān)設(shè)備的分析、開發(fā)等基本技能,受到必要工程訓(xùn)練、初步的科學(xué)研究方法訓(xùn)練和 實(shí)踐鍛練,增強(qiáng)分析問題和解決問題的能力,了解微機(jī)原理和接口技術(shù)的新發(fā)展。 1.2設(shè)計(jì)任務(wù) 本次課程設(shè)計(jì)有四個(gè)任務(wù)可供選擇,這里選擇設(shè)計(jì)一個(gè)簡易計(jì)算器,要求能正確完成 加、減、乘、除四則運(yùn)算。 2基本要求 本次課程設(shè)計(jì),1 人 1 題,可以相互討論,但設(shè)計(jì)報(bào)告由學(xué)生獨(dú)立完成,不得互 相抄襲。教師的主導(dǎo)作用主要在于指明設(shè)計(jì)思路,啟發(fā)學(xué)生獨(dú)立設(shè)計(jì)的思路,解答疑 難問題和按設(shè)計(jì)進(jìn)度進(jìn)行階段審查。學(xué)生必須發(fā)揮自身學(xué)習(xí)的主動性和能動性,主動 思考問題、分析問題和解決問題,而不應(yīng)處處被
8、動地依賴指導(dǎo)老師。同學(xué)應(yīng)積極主動 的提出問題、解決問題、討論問題,互相幫助和啟發(fā)。 學(xué)生在設(shè)計(jì)中可以引用所需的參考資料,避免重復(fù)工作,加快設(shè)計(jì)進(jìn)程,但必須 和題目的要求相符合,保證設(shè)計(jì)的正確。指導(dǎo)教師要引導(dǎo)學(xué)生學(xué)會掌握和使用各種已 有的技術(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)行,問題答疑與調(diào)試和方案修改相結(jié)合,提高設(shè)計(jì)的效率,保 證按時(shí)完成設(shè)計(jì)工作并交出合格的設(shè)計(jì)報(bào)告。 3簡易計(jì)算器的設(shè)計(jì) 設(shè)
9、計(jì)一個(gè)簡易計(jì)算器過程包括:確定功能,畫流程圖,確定算法,編寫程序,程 序調(diào)試。 設(shè)計(jì)工具:個(gè)人電腦,emu8086。設(shè)計(jì)語言:8086 匯編語言 3.1程序設(shè)計(jì)流程圖 圖 1 1/2? 輸入單字符 開始 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 流程圖介紹: 進(jìn)入 dos 界面,首先顯示出計(jì)算器功能介紹和個(gè)人信息,然后界面輸出操提示要 求用戶輸入 1 或者 2 選擇功能,1 表示字母轉(zhuǎn)換功能,2
10、 表示計(jì)算功能。 字母轉(zhuǎn)換功能,只能從小寫向大寫轉(zhuǎn)換,當(dāng)用戶輸入字母時(shí),先判斷是否為小寫 字母,不是則重新進(jìn)入功能選擇界面,是就開始轉(zhuǎn)換并且顯示在界面大寫。 計(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è)緩沖器單元,對于不符合要求的數(shù)就返回重新輸入第 一個(gè)數(shù)據(jù)。輸入完第一個(gè)數(shù)后,界面再要求操用戶輸進(jìn)第二個(gè)數(shù),同樣的方法判斷再 進(jìn)行轉(zhuǎn)換數(shù)制,在存到緩沖期的下一個(gè)單元。這里轉(zhuǎn)換的方法是采用“乘 10 加次位” 的方法。接下來界面再提示用戶輸入“+,-,*,/”其
11、中一個(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é)果會是負(fù)數(shù),所以,首先顯示出“-”號,再將被減數(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ù),就要首先把 asci
12、i 碼先轉(zhuǎn)換成十進(jìn)制,再把十進(jìn)制數(shù)轉(zhuǎn)成可以運(yùn)算的十六進(jìn) 制。例如輸入 112,系統(tǒng)存放的是 31h、31h、32h,通過減去 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)小寫向大寫轉(zhuǎn)換,只要把相應(yīng)的 ascii 碼進(jìn)行運(yùn)算就可以,利用這個(gè)方 法可以實(shí)現(xiàn)大小寫互換,這里只是簡單嘗試寫出小寫向大寫轉(zhuǎn)換
13、。例如,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)換, 對應(yīng) ascii 碼加上 20h 即可。 3.3程序源代碼 ;- - ; *數(shù)據(jù)段* ;- - data segment ;-計(jì)算器功能信息字符串定義- - 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
14、,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,0d
15、h,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ù)字符串說明 array2 db 0dh,0ah,please enter another number: $;輸入第二個(gè)數(shù)字符串說
16、明 array3 db 0dh,0ah,the result is : $;輸出結(jié)果字符串說明 array4 db 0dh,0ah,the number is wrong,please input again : $;輸入錯(cuò)誤提示字符串說明 string db 0dh,0ah,please enter the operation(+,-,*,/) : $ ;運(yùn)算字符串說明 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í)回 車,轉(zhuǎn)行說明 yushu
17、dw 4 dup(0) data ends ;- - ; *代碼段* ;- - code segment assume cs:code,ds:data ;段寄存器 說明偽指令 start:mov ax, data mov ds,ax ;往 ds 段寄存 器送數(shù)據(jù)段基址 ;-輸出計(jì)算器的功能相關(guān)信息(調(diào)用 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
18、,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 ;輸出回車換行 ;- - ;*功能選擇* ;- - stac: mov dx,offset str13 ;取 str13 偏 移地址送進(jìn) dx mov ah,9 int 21h mov ah,01h int 21
19、h ;鍵盤輸入單字符 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 都不是,則回 車換行 mov ah,9 int 21h jmp stac ;跳回 stac,重新選擇 功能 ;- - ;*字母轉(zhuǎn)換* ;- - lc: mov dx,offset str9 mov ah,9 int 21h mov dx,offset str1
20、0 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 號輸出字符串功能,輸出 d
21、x 內(nèi)容即 array1 內(nèi)容 - input1: mov dx,offset array1 ;取 array1 偏移地址送進(jìn) dx mov ah,9 int 21h ;-調(diào)用 0a 號輸入字符串功能,輸入內(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 a
22、l,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 就跳到 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
23、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í)行
24、 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 in
25、t 21h ;調(diào)用 01 號輸入單字符功能,記運(yùn)算符 mov ah,01 ;鍵盤輸入單字符(運(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)算符為/,則跳到
26、 div4 處,若不是則繼續(xù)往下執(zhí)行 cmp al,e ;比較輸入運(yùn)算符是否為e jz last ;輸入運(yùn)算符為e,則跳到 last 處,若不是則繼續(xù)往下執(zhí)行 jmp input3 ;如果輸入運(yùn)算不是以上,則 從新返回到 input3 處 ;- ;* 加法運(yùn)算* ;- add1: ;-回車,換行顯示- 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,
27、offset crlf mov ah,9 int 21h ;輸出回車換行 jmp stac ;- ;* 減法運(yùn)算* ;- sub2: ;-回車,換行顯示- 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 mo
28、v ah,9 int 21h ;輸出回車換行 jmp stac ;-負(fù)數(shù)處理- kk: sub bx,ax mov ax,bx call hex_asc1 mov dx,offset crlf mov ah,9 int 21h ;輸出回車換行 jmp stac ;- ;* 乘法運(yùn)算* ;- mul3: ;-回車,換行顯示- 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 cr
29、lf mov ah,9 int 21h jmp stac ;- ;* 除法運(yùn)算* ;- div4: ;-回車,換行顯示- 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
30、 dl,2eh mov ah,2 ; 輸出小數(shù)點(diǎn) 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)換成對應(yīng)的十六進(jìn) 制數(shù)) ;- asc_hex proc xor cx,cx ;清空 cx,cx=0 mov cl,buff1 ;存入字符數(shù) jcxz abcd ;如果 cx=0
31、,即輸 入字符數(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)換成相對應(yīng)的十進(jìn)制碼(09) ,以 bx 作為指針 inc bx loop l0 pop bx ;釋放原來?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ù) m
32、ul 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é)束碼,用來 后面調(diào)用 09 號輸出功能的停止 mov cx,5 ;循環(huán)次數(shù),最多不 超過 5 位十進(jìn)制數(shù),因?yàn)?16 位二進(jìn)制數(shù)
33、即 4 位 16 進(jìn)制 數(shù)不超過 65535 ha1: mov dx,0 ;dx 用來放余數(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 次, 對應(yīng)上面的 si 所設(shè)的單元數(shù) ha2: inc si mov al,si cmp al,30h ;判斷是否為 0,若 是,則繼續(xù)循環(huán)。 jnz no
34、tzearo ;若不是則跳到 nozearo,顯示出該字符 loop ha2 inc si notzearo: ;-09 號輸出字符串功能調(diào)用,顯示出內(nèi)容- - mov dx,si mov ah,9 int 21h ret 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é)束碼,用來后 面調(diào)
35、用 09 號輸出功能的停止 mov cx,5 ;循環(huán)次數(shù),最多不 超過 5 位十進(jìn)制數(shù),因?yàn)?16 位二進(jìn)制數(shù)即 4 位 16 進(jìn)制 數(shù)不超過 65535 ab1: mov dx,0 ;dx 用來放余數(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 次, 對應(yīng)上面的 si 所設(shè)的單元數(shù) ab2: inc si
36、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è)-號,表示結(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
37、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 3.4程序調(diào)試 功能選擇界面: 圖 2 圖 3 如圖 2 所示,運(yùn)行程序,首先顯示計(jì)算器的相關(guān)信息,主要利用系統(tǒng)功
38、能調(diào)用實(shí)現(xiàn)。然后是輸 出提示要求用戶通過輸入 1 或者 2 選擇功能。 字母轉(zhuǎn)換功能 功能 1 可以實(shí)現(xiàn)小寫字母向大寫字母的轉(zhuǎn)換,當(dāng)用戶輸入 1 會進(jìn)入圖 3 界面。提示用戶輸入字母, 注意要是小寫,如果輸入不是小寫則會提示重新輸入如圖 4 所示。輸入正確的小寫字母自動轉(zhuǎn)換并 且返回功能選擇。 圖 4(上) 圖 6(下) 圖 5(上) 圖 7(下) 加法運(yùn)算功能 如圖 6 所示,任意輸入兩個(gè)正整數(shù)相加,結(jié)果正確。先輸入第一個(gè)數(shù),然后再輸入第二個(gè)數(shù), 接著輸入運(yùn)算符,這樣程序就會自動輸出結(jié)果。注意運(yùn)算兩數(shù)相加的兩個(gè)數(shù)不能超過五位數(shù),并且 結(jié)果不能超過 65535 。 減法運(yùn)算功能 如圖 7 所示,操作方法和加法相同。雖然不可以進(jìn)行負(fù)數(shù)間的運(yùn)算,但是可以輸出負(fù)數(shù),如圖 8 所示。 圖 8 圖 9 乘法運(yùn)算功能 如圖 9 所示,操作方法和加法相同。 除法運(yùn)算功能 如圖 10 所示,操作方法和加法相同。除法輸出結(jié)果精確到 3 位小數(shù),但是不會四舍五入,而 是直接舍去后面剩下的小數(shù)。如圖 11 所示。 圖 10 圖 11 輸入錯(cuò)誤提示功能 以下述說的前提是:輸入的字符非大寫 e。 在功能選擇的時(shí)候,選擇錯(cuò)誤即輸入的既不是 1 也不是 2,則會提示重新選擇,如圖 12 所示
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度寵物照料保姆雇傭合同協(xié)議書
- 商鋪轉(zhuǎn)讓服務(wù)合同
- 2025年度撫養(yǎng)權(quán)變更與財(cái)產(chǎn)分割調(diào)解合同模板
- 2025年度個(gè)人挖機(jī)租賃與施工驗(yàn)收服務(wù)合同
- 2025年度房東轉(zhuǎn)租合同-科技園區(qū)房產(chǎn)租賃
- 2025年度醫(yī)院醫(yī)護(hù)人員崗位調(diào)整與勞動合同
- 2025年度互聯(lián)網(wǎng)企業(yè)期權(quán)投資合作協(xié)議
- 2025年度影視作品宣傳策劃代理合同
- 二零二五年度數(shù)字經(jīng)濟(jì)領(lǐng)域聘用業(yè)務(wù)經(jīng)理專屬合同
- 2025年度原油出口退稅及關(guān)稅優(yōu)惠合同
- 有機(jī)農(nóng)業(yè)概述課件
- 學(xué)校托幼機(jī)構(gòu)腸道傳染病消毒隔離及防控要求
- 生產(chǎn)加工型小微企業(yè)安全管理考試(含答案)
- A類《職業(yè)能力傾向測驗(yàn)》貴州省畢節(jié)地區(qū)2024年事業(yè)單位考試考前沖刺試卷含解析
- 沙子檢測報(bào)告
- 2023-2024學(xué)年部編版必修下冊 1-1 《子路、曾皙、冉有、公西華侍坐》教案2
- 無線電測向幻燈教材課件
- 第1課《我們的閑暇時(shí)光》課件
- 商務(wù)ktv項(xiàng)目計(jì)劃書
- 腦血管造影術(shù)護(hù)理查房課件
- 《愿望的實(shí)現(xiàn)》全文
評論
0/150
提交評論