阅读更多
删了怪可惜的,不要浪费。
单字节十六进制数转换成双字节 ASCII 码
功 能:单字节十六进制数转换成双字节 ASCII 码
入口条件:待转换的单字节十六进制数在累加器 A 中。
出口信息:高四位的 ASCII 码在 A 中,低四位的 ASCII 码在 B 中
实现1:(计算法)
PUSH A ;将A压栈,保存
MOV DPTR,#AST ;把AST数据段起始地址送DPTR,作为基址
ANL A,#0FH ;取低四位,即为低位ASCII码表示的数据大小
ADD A, 30H ;A值加30H即为对应ASCII码字符
XCH A,B ;交换,将结果送B保存
POP A ;弹栈,将入口值返回到寄存器A
SWAP A ;高低半字节交换
ANL A,#0FH ;取ASCII码对应高位表示数据
ADD A, 30H ;A值加30H即为对应ASCII码字符。至此,功能完成
SJMP $ ;原地踏步指令,相当于停机
实现2:(查表法)
PUSH A ;将A压栈,保存
MOV DPTR,#AST ;把AST数据段起始地址送DPTR,作为基址
ANL A,#0FH ;取低四位,即为低位ASCII码表示的数据大小
MOVC A,@A+DPTR ;寄存器间接寻址/查表指令,获得ASCII码低位字符数据,送A
XCH A,B ;交换,将结果送B保存
POP A ;弹栈,将入口值返回到寄存器A
SWAP A ;高低半字节交换
ANL A,#0FH ;取ASCII码对应高位表示数据
MOVC A,@A+DPTR ;寄存器间接寻址/查表指令,获得ASCII码高位字符数据,送A。至此,功能完成
SJMP $ ;原地踏步指令,相当于停机
AST:DB 30H,31H,32H,33H,34H,35H,36H,37H ;对应0~7字符的ASCII码
DB 38H,39H,41H,42H,43H,44H,45H,46H ;对应8~F字符的ASCII码
程序整体思路:
A、B寄存器为8位寄存器,所以高四位和低四位分别等于双字节ASCII码的高低两位字符代表的数字值。
比如10110011B=B3H,1011B=12D=BH 0011B=3D=3H (B:二进制,D:十进制,H:十六进制)
所以只要分别取入口参数的高低四位的数值,加上30H(或用查表法查得ASCII字符)就可以了。