匯編語言程序設(shè)計-代碼轉(zhuǎn)換_第1頁
匯編語言程序設(shè)計-代碼轉(zhuǎn)換_第2頁
匯編語言程序設(shè)計-代碼轉(zhuǎn)換_第3頁
匯編語言程序設(shè)計-代碼轉(zhuǎn)換_第4頁
匯編語言程序設(shè)計-代碼轉(zhuǎn)換_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 課 程 設(shè) 計 任 務(wù) 書專 業(yè)計算機科學(xué)與技術(shù)班 級姓 名設(shè) 計 起 止 日 期設(shè)計題目: 代碼轉(zhuǎn)換設(shè)計任務(wù)(主要技術(shù)參數(shù)):1硬件環(huán)境: CPU:1.6GH以上 內(nèi)存:4GB以上2軟件環(huán)境: 操作系統(tǒng):Microsoft Windows xp運行環(huán)境:TE.EXE MASM.EXE LINK.EXE DEBUG.EXE3設(shè)計任務(wù):本程序分為3個部分,運行程序,首先會顯示主界面,用戶可依據(jù)提示選擇不同的編號,實現(xiàn)不同的功能:小寫字母向大寫字母的轉(zhuǎn)換;大寫字母向小寫字母的轉(zhuǎn)換;二進制數(shù)向十六進制數(shù)的轉(zhuǎn)換;指導(dǎo)教師評語:成績: 簽字:年 月 日 課程設(shè)計說明書 No.15 1 .課程設(shè)計的目的

2、本課程設(shè)計是在學(xué)完教學(xué)大綱規(guī)定的全部內(nèi)容、完成所有實踐環(huán)節(jié)的基礎(chǔ)上,旨在深化學(xué)生學(xué)習(xí)的匯編語言課程基本知識,進一步掌握匯編語言程序設(shè)計方法,提高分析問題、解決問題的綜合應(yīng)用能力。2 設(shè)計方案論證2.1開發(fā)環(huán)境軟件環(huán)境:操作系統(tǒng):Windows xp 硬件環(huán)境:處理器:英特爾 第三代酷睿 i3-3110M 2.40GHz 雙核 內(nèi)存:4GB(三星 DDR3 1333MHz) 主硬盤:希捷 ST500LM012 HN-M500MBB (500GB/5400轉(zhuǎn)/分) 顯示器:三星 SEC3649(14 英寸)MASM開發(fā)環(huán)境:Masm是匯編編譯器,是微軟公司開發(fā)的匯編開發(fā)環(huán)境,擁有可 視化的開發(fā)界面

3、,使開發(fā)人員不必再使用DOS環(huán)境進行匯編的開發(fā)的優(yōu)點,支持偽指令和宏匯編,最后編譯生成obj文件,通過link工具連接成可執(zhí)行文件exe。使用步驟為:a使用編輯軟件TE.EXE進行源程序的編寫。 b使用匯編軟件MASM.EXE對源程序匯編。 c使用連接軟件LINK.EXE對目標(biāo)文件進行連接。 d使用調(diào)試軟件DEBUG.EXE對可執(zhí)行程序進行調(diào)試。2.2 總體設(shè)計功能本程序分為3個部分,運行程序,首先會顯示主界面,用戶可依據(jù)提示選擇不同的編號,實現(xiàn)不同的功能:小寫字母向大寫字母的轉(zhuǎn)換;大寫字母向小寫字母的轉(zhuǎn)換;二進制數(shù)向十六進制數(shù)的轉(zhuǎn)換;2.3詳細設(shè)計功能2.3.1大小寫字母間的轉(zhuǎn)換當(dāng)用戶選擇編

