鍵盤錄入數(shù)據(jù)的轉(zhuǎn)換與顯示微機(jī)原理課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  微機(jī)原理課程設(shè)計(jì)</b></p><p>  題 目: 鍵盤錄入數(shù)據(jù)的轉(zhuǎn)換與顯示 </p><p>  初始條件:從鍵盤讀入二個五位十進(jìn)制數(shù)(1位符號位+4位數(shù)值位),并將這二個十進(jìn)制數(shù),分別轉(zhuǎn)換為二進(jìn)制數(shù),然后求其和,再將和以十進(jìn)制形式進(jìn)行顯示。按Q退出程序。&

2、lt;/p><p>  要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p><b>  設(shè)計(jì)任務(wù)及要求分析</b></p><p><b>  方案比較及認(rèn)證說明</b></p><p><b>  系統(tǒng)原理闡述</b></p&

3、gt;<p>  硬件設(shè)計(jì)課題需要說明:硬件原理,電路圖,采用器件的功能說明</p><p>  軟件設(shè)計(jì)課題需要說明:軟件思想,流程圖,源程序及程序注釋</p><p><b>  調(diào)試記錄及結(jié)果分析</b></p><p><b>  總結(jié)</b></p><p><b>

4、;  參考資料</b></p><p>  附錄:芯片資料或程序清單,軟件演示屏幕拷貝圖或硬件實(shí)物圖</p><p>  摘要:本文所設(shè)計(jì)的程序是運(yùn)行于硬件和DOS操作系統(tǒng)下的,本程序通過調(diào)用DOS下的基本輸入輸出中斷,實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出。程序中有兩個子程序,輸入的兩個五位的十進(jìn)制數(shù)通過調(diào)用一個叫ASC_TO_BIN的子程序可以將其轉(zhuǎn)換成二進(jìn)制數(shù),然后求兩個二進(jìn)制數(shù)的和,求和

5、完成后,再調(diào)用一個叫BIN_TO_ASCII的子程序?qū)⒍M(jìn)制和轉(zhuǎn)換成相應(yīng)的ASCII碼,調(diào)用DOS輸出中斷顯示在屏幕上,最后看用戶是否輸入的是Q或者q,若是則程序結(jié)束,若不是則程序循環(huán)。</p><p>  關(guān)鍵字:8086;DOS系統(tǒng);ASCII碼;中斷</p><p><b>  目錄</b></p><p>  1設(shè)計(jì)任務(wù)及要求分析1&

6、lt;/p><p><b>  1.1設(shè)計(jì)任務(wù)1</b></p><p><b>  1.2要求分析1</b></p><p>  2方案比較及認(rèn)證說明2</p><p><b>  3系統(tǒng)原理闡述3</b></p><p>  3.1統(tǒng)設(shè)計(jì)的軟硬件

7、環(huán)境3</p><p>  3.2統(tǒng)設(shè)計(jì)中用到的DOS調(diào)用3</p><p><b>  4軟件設(shè)計(jì)說明5</b></p><p>  4.1 ASCII碼轉(zhuǎn)換成二進(jìn)制算法實(shí)現(xiàn)5</p><p>  4.2二進(jìn)制轉(zhuǎn)換成ASCII碼算法實(shí)現(xiàn)5</p><p>  4.3主程序結(jié)構(gòu)分析5&

8、lt;/p><p>  4.4子程序結(jié)構(gòu)分析6</p><p>  4.5中斷程序的結(jié)構(gòu)分析8</p><p>  5調(diào)試記錄及結(jié)果分析9</p><p><b>  5.1調(diào)試記錄9</b></p><p>  5.2調(diào)試結(jié)果分析9</p><p>  總結(jié)和心得體

9、會10</p><p><b>  參考文獻(xiàn)11</b></p><p>  附錄一 源程序和程序注釋12</p><p>  附錄二 程序運(yùn)行結(jié)果截圖16</p><p>  附錄三 本科生課程設(shè)計(jì)成績評定表17</p><p>  附錄四 評定項(xiàng)目表18</p>&l

