摘要:匯編語言中各種數制之間有時需要進行轉換,對于二進制、八進制、十進制和十六進制之間的轉換相對來說比較常見,但對于ASCII碼、BCD碼卻不常見,本文就針對ASCII碼和其它進制數給出了它們相互轉換的思路和程序設計。
關鍵詞:ASCII碼;二進制;十進制;十六進制
1 引言
計算機輸入設備輸入的信息一般是由ASCII碼表示的數據或字符,而在計算機內部都會轉換成二進制數進行計算或其他信息處理,處理結果的輸出又必須依照外設的要求變為ASCII碼、BCD碼等。因此,各類數制的轉換和代碼的轉換是必不可少的,而對于二進制、八進制、十進制和十六進制之間的轉換相對來說比較常見,因此,我們著重來探討一下ASCII碼和二進制、十進制等數制的轉換。
2 將ASCII碼表示的十進制數轉換為二進制數
2.1編程思路
十進制數表示為:
Dn×10n+ Dn-1×10n-1+…+ D0×100=∑ Di×10i
Di代表十進制數1,2,…,9,0
上式轉換為:
∑Di×10i=((…(Dn×10+Dn-1)×10)+ Dn-2)×10+…+ D1)×10+D0
由此可歸納十進制轉換為二進制的方法:從十進制數的最高位Dn開始作乘10加次位的操作,以此類推,則可求出二進制數結果。
2.2參考程序段如下:
假設十進制數為15,其ASCII碼為30H,30H,31H,35H,并存于內存2000H開始的單元,轉換結果存于3000H開始的單元。
MOV SI,2000H
MOV Di,3000H
MOV BX,10
MOV CX,4
MOV AH,0
MOV AL,[SI]
SUB AL,30H
AA: IMUL BX
ADD AL,[SI+1]
SUB AL,30H
INC SI
LOOP AA
MOV [Di>],AX
3 將二進制數轉換為ASCII碼表示的十進制數
3.1編程思路
假設是十六位二進制數,其表示范圍為0-65535,也就是最大可轉換為5位十進制數,5位十進制數可表示為:
ND=D4×104+ D3×103+ D2×102+ D1×10+ D0
Di表示十進制數0~9
因此,將十六位二進制數轉換為5位ASCII碼表示的十進制數,就是求D1 ~D4,并將它們轉換為ASCII碼。
3.2參考程序段如下:
假設十六位的二進制數存于2000H和2001H單元中,結果存于3000H~3004H單元。
MOV SI,2000H
MOV DX,[SI]
MOV SI,3005H
AA: DEC SI
MOV AX,DX
MOV DX,0
MOV CX,10
DiV CX
XCHG AX,DX
ADD AL,30H
MOV [SI],AL
CMP DX,0
JNE AA
BB: CMP SI,3000H
JZ CC
DEC SI
MOV AL,30H
MOV [SI],AL
JMP BB
CC: HLT
4 十六進制數轉換為ASCII碼
4.1編程思路
十六進制數為0~FH,在轉換為ASCII碼時,我們先統一把十六進制數加上30H,對0~9H來說,即可得到其ASCII碼,而要得到AH~FH的ASCII碼,則需要再加上07H。
4.2參考程序段如下:
假設十六進制數存放在2000H開始的內存單元,轉換后的ASCII碼存于3000H開始的單元。
MOV CH,4
MOV CL,4
MOV SI,2000H
MOV Di,3000H
MOV DX,[SI]
AA: MOV AX,DX
ADD AL,30H
CMP AL,3AH
JB BB
ADD AL,07H
BB: MOV [Di],AL
INC SI
INC Di
SHR DX,CL
DEC CH
JNZAA
5 結束語
因為我們從鍵盤上接收的字符都是以ASCII的形式存在,而不論何種進制的數要想顯示出來,前提是必須轉換成相應的ASCII碼。然而在匯編語言中實現數據的顯示沒有類似高級語言中的輸出格式命令那么方便,對每個數的顯示,一般都需要逐位地轉換成ASCII碼才能調用系統顯示功能完成顯示。所以,我們以上只是介紹了在匯編語言程序設計中,如何在不同數制的數和其ASCII碼之間相互轉換,如果大家想把一個數以不同的進制從顯示器上顯示出來的話,只需再加上一段DOS的功能調用即可,這里就不再詳細介紹了。
參考文獻
[1]沈美明,溫冬嬋.IBM-PC匯編語言程序設計.北京:清華大學出版社,1991.
[2]西安唐都科教儀器公司 8086試驗指導書.