4、號1,便選擇了這一個功能。通過判斷標(biāo)識符,程序跳轉(zhuǎn)到標(biāo)識符所在的位置。通過改變ASSIC碼值,實現(xiàn)大小寫字母間的轉(zhuǎn)換。顯示轉(zhuǎn)換后的字母,然后跳轉(zhuǎn)到主菜單。2.3.2二進制與十六進制數(shù)間的轉(zhuǎn)換當(dāng)用戶選擇編號3,便選擇了這一個功能。根據(jù)提示首先輸入一個數(shù)字表示二進制的位數(shù),在程序中有變量記錄二進制的位數(shù)。再根據(jù)提示輸入一個二進制數(shù)。其轉(zhuǎn)換的主要思想是二進制數(shù)的每位代表十六進制的,通過移位來逐一將四個二進制位數(shù)的和轉(zhuǎn)換成十六進制數(shù)保存在一個寄存器中,然后再繼續(xù)按照每四位一求和的方法保存十六進制數(shù)的每一位,直到二進制數(shù)的所有位計算完畢,當(dāng)對四位二進制數(shù)相加完畢后,將保存和的寄存器清零,采用相對尋址改變

5、十六進制數(shù)每一位存放的位置。其中還會對十六進制每一位上的數(shù)字進行判斷,若是大于9,則轉(zhuǎn)換成相應(yīng)的數(shù)字,最后采用相對尋址的方式將十六進制的每一位依次輸出。顯示完畢后,跳轉(zhuǎn)到主菜單。2.3.3退出當(dāng)用戶選擇編號q,便選擇了退出。通過判斷標(biāo)識符,程序跳轉(zhuǎn)到標(biāo)識符所在的位置,實現(xiàn)退出。2.4主程序功能顯示程序所能執(zhí)行的四種功能選項以及推出選項,用戶可根據(jù)給出的選項通過輸入其序號來進入各子程序。2.4.1主程序功能流程主程序流程如圖1。顯示主界面信息調(diào)用功能接收鍵盤輸入信息是“q”?是“1”?是“2”?退出YNNNYY實現(xiàn)大小寫字母間的轉(zhuǎn)換實現(xiàn)二進制與十六進制間的轉(zhuǎn)換開始輸出錯誤圖1 主程序流程圖2.4

6、.2大小寫字母轉(zhuǎn)換子程序功能該子程序能夠?qū)崿F(xiàn)從鍵盤讀取字符后輸出其對應(yīng)大寫或小寫字符。大小寫字母之間的轉(zhuǎn)換如圖2、圖3。從鍵盤讀取字符開始是否az之間?NY輸出對應(yīng)字符的大寫輸出錯誤結(jié)束圖2 小寫字母向大寫字母轉(zhuǎn)換流程圖開始從鍵盤讀取字符是否AZ之間?NY輸出對應(yīng)字符的小寫輸出錯誤結(jié)束圖3 大寫字母向小寫字母轉(zhuǎn)換流程圖2.4.3進制轉(zhuǎn)換子程序功能該子程序能實現(xiàn)二進制與十進制之間的轉(zhuǎn)換,二進制與十六進制之間的轉(zhuǎn)換以及十進制和十六進制之間的轉(zhuǎn)換。 二進制向十六進制數(shù)的轉(zhuǎn)換如圖4。開始從鍵盤讀取字符二進制數(shù)?NY輸出錯誤結(jié)束輸出對應(yīng)的十六進制數(shù)圖4 二進制向十六進制數(shù)的轉(zhuǎn)換流程圖3. 設(shè)計結(jié)果與分析

7、3.1調(diào)試程序啟動DEBUG:C>DEBUG EXAM1.EXEA匯編U反匯編:T單步執(zhí)行:G執(zhí)行:3.2運行程序3.2.1進入主程序段顯示提示信息,程序功能實現(xiàn)如圖5所示: 圖5 程序主界面圖3.2.2選擇編號1進入大小寫字母轉(zhuǎn)換子程序,程序功能實現(xiàn)如圖6所示:圖6大小寫字母轉(zhuǎn)換界面圖3.2.3選擇編號2進入進制轉(zhuǎn)換子程序,程序功能實現(xiàn)如圖7所示:圖7二進制和十六進制轉(zhuǎn)換界面圖3.2.4在運行過程中按“q”鍵為返回主頁面。如圖8所示:圖8 回到主界面圖4. 總結(jié)通過本書的學(xué)習(xí),我深入的掌握了匯編語言的編程方法、思路和技巧,并對計算機的底層編程有一定認識;還對計算機底層運行程序的機制及計