10、t;p>  鍵盤錄入數(shù)據(jù)的轉(zhuǎn)換與顯示</p><p>  1設(shè)計(jì)任務(wù)及要求分析</p><p><b>  1.1設(shè)計(jì)任務(wù)</b></p><p>  從鍵盤讀入二個五位十進(jìn)制數(shù)(1位符號位+4位數(shù)值位),并將這二個十進(jìn)制數(shù),分別轉(zhuǎn)換為二進(jìn)制數(shù),然后求其和,再將和以十進(jìn)制形式進(jìn)行顯示。按Q退出程序。</p><p>

11、;<b>  1.2要求分析</b></p><p>  從設(shè)計(jì)任務(wù)中可以看出此次課設(shè)要求是:從鍵盤中輸入兩個五位十進(jìn)制數(shù)(格式如-8888、+9999等),顯然通過鍵盤輸入的此類十進(jìn)制數(shù)實(shí)際上輸入的是對應(yīng)字符的ASCII碼,若想求兩個數(shù)的和必須先將這兩個數(shù)對應(yīng)的二進(jìn)制數(shù)求出,然后再求其和,求和完成后將二進(jìn)制數(shù)再轉(zhuǎn)換成對應(yīng)的十進(jìn)制數(shù)用顯示器輸出,完成兩個五位十進(jìn)制數(shù)的求和然后以十進(jìn)制的形式顯

12、示。</p><p>  2方案比較及認(rèn)證說明</p><p>  輸入輸出方式的比較。</p><p>  方案一:BIOS功能調(diào)用方式輸入輸出數(shù)據(jù)。此方案使用相對復(fù)雜一些,而其我們對BIOS功能調(diào)用不是很熟悉。</p><p>  方案二:MSDOS功能調(diào)用的方式輸入輸出數(shù)據(jù)。此方案簡單實(shí)用、由于我們對MSDOS比較熟悉,所以用起來十分方

13、便。綜上,我們選用方案二的輸入輸出方式,輸入數(shù)據(jù)和輸出數(shù)據(jù)。</p><p><b>  3系統(tǒng)原理闡述</b></p><p>  3.1統(tǒng)設(shè)計(jì)的軟硬件環(huán)境</p><p>  我們設(shè)計(jì)鍵盤錄入數(shù)據(jù)的轉(zhuǎn)換與顯示的硬件環(huán)境是X86計(jì)算機(jī)平臺的IBM-PC兼容機(jī),開發(fā)的軟件環(huán)境是Windows XP操作系統(tǒng)下的MFPCI98匯編編譯環(huán)境。雖然我們

14、不是在標(biāo)準(zhǔn)的8086 IBM_PC平臺下編程,也不是標(biāo)準(zhǔn)的DOS操作系統(tǒng)環(huán)境下編程;但是我們的硬件平臺是兼容8086的X86計(jì)算機(jī)平臺,軟件平臺是更高級并且兼容DOS的Windows XP操作系統(tǒng),所以我們程序運(yùn)行的結(jié)果絕對跟標(biāo)準(zhǔn)8086IBM-PC平臺上運(yùn)行的結(jié)果完全一樣。</p><p>  3.2統(tǒng)設(shè)計(jì)中用到的DOS調(diào)用</p><p>  DOS是美國Microsoft公司為IBM

15、-PC研制的磁盤操作系統(tǒng)(Disk Operating System),也稱為IBM-DOS或MS-DOS。DOS不僅為用戶提供了許多使用的指令,而其還有用戶可以直接調(diào)用的上百個常用子程序。對這些子程序的調(diào)用,稱為系統(tǒng)功能調(diào)用。這些子程序的功能主要是進(jìn)行磁盤的讀寫、控制管理、內(nèi)存管理、基本輸入輸出管理等。在使用時,用戶不需要關(guān)心和了解各種IO接口硬件的詳細(xì)情況就能直接完成對IO接口的控制和管理。為了使用方便,將所有子程序從1開始循序編號

16、,這些編號稱為DOS功能調(diào)用號。其調(diào)用過程為:</p><p>  DOS功能調(diào)用號送AH寄存器。</p><p>  如果需要,按要求給定輸入?yún)?shù)(有的不需要輸入?yún)?shù))。</p><p>  寫入中斷指令“INT 21H”。</p><p>  下面介紹一些在本程序中用到的一些DOS輸入輸出功能。</p><p> 

17、 1.單字符輸入--1號</p><p>  功能:從鍵盤輸入一個字符。</p><p><b>  輸入?yún)?shù):無。</b></p><p>  輸出參數(shù):AL=ASCII碼。</p><p>  2.單字符輸出--2號</p><p>  功能:在屏幕上顯示1個字符(ASCII碼)。</p

