微機課設 (修復的)_第1頁
微機課設 (修復的)_第2頁
微機課設 (修復的)_第3頁
微機課設 (修復的)_第4頁
微機課設 (修復的)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、目 錄1題目12算法分析12.1二進制數轉換成10進制數12.2二進制數轉換為 8 進制數12.3二進制數轉換為 16 進制數23流程圖23.1設計流程圖23.2程序流程圖43.3匯編程序54調試運行結果134.1調試運行結果如下圖所示:134.2 調試中遇到的問題15錯誤程序115錯誤程序2165小結16參考文獻18數制轉換1題目通過鍵盤輸入一個二進制數,通過屏幕提示菜單選擇轉換成八進制,十進制或者十六進制數并顯示。2算法分析2.1二進制數轉換成10進制數 由二進制數轉換成十進制數的基本做法是,把二進制數首先寫成加權系數展開式,然后按十進制加法規(guī)則求和。這種做法稱為"按權相加&qu

2、ot;法。比如:1011.012=1*23+0*22+1*21+1*20+0*2-1+1*2-2 =(11.25)102.2二進制數轉換為 8 進制數由二進制數轉換成八進制數可以 3 位二進制位編為一組(不夠左側補0),然后從右邊開始每三位如下方式替換: 000 - 0, 001 - 1, 010 - 2, 011 - 3, 001 110 101 010 100 按照轉換方法對應轉換   1   6   5   2   4所以:()2=(16524)82

3、.3二進制數轉換為 16 進制數 由二進制數要轉換為十六進制,就是以4位一段,分別轉換為十六進制。轉換為 16 進制0000 - 0, 0001 - 1, 0010 - 2, 0011 - 30100 - 4, 0101 - 5, 0110 - 6, 0111 - 71000 - 8, 1001 - 9, 1010 - A, 1011 - B1100 - C, 1101 - D, 1110 - E, 1111 F此時分組為 4 位二進制數為一組0010 1010 1001 0101 1010  2    A   &

4、#160;9    5    A所以: 3流程圖3.1設計流程圖 根據題意,設計流程圖如下: 開 始輸入二進制數八進制 NY十進制YN八進制數 十六進制數十進制數結 束 圖1 設計流程圖3.2 程序流程圖 根據題意,程序流程圖如下: 圖2 8進制轉換 圖3 16進制轉換 圖4 10進制轉換3.3匯編程序匯編程序如下:data segmentbuff1 db 17buff2 db ?buff3 db 17 dup(?)buff4 db 'O:1,D:2,H:3',0dh,0ah,'$'buff5

5、 db 48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70 buff6 db 0dh,0ah,'$'mes db 'please enter a binary number',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,mes ;取mes的偏移地址mov ah,09 int 21h ;在屏幕上顯示字符串lea dx,buff1 ;取buff1的偏移地址mov ah,0ahin

6、t 21h ;從鍵盤接收字符,并存放到緩沖區(qū)mov cl,buff2 ;取buff2的偏移地址xor dx,dx ;將dx清零lea si,buff3 ;取buff3的偏移地址loop1: shl dx,1 ;將dx左移一位mov al,si ;將si偏移地址對應的值賦給alcmp al,'0' ;將al與0比較 jz loop2 ;若為0,則跳轉到loop2 inc dx ;若不為0,則dx+1loop2: inc si ;si+1loop loop1 mov bx,dx ;將dx的值賦給bxlea dx,buff6 ;取buff6的偏移地址mov ah,9 int 21h

7、;在屏幕上顯示字符串lea dx,buff4 ;取buff4的偏移地址mov ah,9int 21h ;在屏幕上顯示字符串mov ah,1int 21h ;按下任意鍵,將對應字符的ASCII碼送到al,并在屏幕上顯示該字符。mov cx,ax ;將ax的值賦給cxlea dx,buff6 ;取buff6的偏移地址mov ah,9int 21h ;在屏幕上顯示字符串mov al,cl ;將cl的值賦給alcmp al,'1' ;將al與1做比較jz loop3 ;若為0,則跳轉到loop3cmp al,'2' ;將al與2做比較jz loop4 ;若為0,則跳轉到

8、loop4lea si,buff5 ;取buff5的偏移地址mov dx,bx ;將bx的值賦給dxand dx,0f000h ;取dx的高4位mov cl,0ch ;將cl賦值shr dx,cl ;將dx右移11位add si,dx ;將si與dx相加mov dl,si ;將si偏移地址對應的值賦給dlmov ah,2int 21h ;將置入dl寄存器中的字符在屏幕上顯示輸出lea si,buff5 ;取buff5的偏移地址mov dx,bx ;將bx的值賦給dxand dx,0f00h ;取dx的高4位mov cl,8h ;將cl賦值shr dx,cl ;將dx右移8位add si,dx

9、;將si與dx相加mov dl,si ;將si偏移地址對應的值賦給dlmov ah,2int 21h ;將置入dl寄存器中的字符在屏幕上顯示輸出lea si,buff5 ;取buff5的偏移地址mov dx,bx ;將bx的值賦給dxand dx,00f0h ;取dx的4-8位mov cl,4h ;將cl賦值shr dx,cl ;將dx右移4位add si,dx ;將si與dx做與mov dl,si ;將si偏移地址對應的值賦給dlmov ah,2 int 21h ;將置入dl寄存器中的字符在屏幕上顯示輸出lea si,buff5 ;取buff5的偏移地址mov dx,bx ;將bx的值賦給d

