




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上湖南農業大學課程設計報告學 院:信息科學技術學院 班 級:姓 名: 學 號:課程設計題目:代碼轉換程序設計課程名稱:匯編語言與微機原理指導老師:評閱成績:評閱意見:成績評定教師簽名:日期: 年 月 日目 錄概述 1一設計題目 1 二設計內容與要求 1 三設計思想 1 四程序流程圖 3 五程序源代碼 5 六設計過程中遇到的問題及解決方法 14七設計心得 15代碼轉換程序設計概述: 代碼轉換程序主要是實現字母間的轉換和數值之間的轉換。其中字母轉換是大小寫字母之間的互換,二進制轉換則是二進制,十進制,十六進制之間的轉換。程序設計成一個代碼轉換系統,給出一個可供選擇的菜單,根
2、據界面的信息選擇不同的子功能。通過做這個程序,加強匯編語言編程的能力,更好的了解其基本原理,基本的思想,基本的方法以及相關的注意事項。1、 設計題目 代碼轉換程序設計2、 設計內容與要求 完成一個字母或數制之間的轉化程序,主程序分別具有 5 種可選擇的子功能,按相應的字符可分別進入相應的子功能并在屏幕上顯示結果,按“q”鍵退出。5 種可選擇的子功能分別為: 1)實現小寫字母向大寫字母的轉換 2)實現大寫字母向小寫字母的轉換 3)實現二進制數向十六進制數的轉換 4)實現十六進制數向二進制數的轉換 5)實現十六進制數向十進制數的轉換3、 設計思想 運行程序,首先會顯示主界面,用戶可依據提示選擇不同
3、的編號,實現不同的子功能。 1、大寫字母向小寫字母的轉換。當用戶選擇編號a,便選中了這一個子功能。通過判斷標識符,程序跳轉到標識符所在的位置。根據提示輸入一個大寫字母,會有一個判斷輸入是否合法的過程,若輸入的是非大寫字母,則會提示輸入錯誤,請重新輸入,直到輸入正確為止。通過改變assic碼值,實現大寫字母向小寫字母的轉換。顯示轉換后的字母,然后跳轉到主菜單。 2、小寫字母向大寫字母的轉換。當用戶選擇編號b,便選擇了這一個子功能。通過判斷標識符,程序跳轉到標識符所在的位置。根據提示輸入一個小寫字母,接下來判斷其合法性,若輸入的字母是非小寫字母,則會提示輸入錯誤,請重新輸入,直到輸入正確為止。通過
4、改變assic碼值,實現小寫字母向大寫字母的轉換。顯示轉換后的字母后,跳轉到主菜單。 3、二進制向十六進制的轉換。當用戶選擇編號c,便選擇了這一個子功能。通過判斷標識符,程序跳轉到標識符所在的位置。根據提示首先輸入一個數字表示二進制的位數,在程序中有變量記錄二進制的位數。再根據提示輸入一個二進制數。其轉換的主要思想是 二進制數的每四位代表十六進制的,通過移位來逐一將四個二進制位數的和轉換成十六進制數保存在一個寄存器中,然后再繼續按照每四位一求和的方法保存十六進制數的每一位,直到二進制數的所有位計算完畢,當對四位二進制數相加完畢后,將保存和的寄存器清零,采用相對尋址改變十六進制數每一位存放的位置
5、。其中還會對十六進制每一位上的數字進行判斷,若是大于9,則轉換成相應的字母,最后采用相對尋址的方式將十六進制的每一位依次輸出。顯示完畢后,跳轉到主菜單。 4、十六進制向二進制的轉換。當用戶選擇編號d,便選擇了這一個子功能。通過判斷標識符,程序跳轉到標識符所在的位置。根據提示輸入一個十六進制數,此時會進行判斷,判斷輸入的字符串是否符合十六進制數的要求,若是輸入錯誤,則提示輸入錯誤,重新輸入,直到輸入正確為止。其轉換的主要思想是通過轉換成十進制,然后將十進制數轉換成二進制,在十六進制轉換成十進制中,按權值展開再相加的思想,在十進制轉換成二進制的中,主要是采用連除的方法,將每一次的余數保存在堆棧中,
6、直到商為零。最后出棧,根據棧的先進后出的原則,出棧的順序就是轉換后的二進制數的順序。將轉換后的二進制數輸出后,跳轉到主菜單。 5、十六進制向十進制的轉換。當用戶選擇編號e,便選擇了這一個子功能。通過判斷標識符,程序跳轉到標識符所在的位置。根據提示輸入一個十六進制數,此時會進行判斷,若是輸入字符串不符合十六進制數的要求,則提示輸入錯誤,重新輸入,直到輸入正確為止。十六進制數轉換成十進制的主要思想是,按權值展開再相加。首先是將輸入的字符轉換成相應的數字,通過設置相應的變量,在最低位上的權值是1,然后依次是16,256依次進行累乘,直到十六進制數位數全部循環完畢,將每一位所得的數保存在寄存器中,每進
7、行一次就實現一次求和運算。最后將轉換成的十進制數輸出,跳轉到主菜單。 6、退出。當用戶選擇編號q,便選擇了退出。通過判斷標識符,程序跳轉到標識符所在的位置,實現退出。4、 程序流程圖 開 始主菜單,用戶選擇子功能輸入有誤,重新輸入其他退出abcdeq輸入十六進制數輸入二進制數輸入小字母寫輸入大寫字母輸入錯誤輸入錯誤輸入錯誤判斷輸入是否合法輸入錯誤判斷輸入是否合法N判斷輸入是否合法判斷輸入是否合法NNNY轉換十進制YYY轉換二進制數轉換轉換轉換d判斷子功能結 束輸出輸出輸出輸出輸出e附圖:圖1:編譯顯示的主菜單圖2:各個子功能顯示5、 程序源代碼include io32.inc .data m1
8、 byte ' 代碼轉換系統 ',13,10,0 ;菜單 m2 byte '-',13,10,0 ;分割線 m3 byte ' 編號 操作 ',13,10,0 ma byte ' a 實現大寫字母向小寫字母的轉換',13,10,0 mb byte ' b 實現小寫字母向大寫字母的轉換',13,10,0 mc byte ' c 實現二進制向十六進制數的轉換',13,10,0 md byte ' d 實現十六進制向二進制數的轉換',13,10,0 me byte ' e 實現十六
9、進制向十進制數的轉換',13,10,0 mq byte ' q 退出',13,10,0 m_err byte ' 輸入錯誤,請重新輸入',13,10,0 m_meau byte '請輸入菜單中的編號: ',0 m_inputs byte '請輸入一個小寫字母: ',0 m_inputl byte '請輸入一個大寫字母: ',0 m_outputl byte '對應的小寫字母: ',0 m_outputs byte '對應的大寫字母: ',0 m_input1 byte
10、9;請輸入二進制位數: ',0 m_input11 byte '請輸入二進制數: ',0 m_output1 byte '轉換后的十六進制數: ',0 m_output2 byte '轉換后的二進制數: ',0 m_input3 byte '請輸入一個十六進制數: ',0 m_output3 byte '轉換后的十進制數: ',0 array byte 8 dup (0) ;用字符串數組保存十六進制數 sum dword ? ;十進制數變量 len byte ? ;字符串數組的長度 m byte ? arr
11、ay1 byte 100 dup (0) ;定義一個數組用來保存初始二進制數 array2 byte 100 dup (0) ;用來保存轉換后的十六進制數 n dword ? k dword ? j dword ? .codestart: mov eax,offset m1 ;顯示菜單中的內容 call dispmsg mov eax,offset m2 call dispmsg mov eax,offset m3 call dispmsg mov eax,offset ma call dispmsg mov eax,offset mb call dispmsg mov eax,offset
12、mc call dispmsg mov eax,offset md call dispmsg mov eax,offset me call dispmsg mov eax,offset mq call dispmsgmeau: mov eax,offset m_meau call dispmsg ;提示輸入相應的菜單編號 call readc ;輸入對應的編號 call dispcrlf ;換行 cmp al,'a' ;判斷輸入 jz a ;若輸入a,則跳轉到標識符a cmp al,'b' jz b ;若輸入b,則跳轉到標識符b cmp al,'c
13、9; jz cc ;若輸入c,則跳轉到標識符cc cmp al,'d' jz e ;若輸入d,則跳轉到標識符e cmp al,'e' jz e ;若輸入e,則跳轉到標識符e cmp al,'q' jz q ;若輸入q,則跳轉到標識符q mov eax,offset m_err call dispmsg ;輸入錯誤,提示錯誤的信息 jmp meau ;大寫字母向小寫字母的轉換returna: mov eax,offset m_err call dispmsga: mov eax,offset m_inputl call dispmsg ;提示輸入一
14、個大寫的字母 call readc ;獲得字母 mov bl,al ;將輸入的內容存儲到bl中 call dispcrlf ;換行 cmp al,'A' ;判斷輸入的字母是否合法 jb returna ;如果比'A'小,則跳轉到returna標識符 cmp al,'Z' ja returna ;如果比'Z'大,則跳轉到returna標識符 call dispc ;顯示字母 mov eax,offset m_outputl call dispmsg ;輸入正確,則提示輸出相應的小寫字母 add bl,20h ;實現大寫向小寫的轉換
15、mov al,bl call dispc ;顯示轉換后的字母 call dispcrlf ;換行 jmp meau ;小寫字母向大寫字母的轉換returnb: mov eax,offset m_err call dispmsgb: mov eax,offset m_inputs call dispmsg ;提示輸入一個小寫字母 call readc ;獲得字母 mov bl,al ;將輸入的內容存儲到bl中 call dispcrlf cmp al,'a' ;判斷輸入合法性 jb returnb ;如果比a小,則跳轉到returnb標識符 cmp al,'z'
16、ja returnb ;如果比z大,則跳轉到returnb標識符 call dispc ;顯示字母 mov eax,offset m_outputs call dispmsg ;提示輸出相應的大寫字母 sub bl,20h ;實現小寫到大寫字母的轉換 mov al,bl call dispc ;將轉換的字母輸出 call dispcrlf ;換行 jmp meau ;二進制向十六進制轉換cc: mov eax,offset m_input1 call dispmsg call readuid ;輸入二進制數的位數 mov j,eax ;保存二進制位數 mov eax,offset m_inpu
17、t11 ;提示輸入二進制數 call dispmsg call dispcrlf mov ecx,0 ;清零,計數器c1: call readuid mov array1ecx,al ;一位一位的輸入 inc ecx cmp ecx,j jb c1 ;低于位數,繼續輸入 mov ecx,j dec ecx mov eax,1 xor ebx,ebx ;記錄移動的位數 xor edx,edx ;表示四個二進制位的和 xor esi,esi ;保存十六進制當前的位置c2: mov n,0 ;n作為二進制位數是否已達4位的一個標志 mov k,0 ;k作為數值是否已經結束的一個標志 cmp arra
18、y1ecx,1 jnz c11 ;判斷二進制數的某一位是否為1 mov eax,1 cmp ebx,1 jnz c3 ;判斷數據所在的位數,不相等,轉向c3 shl eax,1 ;邏輯左移 jmp c5c3: cmp ebx,2 jnz c4 ;根據比較來確定移動的位數 shl eax,2 ;邏輯左移 jmp c5c4: cmp ebx,3 jnz c5 ;根據比較來判斷移動的位數 shl eax,3 ;邏輯左移c5: add edx,eax ;保存和c11: cmp ebx,3 ;判斷二進制數是否已經有四位 jnz c12 mov n,1c12: cmp ecx,0 ;判斷數值是否已經全部計
19、算完畢 jnz c13 mov k,1c13: mov edi,n or edi,k ;保存n或者k的值 cmp edi,1 jnz c16 cmp edx,9 jna c14 sub edx,10 ;edx大于9 add edx,'A' ;轉換成相應的字母 mov array2esi,dl ;將十六進制數保存至數組 jmp c15c14: add edx,'0' mov array2esi,dl ;edx大于等于0小于等于9c15: inc esi ;改變當前十六進制數所在位置 xor edx,edx ;清零以便下一次運用 mov ebx,-1c16: inc
20、 ebx dec ecx cmp ecx,0 jnl c2 ;小于0,退出循環 mov eax,offset m_output1 call dispmsg mov ecx,esi ;16進制數的位數 dec ecxccc: mov al,array2ecx call dispc ;輸出每一個十六進制數 dec ecx cmp ecx,0 ;輸出轉換后的數據 jnl ccc call dispcrlf jmp meau ;返回主菜單 ;十六進制向二進制的轉換d: mov eax,20 push eax ;將20作為一個判斷標識 mov eax,sum ;將十進制數存入eax中 jmp d1 d1
21、: mov edx,0 mov ebx,2 ;除數2 div ebx mov ecx,eax ;保存商 mov eax,edx push eax ;將余數壓入棧 mov eax,ecx cmp eax,0 ;判斷商是否為0 jz d2 jmp d1d2: mov ecx,eax ;暫存 mov eax,offset m_output2 call dispmsg mov eax,ecx jmp d3d3: pop eax ;出棧 cmp eax,20 jz d4 ;判斷是否出棧完畢 call dispsid jmp d3d4: call dispcrlf jmp meau ;返回主菜單 ;十六進
22、制向十進制的轉換e: mov m,al mov eax,offset m_input3 call dispmsg mov eax,offset array call readmsg mov len,al ;獲得字符串長度 xor ecx,ecx ;異或清零 mov cl,len ;計數 dec cl ;自減1 xor eax,eax mov edx,1 ;初始權值again: cmp arrayecx,'A' jl shiliu_shi1 ;小于A,轉向shiliu_shi1 cmp arrayecx,'F' jg shiliu_shi1 ;大于Z,轉向shil
23、iu_shi1 xor ebx,ebx mov bl,arrayecx ;相對尋址 sub bl,55 ;轉換成相應的數字 imul ebx,edx add eax,ebx imul edx,16 ;改變權值 jmp shiliu_shi3shiliu_shi1: cmp arrayecx,'0' jl shiliu_shi2 ;小于0,轉向shiliu_shi2 cmp arrayecx,'9' jg shiliu_shi2 ;大于9,轉向shiliu_shi2 xor ebx,ebx ;臨時寄存 mov bl,arrayecx sub bl,'0
24、39; ;轉換成相應的數字 imul ebx,edx add eax,ebx imul edx,16 ;改變權值 jmp shiliu_shi3 shiliu_shi2: mov eax,offset m_err call dispmsg ;提示輸入錯誤 jmp eshiliu_shi3: dec ecx ;自減 cmp ecx,0 jnl again ;不小于0,轉向again mov sum,eax cmp m,'d' ;判斷選擇的功能 jz d ;為d,繼續進行轉換成二進制 cmp m,'e' jz ee ;為e,直接輸出ee: mov eax,offse
25、t m_output3 call dispmsg mov eax,sum ;數據輸出 call dispuid call dispcrlf jmp meau ;返回主菜單q: jmp done ;退出done: exit 0end start6、 設計過程中遇到的問題及解決辦法 在代碼轉換程序設計的過程中,字母轉換基本上沒有什么問題,主要困難之處在于二進制,十六進制,十進制之間的互換。 1、二進制轉換成十六進制。剛開始的時候是計劃采用每四個二進制位轉換成一個十六進制的方法,然而其二進制的位數又不能簡單的確定,因此最后采用先輸入二進制的位數,再輸入二進制數的方法,以便于控制在轉換過程中需要移動的位數。另外,在轉換成十六進制的過程中,面臨著超過9就必須轉換成相應的字母的問題,最后通過查閱資料,采用了先將其轉換成相應的assic碼,再進行存儲相關的十六進制數。最后通過相對尋址,將十六進制數的每一位輸出來。 2、十六進制轉換成十進制。主要是采用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五年級小數學試卷及答案
- 五年級家長測試試卷及答案
- 貨車租賃合作伙伴協議
- 車位使用權擔保協議
- 鋼筋結構裝配式建筑體系總結模版
- 公共機構節能工作總結模版
- 汽車產業的國際競爭
- 也氣上集相時氣審水位要上續翻否您樣稿成自療廉存出命人新高告幫
- 美甲時尚設計盡顯美麗指尖
- 腳底SPA恢復雙腳柔軟
- 瓷磚空鼓裝修合同協議
- 中職生職業生涯課件
- 2025年浙江省生態環境廳所屬事業單位招聘考試備考題庫
- 入團考試測試題及答案
- 河南省普通高中2024-2025學年高三下學期學業水平選擇性模擬考試(四)歷史試題(原卷版+解析版)
- 一例盆腔臟器脫垂全盆底重建術患者的護理
- 旅游消費者決策
- 企業員工環保培訓
- 快手賬號轉讓合同范例
- 勞務公司與公司合作協議書
- 鐵路機車車輛設計制造維修進口許可實施細則(國鐵設備監〔2014〕19號)
評論
0/150
提交評論