18、><p>  輸入?yún)?shù):DL=ASCII碼。</p><p><b>  輸出參數(shù):無。</b></p><p>  3.多字符輸入——0AH</p><p>  功能:多個字符輸入到緩沖區(qū)。</p><p>  輸入?yún)?shù):DS:DX=輸入緩沖區(qū)首地址。</p><p>  輸

19、出參數(shù):DS: DX=輸入字符串所在緩沖區(qū)地址。</p><p>  設(shè)置緩沖區(qū)要注意以下幾點(diǎn):</p><p>  緩沖區(qū)第1個字節(jié)存放預(yù)定字符個數(shù),最多255個。</p><p>  緩沖區(qū)第2個字節(jié)保留,用于調(diào)用返回時存放實(shí)際輸入的字符個數(shù)。</p><p>  緩沖區(qū)第3個字節(jié)開始,存放輸入的字符。</p><p&

20、gt;  緩沖區(qū)要考慮留一個字節(jié)作為回車符。</p><p>  4多字符輸出——9號</p><p>  功能:多個字符輸出到屏幕顯示。</p><p>  輸入?yún)?shù):DS:DX=輸出字符緩沖區(qū)首地址。</p><p><b>  輸出參數(shù):無。</b></p><p>  該功能對輸出字符的個

21、數(shù)沒有要求,但是輸出字符串要以‘$’結(jié)束。</p><p>  5過程終止——4CH號</p><p>  該調(diào)用的功能是結(jié)束當(dāng)前程序,并且返回調(diào)用它的程序。如果在DEBUG狀態(tài)下運(yùn)行</p><p>  則返回DEBUG;如果在DOS下運(yùn)行,則返回DOS。在匯編語言程序結(jié)束處加上“MOV?。粒?,4C00H”和“INT 21H”兩條指令,以利于程序執(zhí)行完畢,返回操作

22、系統(tǒng)控制。</p><p><b>  4軟件設(shè)計(jì)說明</b></p><p>  4.1 ASCII碼轉(zhuǎn)換成二進(jìn)制算法實(shí)現(xiàn)</p><p>  首先將其轉(zhuǎn)換成十進(jìn)制數(shù)字,再用累加和乘10加X的方法變成二進(jìn)制數(shù),如將</p><p>  1358轉(zhuǎn)換為二進(jìn)制數(shù),可先將累加和賦0,再計(jì)算(((1*10+3)*10+5)*1

23、0+8),結(jié)果為二</p><p>  進(jìn)制數(shù),再由符號位決定是否需要求補(bǔ)。</p><p>  4.2二進(jìn)制轉(zhuǎn)換成ASCII碼算法實(shí)現(xiàn)</p><p>  AX中的數(shù)范圍在+32767到-32768之間,先檢查AX中的符號位,以決定輸出“+”還是“-”,若是負(fù)數(shù),應(yīng)先求補(bǔ),得到原碼后即可與正數(shù)作統(tǒng)一處理。轉(zhuǎn)換方法為將被轉(zhuǎn)換的二進(jìn)制數(shù)先除以10000,商;即為萬位數(shù)

24、,再將余數(shù)除以1000,商為千位數(shù),以此類推,求出百、十位數(shù),剩下的為個位數(shù)。最后,將各個數(shù)加上30H,即成為對應(yīng)字符。</p><p>  4.3主程序結(jié)構(gòu)分析</p><p>  程序執(zhí)行一次一共用了9次21H號中斷。第1、3、5、6、7次調(diào)用前AH寫入的是9,所以這幾次調(diào)用INT21是在屏幕上顯示DX為首地址的字符串,也就是顯示的是響應(yīng)的提示信息和兩個數(shù)之和的結(jié)果;第2、4次INT2

25、1H中斷調(diào)用前AH寫入了10,所以這兩次調(diào)用的作用是輸入兩個五位十進(jìn)制數(shù),且在沒個五位的十進(jìn)制數(shù)輸入后,立即調(diào)用ASCII_TO_BIN函數(shù)轉(zhuǎn)換成相應(yīng)的二進(jìn)制數(shù);第八次INT21H調(diào)用之前AH中寫入了1,該次輸入一個字符,在把輸入的該字符和Q和q比較,看是否是其中的一個,若是則程序結(jié)束,此時在AH中寫入4CH中,再調(diào)用INT21H,顯然是把CPU交給操作系統(tǒng);若不是則程序回到開始處,程序循環(huán)。主程序的流程圖如圖4-1所示。</p&