8、算機的工作原理有了深入的了解。在學(xué)匯編的過程中,最重要的就是要掌握匯編語言中的指令的一些基本用法。當(dāng)然要能夠真正的了解其中的內(nèi)涵,這樣在實際的編程中也能夠像運用高級語言一樣靈活的變通。匯編語言作為一種低級程序設(shè)計語言,既然是低級所以應(yīng)該是最底層的,與計算機內(nèi)部的結(jié)構(gòu)聯(lián)系應(yīng)該聯(lián)系很密切,而且我在學(xué)習(xí)中也深刻的了解到了這一點。匯編程序給人感覺最煩的就是好多程序的結(jié)果不能直接通過運行EXE文件顯示出來,而更多的是經(jīng)過DEBUG單步調(diào)試才能看到其內(nèi)在變化,看是否正確。匯編程序不像其他的高級語言一樣需要編譯器,而是直接的就能在記事本上編寫,然后進行匯編和連接就可以了。我認為匯編語言本身還是一門很重要的應(yīng)

9、用技術(shù)。首先由于匯編的操作由于跟硬件緊密相關(guān),所以,很多硬件設(shè)施的嵌入式編程使用的都是使用的匯編語言,因為匯編語言更直接有效率。現(xiàn)在的數(shù)碼產(chǎn)品很多,而這些數(shù)碼產(chǎn)品賴以生存的芯片,主板等,都包含了嵌入式程序,而這些程序中,匯編語言的使用是相當(dāng)重要的。 通過一段時間的自主學(xué)習(xí),我常常上網(wǎng)搜索資料輔助理解,遇到難以理解的問題時也學(xué)會自己解決,我想這不僅是知識層面上的提升,更是自己在學(xué)習(xí)能力上的提升。這樣的學(xué)習(xí)能力將非常有助于我今后的個人能力提高,我會把這種自主學(xué)習(xí)培養(yǎng)成為習(xí)慣,持之以恒下去。5. 參考文獻1 王爽 匯編語言M. 第二版. 北京:清華大學(xué)出版社,2003:96-1242 李真香,劉紅海

10、,趙潤林. 匯編語言課程設(shè)計案例精編M. 第二版. 2004.4:73-823 仇玉章.32位微型計算機原理與接口技術(shù)M.北京:清華大學(xué)出版社,2003.5:63-954 朱田,學(xué)峰,周豫濱譯. 80386/80486編程指南M,第1版北京:電子工業(yè)出版社,1994:49-715 龔尚福. 微型計算機匯編語言程序設(shè)計M. 第一版. 西安:電子科技大學(xué)出版社,2003.7:45-716.附錄(源代碼) DATAS SEGMENTmenu DB0AH, 0DH, '-'DB0AH, 0DH, 'Please choice action:', 0AH, 0DHDB0A

11、H, 0DH, '1.Letter change' DB0AH, 0DH, '2.Binary to Hexadecimal' DB 0AH, 0DH, 'q.Exit' DB 0AH, 0DH, '-', 0AH, 0DH,'$' STR1 DB 0AH, 0DH, 'Please input a Letter', 0AH, 0DH,'$' STR11 DB 0AH, 0DH, 'The big Letter is:', 0AH, 0DH,'$' S

12、TR12 DB 0AH, 0DH, 'The litte Letter is:', 0AH, 0DH,'$' STR13 DB 0AH, 0DH, 'Please confirm you just inputed is a Letter', 0AH, 0DH,'$' STR2 DB 0AH, 0DH, 'Please input the binary string, Enter to confirm', 0AH, 0DH, '$' STR21 DB 0AH, 0DH, 'The string

13、 Hexadecimal is:', 0AH, 0DH, '$' STR3 DB 0AH, 0DH, 'Please input the Hexadecimal string, Enter to confirm', 0AH, 0DH, '$' STR31 DB 0AH, 0DH, 'change to binary is:', 0AH, 0DH, '$' STR4 DB 0AH, 0DH, 'change to Decimal is:', 0AH, 0DH, '$' DATA

