【微機原理】實驗五 十六進制轉BCD實驗

一、實驗要求

​ 利用PROTEUS平臺,建立8086 的十六進制轉BCD例子。

二、實驗目的

1、熟悉實驗系統的編程和使用。

2、掌握簡單的數值轉換算法。

3、基本瞭解數值各種表達方法。

三、實驗說明

計算機中的數值有各種表達方式,這是計算機的基礎。掌握各種數制之間的轉換是一種基本功。有興趣的同學可以試試將BCD轉換成十六進制碼。

四、實驗程序流程圖

在這裏插入圖片描述

五、實驗步驟

a.仿真代碼

;將AX拆爲5個BCD碼,並存入RESULT開始的5個單元
;AX=0FFFFH=65535
CODE SEGMENT
     ASSUME CS:CODE, DS:DATA
START:
     MOV AX, DATA
     MOV DS, AX
     MOV DX,0000H
     MOV AX, 65535	;被轉換的數字
     MOV CX, 10000
     DIv CX			; DIV用AX除以CX
     MOV RESULT, AL ; 除以 10000, 得WAN位數,AL中存的是商
     MOV AX,DX      ; DX中存儲的是餘數
     MOV DX,0000H
     MOV CX, 1000
     DIv CX
     MOV RESULT+1, AL ; 除以 1000, 得QIAN位數
     MOV AX,DX
     MOV DX,0000H
     MOV CX, 100
     DIv CX
     MOV RESULT+2, AL ; 除以 100, 得BAI位數
     MOV AX,DX
     MOV DX,0000H
     MOV CX, 10
     DIv CX
     MOV RESULT+3, AL ; 除以 10, 得SHI位數
     MOV RESULT+4, DL ; 得GE位數
     JMP $
CODE ENDS
DATA SEGMENT  
     RESULT Db 5 DUP(?)
DATA ENDS
     END START

b.調試、驗證

首先AX=65535=FFFFH,CX=10000=2710H

在這裏插入圖片描述

執行完DIV CX後,AX中存儲65535/10000的商6,DX存儲餘數159FH=5535.

在這裏插入圖片描述

然後商6H作爲萬位結果,存入內存。
在這裏插入圖片描述
將DX內的餘數移入AX後,將DX重置爲0,再將CX設置爲1000=3E8H。
在這裏插入圖片描述
執行完DIV CX後,AX中存儲5535/1000的商5,DX存儲餘數217H=535.

在這裏插入圖片描述

然後商5H作爲千位結果,存入內存。
在這裏插入圖片描述
將DX內的餘數移入AX後,將DX重置爲0,再將CX設置爲100=64H。

在這裏插入圖片描述

執行完DIV CX後,AX中存儲535/100的商5,DX存儲餘數23H=35.

在這裏插入圖片描述

然後商5H作爲百位結果,存入內存。
在這裏插入圖片描述
將DX內的餘數移入AX後,將DX重置爲0,再將CX設置爲10=AH。

在這裏插入圖片描述

執行完DIV CX後,AX中存儲35/10的商3,DX存儲餘數5H=5.

在這裏插入圖片描述

然後商5H作爲十位結果,存入內存。

在這裏插入圖片描述

餘數可以直接作爲個位結果存入內存。

在這裏插入圖片描述

六. 實驗結果和體會

實驗結果如上,可以發現內存中存儲了十進制表示的65535.成功實現了十六進制到BCD碼的轉換。

然而該程序仍存在不小缺陷,其對各位的處理是定死在程序中的,對於大於一個字節的十六進制就無能爲力了。如果轉成循環結構,既能應對更長的數據處理,又能節省程序內存。

七. 擴展題目程序和實驗結果

;將12345轉成16進制,並存入RESULT
CODE SEGMENT
     ASSUME CS:CODE, DS:DATA
START:
     MOV AX, DATA
     MOV DS, AX
     MOV DX,0000H
     MOV AX, 12345
     MOV CX, 1000H
     DIv CX
     MOV RESULT, AL ; 除以 1000H, 得QIAN位數
     MOV AX,DX
     MOV DX,0000H
     MOV CX, 100H
     DIv CX
     MOV RESULT+1, AL ; 除以 100H, 得BAI位數
     MOV AX,DX
     MOV DX,0000H
     MOV CX, 10H
     DIv CX
     MOV RESULT+2, AL ; 除以 10H, 得SHI位數
     MOV RESULT+3, DL ; 得GE位數
     JMP $
CODE ENDS
DATA SEGMENT  
     RESULT Db 5 DUP(?)
DATA ENDS
     END START

相比原程序,該程序只改動了AX初始化的數值爲12345,並將各除數從十進制改爲十六進制。並且由於在十六進制下只有四位數,故刪去了一次除法。實際上不刪的話也只是在最前方多了個0.

實驗未開始時的內存

[外鏈圖片轉存失敗(img-Wwc5EqwB-1569060123686)(5-15.PNG)]

還沒初始化時寄存器全爲0

在這裏插入圖片描述

程序執行完後,內存多了3039H=12345
在這裏插入圖片描述
而此時的寄存器保存着最後一次除法的結果,39H/10H的商爲3H,餘數爲9H,分別在AX與DX中。CX中存着除數10H。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章