26、gt;<p>  圖4-1 主程序流程圖</p><p>  4.4子程序結(jié)構(gòu)分析</p><p>  ASC_TO_BIN(ASCII碼字符轉(zhuǎn)化成二進(jìn)制子函數(shù)),該函數(shù)的功能是五位ASCII碼十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù);在主程序中一共調(diào)用了兩次該函數(shù),分別是在輸入完成兩個五位十進(jìn)制數(shù)后。算法實(shí)現(xiàn)已在前面分析,這里不再重述,ASC_TO_BIN子程序的流程圖如圖4-2圖所示。&l

27、t;/p><p>  圖4-2 ASC_TO_BIN子程序流程圖</p><p>  BIN_TO_ASCII(將二進(jìn)制數(shù)轉(zhuǎn)換成相應(yīng)ASCII碼形式十進(jìn)制數(shù)函數(shù)),該函數(shù)的功能是將一個二進(jìn)制數(shù)轉(zhuǎn)化成對應(yīng)ASCII碼形式的十進(jìn)制數(shù),以便屏幕輸出。該子程序的算法實(shí)現(xiàn)已在前面說明,程序流程圖如圖4-3所示。</p><p>  圖4-3 BIN_TO_ASCII子程序流程圖&

28、lt;/p><p>  4.5中斷程序的結(jié)構(gòu)分析</p><p>  INT21H號中斷是一個系統(tǒng)中斷,中斷程序根據(jù)中斷前寫入AH中的值決定中斷的功能,前面已說明中斷程序的功能,中斷程序執(zhí)行的流程圖如圖4-4所示。</p><p>  圖4-4 中斷程序流程圖</p><p>  5調(diào)試記錄及結(jié)果分析</p><p>&l

29、t;b>  5.1調(diào)試記錄</b></p><p>  剛寫完程序第一次調(diào)試時,程序老是出錯,錯誤提示如圖5-1所示。</p><p>  圖5-1 調(diào)試出錯提示</p><p>  經(jīng)過反復(fù)認(rèn)真檢查和修改,最后終于找到了程序出錯的原因,原來是子程序調(diào)用出錯了,后面修改了子程序和子程序的調(diào)用方式,程序就可以正常運(yùn)行了。運(yùn)行結(jié)果如圖5-2所示。<

30、;/p><p>  圖5-2 正確運(yùn)行的結(jié)果</p><p><b>  5.2調(diào)試結(jié)果分析</b></p><p>  從圖5-2和附錄二中可以看出,程序運(yùn)行結(jié)果完全滿足預(yù)期要求。程序能夠完成兩個五位十進(jìn)制數(shù)的求和,并顯示結(jié)果。并能實(shí)現(xiàn)按Q或q推出程序。</p><p><b>  總結(jié)和心得體會</b&g

31、t;</p><p>  通過這次微機(jī)原理與接口技術(shù)課程設(shè)計(jì),加強(qiáng)了我們動手、思考和解決問題的能力。通過參加這次的課程設(shè)計(jì),我學(xué)到了很多無法在課堂上學(xué)到的知識。在課堂上我們學(xué)習(xí)的都是理論知識,而課程設(shè)計(jì)是鍛煉我們把那些理論運(yùn)用到我們實(shí)際的生活中?,F(xiàn)在,我對課設(shè)做以下幾點(diǎn)總結(jié):</p><p> ?。?)通過微機(jī)原理與接口技術(shù)的課程設(shè)計(jì),使我認(rèn)識到計(jì)算機(jī)技術(shù)廣泛應(yīng)用于現(xiàn)代眾多的領(lǐng)域中,起著越