14、S ENDS CODES SEGMENT ASSUME CS: CODES, DS: DATAS;宏定義 字符輸入 CHARIN MACRO ;宏定義無參數(shù)的字符輸入功能 MOV AH, 01H ;系統(tǒng)調(diào)用 輸入一個字符用于功能選擇 INT 21H ;字符默認輸入到AL中 ENDM;宏定義 數(shù)字輸入 數(shù)字輸入到AL中 NUMIN MACRO CHARIN SUB AL, 48 ENDM;宏定義 字符串輸入 STRIN MACRO STRINGIN ;將字符串輸入到字符串STRINGIN中 LEA DX, STRINGIN ;將STRINGIN的偏移地址送到DX寄存器 MOV AH, 0AH ;

15、0AH字符串輸入功能 INT 21H ;調(diào)用系統(tǒng)中斷 ENDM;宏定義 字符輸出 CHAROUT MACRO OUTCHAR ;宏定義 將字符outchar輸出 PUSH AX PUSH DX MOV DL, OUTCHAR MOV AH, 02H ;系統(tǒng)調(diào)用 輸出字符outchar INT 21H ;調(diào)用系統(tǒng)中斷 調(diào)用過程中會改變AL中的值,故將AX中的值入棧保存 POP DX POP AX ENDM;宏定義 數(shù)字輸出 NUMOUT MACRO OUTNUM PUSH AX PUSH DX MOV DL, OUTNUM ADD DL, 48 ;將數(shù)值轉(zhuǎn)換為對應(yīng)得數(shù)值字符 MOV AH, 02

16、H ;系統(tǒng)調(diào)用 輸出字符outchar INT 21H ;調(diào)用系統(tǒng)中斷 調(diào)用過程中會改變AL中的值,故將AX中的值入棧保存 POP DX POP AX ENDM;宏定義 字符串輸出 STROUT MACRO STRINGOUT ;將字符串STRINGOUT輸出 PUSH AX PUSH DX LEA DX, STRINGOUT ;將STRIN的偏移地址送到DX寄存器 MOV AH, 9 ;09H字符串輸出功能 INT 21H ;調(diào)用系統(tǒng)中斷 POP DX POP AX ENDM;宏定義 換行 ENDL MACRO ;宏定義換行 PUSH AX PUSH BX PUSH CX PUSH DX M

17、OV DL, 0AH ;先輸出垂直Tab鍵 MOV AH, 2 INT 21H ;調(diào)用系統(tǒng)中斷實現(xiàn)輸出 MOV DL, 0DH ;再將輸出輸出調(diào)至段首 INT 21H ;調(diào)用系統(tǒng)中斷 POP DX POP CX POP BX POP AX ENDM;宏定義 以baseNum進制輸出AX中的數(shù)值 OUTAX MACRO BASENUM ;宏定義換行 PUSH AX PUSH BX PUSH CX PUSH DX MOV BX, BASENUM ;將要轉(zhuǎn)換成的進制存入BX作為除數(shù) CALL OUTAXP ;調(diào)用進制輸出過程 POP DX POP CX POP BX POP AX ENDM;過程定義

18、以baseNum進制形式輸出存放在AX中的數(shù)值過程 OUTAXP PROC MOV DX, 0 ;初始化DX配合AX一起進行處罰操作 MOV CX, 0 ;用CX計數(shù)取得個余數(shù)個數(shù) OUTAXP_CIRCLE: CMP AX, 0 ;判斷AX中的值是否為0 JE OUTAXP_NEXT ;是則跳轉(zhuǎn) DIV BX ;不是則進行除10運算 商保存在AX中 余數(shù)保存在DX中 PUSH DX ;將對10取到的余數(shù)入棧保存 MOV DX, 0 ;將DX中的余數(shù)清空 以便下一步對AX中的數(shù)進行除10運算 INC CX ;計數(shù)循環(huán)取得的余數(shù)個數(shù) JMP OUTAXP_CIRCLE OUTAXP_NEXT:

19、;循環(huán)輸出取得的余數(shù) POP AX CMP AL, 10 ;當(dāng)余數(shù)小于10時,直接將數(shù)值輸出 JB NOUT ADD AL, 55 ;否則將余數(shù)轉(zhuǎn)化為對應(yīng)的字符10對應(yīng)字符'A' CHAROUT AL JMP COUT NOUT: NUMOUT AL COUT: LOOP OUTAXP_NEXT RET OUTAXP ENDP;宏定義 以baseNum進制輸入數(shù)據(jù)串到AX中,可輸入2-37進制 INAX MACRO BASENUM ;宏定義換行 PUSH BX PUSH CX PUSH DX MOV CX, BASENUM ;將要轉(zhuǎn)換成的進制存入BX作為除數(shù) CALL INAX

20、P ;調(diào)用進制輸入過程 POP DX POP CX POP BX ENDM;過程定義以baseNum進制形式輸出存放在AX中的數(shù)值過程 INAXP PROC MOV AX,0 INAXP0: PUSH AX INAXP1: CHARIN ;逐個字符進行輸入, 結(jié)果存放到AX中 CMP AL, 13 JE INAXE ;當(dāng)按下Enter鍵后跳轉(zhuǎn)AX的輸出 CMP AL, '0' JB INAXP1 ;當(dāng)輸入字符小于'0'時,跳轉(zhuǎn)inAXp1,跳轉(zhuǎn)重新進行字符輸入 CMP AL, '9' JA INAXNEXT1 ;當(dāng)輸入字符大于'9'

21、;時,跳轉(zhuǎn)inAXnext1進一步進行比較 SUB AL, 48 ;當(dāng)字符在'0'-'9'之間時,將字符轉(zhuǎn)化為對應(yīng)的數(shù)值 JMP INAXNUM ;跳轉(zhuǎn)數(shù)值輸入 INAXNEXT1: CMP AL, 'A' JB INAXP1 ;當(dāng)輸入字符小于'A'時,跳轉(zhuǎn)重新進行字符輸入 CMP AL, 'Z' JA INAXNEXT2 ;當(dāng)輸入字符大于'Z'時,跳轉(zhuǎn)inAXnext2進一步進行比較 SUB AL, 55 ;當(dāng)字符在'A'-'Z'之間時,將字符轉(zhuǎn)化為對應(yīng)的數(shù)值,并跳

22、轉(zhuǎn)到數(shù)值輸入 JMP INAXNUM INAXNEXT2: CMP AL, 'a' JB INAXP1 ;當(dāng)輸入字符小于'A'時,跳轉(zhuǎn)重新進行字符輸入 CMP AL, 'z' JA INAXP1 ;當(dāng)輸入字符小于'A'時,跳轉(zhuǎn)重新進行字符輸入 SUB AL, 87 ;當(dāng)字符在'a'-'z'之間時,將字符轉(zhuǎn)化為對應(yīng)的數(shù)值,并跳轉(zhuǎn)到數(shù)值輸入 JMP INAXNUM INAXNUM: MOV BH, 0 ;將數(shù)值送到AX中 MOV BL, AL POP AX CMP AX, 0 ;當(dāng)AX中的數(shù)值為0時,跳

23、過乘法操作 JE INAXADD MUL CX ;乘以CX中的進制基數(shù) INAXADD: ADD AX, BX JMP INAXP0 INAXE: POP AX ;將計算得到的數(shù)值出棧到AX中 RET INAXP ENDP START: MOV AX, DATAS ;將數(shù)據(jù)段地址送到AX中 MOV DS, AX ;由AX轉(zhuǎn)送到送到DS P0: STROUT MENU ;字符串輸出宏調(diào)用 輸出menu的提示菜單 CHARIN ;宏調(diào)用 字符輸入 選擇相應(yīng)功能 CMP AL, '1' JE P1 CMP AL, '2' JE P2 CMP AL, '3' ;JE P3 CMP AL, &

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論