把一位16进制数转化为对应的ASCII码。

4个2进制位为一个16进制数,2进制1111为16进制F,2进制中千位的1=8,百位的1=4,十位的1=2,个位的1=1,将各个位的数作相应转换再相加,的到的数就是10进制数0-15,可轻松转换成16进制。如01011100,可看成是两组2进制数0101和1100,则这个数就是16进制的5C。

十六进制转ascii_十六进制转ASCII在线转换十六进制转ascii_十六进制转ASCII在线转换


十六进制转ascii_十六进制转ASCII在线转换


10转16:

100以内一点的10转16心算比较快,复杂的用“计算器”算了。10转16用传统的计算方式可以了,就是大于15小于256的10进制数除以16为的值为十位的16进制数,其余数为个位的16进制数,没余数则个位为0。如61的16进制是3D,61除以16得3余13,3作十位数,13转成D为各位数。

16转10:

用相反的道理,将十位数乘以16加上个位数。如5A,将5乘以16得80,加上A的10进制10,结果是90。

这段程序的难点就是DAA的作用:

如果AL的低4位大于9或AF=1,则AL的内容加06H,并将AF置1;然后如果AL的高4位大于9或CF=1,则AL的内容加60H,且将CF置1。如果两个都不满足,则将AF,CF清零。

1.

如果al的值是0-9,那么:

add

al,90h

---------al变成90-99H

daa

---------al不变

daa

---------al加上60H,变成30-39H,正是0-9的ASCII码。

2.

如果al的值是A-F,那么:

add

al,90h

---------al变成9A-9FH

daa

---------al加6,高4位变A,所以再加60H,成00-05,且CF=1

---------al为41-46H,正是A-F的ASCII码。

daa

---------al不变

;设x,已经在r2中。

mov

a,

r2

;取来x

clr

csubb

a,

#3ah

jc

end_c

subb

a,

#07h

end_c:

add

a,

#0ah

;转换后的十六进制数,在a中。

ret

就这些。

理解DAA的作,就不难明白

以下截取自INTEL手册,应该已经很清楚了,无需更多描述

old_AL

AL;

old_CF

CF;

CF

0;

IF

(((AL

AND

0FH)

>9)

or

AFal,40h

1)

THC;清进(借)位位EN

AL

AL

+6;

CF

old_CF

or

(Carry

from

AL

AL

+6);

AF

1;

ELSE

AF

0;

FI;

IF

((old_AL

>99H)

or

(old_CF

=1))

THEN

AL

AL

+60H;

CF

1;

ELSE

CF

0;

FI;

用汇编怎么将16进制转ASCII码?

入栈

比如说1aH

---------al为d0-d9

转换成ASCII就是31h,41h

计算过程就是当

mov mem,1ah

mov al,mem

shr al,4

cmp al,a

jb xx

add al,7h

xx:

add al,30h

mov dl,al

mov ah,02h

int 21h

mov al,mem

and al,0fh

cmp al,a

jb xxx

add al,7h

xxx:

add al,30h

mov dl,al

mov ah,02h

int 21h

汇编大多是指汇编语言,汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用助记符(Memoni)代替作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。

给出一个十六进制数,将其转换成ASCII码值的单片机程序及其实验结果

下面有个转换程序,参考一下,就不难理解原理:

HASC:MOV

A,R0

;从R0中取一个16进制(

二进制

)数(0-F)

A,#0FH

;屏蔽掉高4位

PUSH

ACC

;4位

二进制数

CLR

SUBB

A,#0AH

POP

ACC

JC

LOOP

ADD

A,#07H

LOOP:ADD

A,#30H

MOV

Rjmp _CsnTow2,A

RET

实验结果:R0中的

十六进制数

(比如A),转换为ASCII码(41H)送入R2中。

单片机中十六进制数转换为ASCII码,那么两者之间有什么联系??

ANL

每两个十六进制字符对应一个ASCII码

如adc:16进制0x41 对应就是 A

计算方式:0x41(16)->65(10)->A(ascII)

或者0x41(16)->00100001(2)->A(ascII)

求汇编语言十六进制数转换成ASCII 码的原理

and al,0f0h

看看这个,在页面下边,还可以找到很多的链接......

CsnCharToData Proc lpszChar:DWORD,lpBuff:DOWRD,sizechar:DWORD

pushad

mov edi,lpBuff

mov esi,lpszChar

mov ecx,sizechar

_CsnCTD:

xor eax,eax

mov al,Byte ptr [esi]

shl ax,4

shr al,4

_CsnTow:

cmp al,9h

ja _d9

add al,30h

jmp _end

<-_d9:

add al,37h

_end:

cmp ah,0fh

ja _CsnOv

xchg ah,al

_CsnOv:

mov Word ptr [edi],ax

add edi,2

inc esi

loop _CsnCTD

popad

ret

CsnCharToData Endp

lpszChar:指向需要转换的数据地址

lpBuff:转换后存放的内存地址

sizeChar:需要转换的长度

无返回值/。

注意:代码未做边界处理及参数判断,使用时请为lpBuff提供2xSizeChar+1的长度空间, 若使用不当则能造成数据覆盖或溢出.

lpBuff的值勿为堆栈地址,否则溢出.

此代码仅为学习使用.

例;

Byte ptr [Esi]="A"(41h)

则 Word ptr [Edi]="41"(34d 31d)

显示方式自己调用,这是保护模式下的代码 如果要用于实模式则自己修改