32、來越重要的作用。隨著電子技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展和應(yīng)用,計(jì)算機(jī)應(yīng)用越來越廣泛,計(jì)算機(jī)應(yīng)用分為數(shù)值計(jì)算和非數(shù)值應(yīng)用兩大領(lǐng)域。非數(shù)值應(yīng)用又包括數(shù)據(jù)處理、知識處理 ,例如信息系統(tǒng)、工廠自動化、辦公室自動化、家庭自動化 、專家系統(tǒng)、模式識別、機(jī)器翻譯等領(lǐng)域。我們學(xué)習(xí)的微機(jī)原理與接口技術(shù)是現(xiàn)在計(jì)算機(jī)技術(shù)的基礎(chǔ),現(xiàn)在學(xué)好微機(jī)原理與接口技術(shù),好好的理論聯(lián)系實(shí)際,將來才能為我國的計(jì)算機(jī)技術(shù)發(fā)展做出貢獻(xiàn)。</p><p> ?。?)

33、通過微機(jī)原理與接口技術(shù)的課程設(shè)計(jì),使我學(xué)以致用,理論聯(lián)系實(shí)際,真正學(xué)到了實(shí)用的知識。上微機(jī)原理與接口技術(shù)的時候,我們學(xué)了8086CPU的內(nèi)部結(jié)構(gòu)、匯編語言、基本輸入輸出設(shè)備、定時器芯片、中斷控制、串行并行通信、AD、DA等是一些理論知識,很難、很經(jīng)典,雖然我們看上去懂了,也會做題了。通過課程設(shè)計(jì)時我們才知道,原來我們只是對理論略知一二,要是談到實(shí)際應(yīng)用我們真是無從下手。不過,還好我們有課程設(shè)計(jì),使我們剛學(xué)完理論知識,馬上又學(xué)以致用,使我

34、們的知識掌握的更加的牢固,同時也激發(fā)了我們創(chuàng)新的思想,真是一舉兩得,收獲不小啊。所以我們感謝課程設(shè)計(jì),感謝老師們認(rèn)真耐心的輔導(dǎo)我們的課程設(shè)計(jì),我希望以后我們可以多做一些類似的課程設(shè)計(jì)。</p><p> ?。?)通過微機(jī)原理與接口技術(shù)的課程設(shè)計(jì),本人搞懂了一直來沒有搞清楚的幾個問題。我們在學(xué)習(xí)微機(jī)原理與接口技術(shù)以前,我們學(xué)過C、VB等高級語言,一直以來我們都用高級語言編程的,一直以來我不明白高級語言是如何在CPU

35、中執(zhí)行和計(jì)算的通過學(xué)習(xí)匯編語言我明白了指令時如何執(zhí)行的。還有我很早就開始學(xué)習(xí)單片機(jī),當(dāng)然用的是高級語言C,一直以來我有都沒有明白堆棧的概念,不明白堆棧具體有什么用,該怎么用?通過匯編語言的學(xué)習(xí)我也明白堆棧的作用和堆棧具體應(yīng)該怎么用。</p><p>  總之,通過微機(jī)原理與接口技術(shù)的課計(jì),我獲益匪淺我,希望以后可以多做一些課設(shè)。</p><p><b>  參考文獻(xiàn)</b&

36、gt;</p><p>  [1] 周佩玲 彭虎 傅忠謙.微機(jī)原理與接口技術(shù).北京:電子工業(yè)出版社,2005 </p><p>  [2] 馮繼超.微機(jī)原理實(shí)驗(yàn)指導(dǎo)書.武漢:武漢理工大學(xué)教材中心,2008</p><p>  [3] 索梅.匯編語言程序設(shè)計(jì).北京:清華大學(xué)出版社,1994 </p><p>  [4] 朱冰.軟件工程.北京:北

37、京大學(xué)出版社,2003</p><p>  [5] 李昭原.數(shù)據(jù)庫原理及應(yīng)用.北京:科學(xué)技術(shù)出版社,2000</p><p>  [6] 周佩玲 彭虎 傅忠謙. 微機(jī)原理與接口技術(shù)學(xué)習(xí)指導(dǎo).北京:電子工業(yè)出版社,2008</p><p>  附錄一 源程序和程序注釋</p><p>  DATA SEGMENT COMMON</

38、p><p>  INPUT_MESSAGEDB 0AH , 'PLEASE INPUT A NUMBER(LESS THAN 5 FIGURES):$'</p><p>  QUIT_MESSAGE DB 0AH, 'ENTER Q OR q TO QUIT ANY OTHER TO CONTINUE:$' </p><p&g