10、xand dx,0fh ;取dx的低4位add si,dx ;將si與dx做與mov dl,si ;將si偏移地址對應的值賦給dlmov ah,2int 21h ;將置入dl寄存器中的字符在屏幕上顯示輸出jmp loop5loop3:jmp loop6 loop4: mov ax,bx ;將bx賦值給axmov dx,0 ;將dx賦值mov cx,10000 ;將cx賦值call divdw mov dl,al ;將dl賦值add dl,30h ;將dl與30h相加mov ah,2 int 21h ;將置入dl寄存器的字符在屏幕上顯示輸出mov ax,cx ;將ax賦值mov dx,0 ;將d

11、x賦值mov cx,1000 ;將cx賦值call divdw mov dl,al ;將dl賦值add dl,30h ;將dl與30h相加mov ah,2 int 21h ;將置入dl寄存器的字符在屏幕上顯示輸出mov ax,cx ;將ax賦值mov dx,0 ;將dx賦值mov cx,100 ;將cx賦值call divdw mov dl,al ;將dl賦值add dl,30h ;將dl與30h相加mov ah,2 int 21h ;將置入dl寄存器的字符在屏幕上顯示輸出mov ax,cx ;將ax賦值mov dx,0 ;將dx賦值mov cx,10 ;將cx賦值call divdwmov

12、dl,al ;將dl賦值add dl,30h ;將dl與30h相加mov ah,2int 21h ;將置入dl寄存器的字符在屏幕上顯示輸出mov ax,cx ;將ax賦值mov dl,al ; 將dx賦值add dl,30h ;將dl與30h相加mov ah,2 int 21h ;將置入dl寄存器的字符在屏幕上顯示輸出jmp loop5 loop6: mov dx,bx ;將dx賦值and dx,1000h ;將dx與1000h做與mov cl,0fh ;將cl賦值shr dx,cl ;將dx右移16位add dl,30h ;將dl與30h相加mov ah,2int 21h ;將置入dl寄存器

13、的字符在屏幕上顯示輸出mov dx,bx ;將dx賦值and dx,7000h ;將dx與7000h做與mov cl,0ch ;將cl賦值shr dx,cl ;將dx右移11位add dl,30h ;將dl與30h相加mov ah,2int 21h ;將置入dl寄存器的字符在屏幕上顯示輸出mov dx,bx ;將dx賦值and dx,0e00h ;將dx與0e00h做與mov cl,9h ;將cl賦值shr dx,cl ;將dx右移9位add dl,30h ;將dl與30h相加mov ah,2 int 21h ;將置入dl寄存器的字符在屏幕上顯示輸出mov dx,bx ;將dx賦值and dx

14、,1c0h ;將dx與1c0h做與mov cl,6h ;將cl賦值shr dx,cl ;將dx右移6位add dl,30h ;將dl與30h相加mov ah,2int 21h ;將置入dl寄存器的字符在屏幕上顯示輸出mov dx,bx ;將dx賦值and dx,38h ;將dx與38h做與mov cl,3h ;將cl賦值shr dx,cl ;將dx右移3位add dl,30h ;將dl與30h相加mov ah,2 int 21h ;將置入dl寄存器的字符在屏幕上顯示輸出mov dx,bx ;將dx賦值and dx,7h ;將dx與7做與add dl,30h ;將dl與30h相加mov ah,2

15、 int 21h ;將置入dl寄存器的字符在屏幕上顯示輸出jmp loop5;=; 名稱:divdw; 功能:進行不會產生溢出的除法運算,被除數為dword型,除數為word型,結果為dword型;參數:(ax)=dword型數據的低16位; (dx)=dword型數據的高16位; (cx)=除數;返回:(dx)=結果的高16位,(ax)=結果的低16位;loop5:mov ah,1 int 21h ;按下任意鍵,將其對應字符的ASCII碼送到al中 ,并在屏幕上顯示該字符。 mov ax,4c00hint 21h divdw proc push bx push ax mov ax,dx mo

16、v dx,0 div cx mov bx,ax pop ax div cx mov cx,dx mov dx,bx pop bxretendp code endsend start4調試運行結果4.1調試運行結果如下圖所示:圖5 請求輸入一個2進制數 圖6 鍵盤輸入一個2進制數圖7 按1則顯示8進制數 圖8 按2則顯示10進制數圖9 按3則顯示16進制數4.2 調試中遇到的問題 錯誤程序1圖10 錯誤提示錯誤代碼:mov cx,1000 call divdw mov dl,ax add dl,30h mov ah,2 int 21h更正后為:mov cx,1000 call divdw mov

17、 dl,al add dl,30h mov ah,2 int 21h錯誤原因分析:定義的類型不匹配,所以導致運行出錯。 錯誤程序2 圖11 錯誤提示錯誤代碼:mov al,cl cmp al,'1'jz loop6更改后為:mov al,clcmp al,'1'jz loop3loop3: jmp loop6 錯誤原因分析:跳轉的段落距離過大。5小結這次課設歷時兩個星期,在這兩個星期里我學到了很多的東西,不僅鞏固了以前學過的知識,而且學到了很多書本外的東西。初見題目時,心里還是感覺到有一點的茫然,因為不知道該從何處下手,不知道怎么去完成一份令自己滿意的課程設計。

18、后來想起了以前上課的時候,老師在講解一個程序之前總是先畫出程序的原理方框圖,這個看似簡單的過程其實是非常重要的,它不僅是我程序設計的提綱,更是我一步步克服難題的保證。其次,在做課程設計的過程中,我對于一些編程工具還處于一知半解的狀態(tài)下,在調試的過程中遇到了很多的困難,在同學、老師的幫助下,我試著去了解每個寄存器的內容以確保程序的正確。通過這次課程設計,我懂得了理論與實際結合的重要性,只有理論知識是遠不夠的,只有把理論和實際相結合,從理論中得出結論,從而提高自己的實際動手能力和獨立思考能力才是課程設計的真正目的,在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論