摘要:匯編語言中各種數(shù)制之間有時需要進(jìn)行轉(zhuǎn)換,對于二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制之間的轉(zhuǎn)換相對來說比較常見,但對于ASCII碼、BCD碼卻不常見,本文就針對ASCII碼和其它進(jìn)制數(shù)給出了它們相互轉(zhuǎn)換的思路和程序設(shè)計(jì)。
關(guān)鍵詞:ASCII碼;二進(jìn)制;十進(jìn)制;十六進(jìn)制
1 引言
計(jì)算機(jī)輸入設(shè)備輸入的信息一般是由ASCII碼表示的數(shù)據(jù)或字符,而在計(jì)算機(jī)內(nèi)部都會轉(zhuǎn)換成二進(jìn)制數(shù)進(jìn)行計(jì)算或其他信息處理,處理結(jié)果的輸出又必須依照外設(shè)的要求變?yōu)锳SCII碼、BCD碼等。因此,各類數(shù)制的轉(zhuǎn)換和代碼的轉(zhuǎn)換是必不可少的,而對于二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制之間的轉(zhuǎn)換相對來說比較常見,因此,我們著重來探討一下ASCII碼和二進(jìn)制、十進(jìn)制等數(shù)制的轉(zhuǎn)換。
2 將ASCII碼表示的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)
2.1編程思路
十進(jìn)制數(shù)表示為:
Dn×10n+ Dn-1×10n-1+…+ D0×100=∑ Di×10i
Di代表十進(jìn)制數(shù)1,2,…,9,0
上式轉(zhuǎn)換為:
∑Di×10i=((…(Dn×10+Dn-1)×10)+ Dn-2)×10+…+ D1)×10+D0
由此可歸納十進(jìn)制轉(zhuǎn)換為二進(jìn)制的方法:從十進(jìn)制數(shù)的最高位Dn開始作乘10加次位的操作,以此類推,則可求出二進(jìn)制數(shù)結(jié)果。
2.2參考程序段如下:
假設(shè)十進(jìn)制數(shù)為15,其ASCII碼為30H,30H,31H,35H,并存于內(nèi)存2000H開始的單元,轉(zhuǎn)換結(jié)果存于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 將二進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼表示的十進(jìn)制數(shù)
3.1編程思路
假設(shè)是十六位二進(jìn)制數(shù),其表示范圍為0-65535,也就是最大可轉(zhuǎn)換為5位十進(jìn)制數(shù),5位十進(jìn)制數(shù)可表示為:
ND=D4×104+ D3×103+ D2×102+ D1×10+ D0
Di表示十進(jìn)制數(shù)0~9
因此,將十六位二進(jìn)制數(shù)轉(zhuǎn)換為5位ASCII碼表示的十進(jìn)制數(shù),就是求D1 ~D4,并將它們轉(zhuǎn)換為ASCII碼。
3.2參考程序段如下:
假設(shè)十六位的二進(jìn)制數(shù)存于2000H和2001H單元中,結(jié)果存于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 十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼
4.1編程思路
十六進(jìn)制數(shù)為0~FH,在轉(zhuǎn)換為ASCII碼時,我們先統(tǒng)一把十六進(jìn)制數(shù)加上30H,對0~9H來說,即可得到其ASCII碼,而要得到AH~FH的ASCII碼,則需要再加上07H。
4.2參考程序段如下:
假設(shè)十六進(jìn)制數(shù)存放在2000H開始的內(nèi)存單元,轉(zhuǎn)換后的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 結(jié)束語
因?yàn)槲覀儚逆I盤上接收的字符都是以ASCII的形式存在,而不論何種進(jìn)制的數(shù)要想顯示出來,前提是必須轉(zhuǎn)換成相應(yīng)的ASCII碼。然而在匯編語言中實(shí)現(xiàn)數(shù)據(jù)的顯示沒有類似高級語言中的輸出格式命令那么方便,對每個數(shù)的顯示,一般都需要逐位地轉(zhuǎn)換成ASCII碼才能調(diào)用系統(tǒng)顯示功能完成顯示。所以,我們以上只是介紹了在匯編語言程序設(shè)計(jì)中,如何在不同數(shù)制的數(shù)和其ASCII碼之間相互轉(zhuǎn)換,如果大家想把一個數(shù)以不同的進(jìn)制從顯示器上顯示出來的話,只需再加上一段DOS的功能調(diào)用即可,這里就不再詳細(xì)介紹了。
參考文獻(xiàn)
[1]沈美明,溫冬嬋.IBM-PC匯編語言程序設(shè)計(jì).北京:清華大學(xué)出版社,1991.
[2]西安唐都科教儀器公司 8086試驗(yàn)指導(dǎo)書.