39、t;  IN_ASC_BUF DB 6 ;十進(jìn)制數(shù)的輸入緩沖區(qū),共可接收6個字符</p><p>  DB ? ;保留,用于10號調(diào)用時DOS填入實(shí)際輸入字符個數(shù)</p><p>  DB 6 DUP(?) ;一個符號位,四位數(shù)字ASCII碼,加上一個回車符,共計(jì)6字符</p><p>  BIN_BU

40、F1 DW ? ;一個數(shù)轉(zhuǎn)換為二進(jìn)制后,放于此處</p><p>  OUTPUT_MESSAGE DB 0AH , 'THE SUM IS:' , '$'</p><p>  OUT_ASC_SUM DB 6 DUP(?) , '$' ;將二個數(shù)的和轉(zhuǎn)換為ASCII碼后,放

41、于此處,</p><p><b>  ;以供9號調(diào)用顯示</b></p><p><b>  DATA ENDS</b></p><p>  CODE SEGMENT</p><p>  ASSUME CS:CODE , DS:DATA</p><p>  sl PR

42、OC FAR</p><p><b>  START:</b></p><p>  MOV AX , DATA</p><p>  MOV DS , AX</p><p>  MOV DX , OFFSET INPUT_MESSAGE </p><p>  MOV AH , 9</p>

43、<p>  INT 21H ;提示輸入一個數(shù)</p><p>  MOV DX , OFFSET IN_ASC_BUF </p><p>  MOV AH , 10</p><p>  INT 21H ;讀取第一個數(shù)</p><p&g

44、t;  CALL ASC_TO_BIN ;轉(zhuǎn)換第一個數(shù)為二進(jìn)制</p><p>  MOV BIN_BUF1 , AX ;保存第一個數(shù)</p><p>  MOV DX , OFFSET INPUT_MESSAGE </p><p>  MOV AH , 9</p><p>  IN

45、T 21H ;提示輸入一個數(shù)</p><p>  MOV DX , OFFSET IN_ASC_BUF </p><p>  MOV AH , 10</p><p>  INT 21H ;讀取第二個數(shù)</p><p>  CALL ASC_T

46、O_BIN ; 轉(zhuǎn)換第二個數(shù)為二進(jìn)制</p><p>  ADD AX , BIN_BUF1 ;計(jì)算這二個數(shù)之和</p><p>  CALL BIN_TO_ASCII ;將和轉(zhuǎn)換為ASCII碼,以供顯示用</p><p>  MOV DX , OFFSET OUTPUT_MES

47、SAGE</p><p>  MOV AH , 9</p><p><b>  INT 21H</b></p><p>  MOV DX , OFFSET OUT_ASC_SUM</p><p>  MOV AH , 9</p><p><b>  INT 21H</b>&l

48、t;/p><p>  MOV DX,OFFSET QUIT_MESSAGE</p><p>  MOV AH , 9</p><p><b>  INT 21H</b></p><p>  MOV AH , 1</p><p>  INT 21H </p><p>  CM

49、P AL,'Q' </p><p><b>  JZ OVER</b></p><p>  CMP AL,'q' </p><p><b>  JZ OVER</b>&

50、lt;/p><p><b>  JMP START</b></p><p>  OVER: MOV AH , 4CH</p><p><b>  INT 21H</b></p><p><b>  sl ENDP</b></p><p>  A

51、SC_TO_BIN PROC </p><p>  ;ASCII碼轉(zhuǎn)換為二進(jìn)制數(shù)</p><p>  ;入口:十進(jìn)制數(shù)的ASCII碼在IN_ASC_BUF內(nèi)</p><p>  ;出口:轉(zhuǎn)換后的二進(jìn)制數(shù)在AX內(nèi)</p><p>  ;算法:先將其轉(zhuǎn)換成十進(jìn)制數(shù)字,再用累加和乘10加X的方法變成二進(jìn)制數(shù),如將</p><p

52、>  ;358轉(zhuǎn)換為二進(jìn)制數(shù),可先將累加和賦0,再計(jì)算(((0*10+3)*10+5)*10+8),結(jié)果為二</p><p>  ;進(jìn)制數(shù),再由符號位決定是否需要求補(bǔ)。</p><p>  MOV CL , IN_ASC_BUF+1 ;取字符個數(shù)</p><p>  MOV CH , 0</p><p>  DE

53、C CL ;扣除符號位</p><p>  MOV BX , OFFSET IN_ASC_BUF+3 ;調(diào)整BX指向十進(jìn)制數(shù)的最高位</p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></

54、p><p><b>  L1:</b></p><p>  MOV AL , [BX]</p><p>  AND AL , 0FH</p><p>  MOV [BX] , AL</p><p><b>  INC BX</b></p><p>  LO

55、OP L1 ;將所有數(shù)字字符的高四位清0,使之變?yōu)閿?shù)字值</p><p><b>  POP CX</b></p><p><b>  POP BX</b></p><p>  MOV AX , 0 ;累加

56、和賦初值</p><p>  MOV SI , 10</p><p><b>  L2:</b></p><p><b>  MUL SI</b></p><p>  ADD AL , [BX]</p><p>  ADC AH , 0</p><p>

57、;<b>  INC BX</b></p><p>  LOOP L2 ;累加乘10</p><p>  CMP IN_ASC_BUF+2 , '+'</p><p>  JZ L3 ;符號是正號,轉(zhuǎn)移

58、</p><p>  NEG AX ;符號是負(fù)號,求補(bǔ)</p><p><b>  L3:</b></p><p><b>  RET</b></p><p>  ASC_TO_BIN ENDP</p><p>

59、  BIN_TO_ASCII PROC </p><p>  ;將二進(jìn)制數(shù)轉(zhuǎn)換為對應(yīng)十進(jìn)制數(shù)數(shù)字的ASCII碼</p><p>  ;入口:二進(jìn)制數(shù)在AX內(nèi)</p><p>  ;出口:轉(zhuǎn)換后的ASCII碼在OUT_ASC_SUM變量內(nèi)</p><p>  ;算法:AX中的數(shù)范圍在+32767到-32768之間,先檢查AX中的符號位,以決定

60、輸出“+”</p><p>  ;還是“-”,若是負(fù)數(shù),應(yīng)先求補(bǔ),得到原碼后即可與正數(shù)作統(tǒng)一處理。轉(zhuǎn)換方法為將被轉(zhuǎn)換的</p><p>  ;二進(jìn)制數(shù)先除以10000,商;即為萬位數(shù),再將余數(shù)除以1000,商為千位數(shù),以此類推,求出</p><p>  ;百、十位數(shù),剩下的為個位數(shù)。最后,將各個數(shù)加上30H,即成為對應(yīng)字符。</p><p>

61、  MOV OUT_ASC_SUM , '+'</p><p>  CMP AX , 0</p><p>  JGE L4 ;不是負(fù)數(shù),轉(zhuǎn)移</p><p><b>  NEG AX</b></p><p>  MOV OUT_ASC_SUM , &

62、#39;-'</p><p><b>  L4:</b></p><p><b>  CWD</b></p><p>  MOV BX , 10000</p><p><b>  DIV BX</b></p><p>  ADD AL , 30H

63、 ;將萬位轉(zhuǎn)換為數(shù)字(商應(yīng)在AX內(nèi),但因?yàn)樯滩淮笥?,</p><p>  ;所以有效部分在AL內(nèi)) </p><p>  MOV OUT_ASC_SUM+1 , AL ;保存萬位數(shù)字</p><p>  MOV AX , DX ;將余數(shù)置入AX內(nèi),以便當(dāng)作

64、被除數(shù)</p><p><b>  CWD</b></p><p>  MOV BX , 1000</p><p><b>  DIV BX</b></p><p>  ADD AL , 30H</p><p>  MOV OUT_ASC_SUM+2 , AL

65、;保存千位數(shù)字</p><p>  MOV AX , DX ;將余數(shù)置入AX內(nèi),以便當(dāng)作被除數(shù)</p><p>  MOV BL , 100</p><p><b>  DIV BL</b></p><p>  ADD AL , 30H</p><p>

66、;  MOV OUT_ASC_SUM+3 , AL ;保存百位數(shù)字</p><p>  MOV AL , AH</p><p><b>  CBW</b></p><p>  MOV BL , 10</p><p><b>  DIV BL</b></p>&

67、lt;p>  ADD AL , 30H</p><p>  MOV OUT_ASC_SUM+4 , AL ;保存十位數(shù)字</p><p>  ADD AH , 30H</p><p>  MOV OUT_ASC_SUM+5 , AH ;保存?zhèn)€位數(shù)字</p><p><b>

溫馨提示

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

最新文檔

評論

0/150

提交評論