主题:代码如何实现16进制数转10进制在屏幕输出
online916
[专家分:110] 发布于 2007-11-10 22:55:00
先谢过各位大虾,小弟初学汇编,望请教:
.8086
(AX)=18BAH ;5050D
如何经过对AX寄存器的数据进行处理,在屏幕上输出它的十进制形式呢?
最好说明输出是调用几号中断哦~
THANKS~
回复列表 (共4个回复)
沙发
zhoulikelvjj [专家分:20] 发布于 2007-11-11 14:35:00
用除10 取余法
思路大概是这样的:
先定义一个变量装要转换的数的每一位:num byte 5 dup (?)
mov cx,5
mov si,0
AGN:mov bl,10
div bl
mov num[si],ah ;余数部分
mov ah,0
loop AGN ;每一位是逆序存放的,num里是0,5,0,5,0
mov si,4
mov cx,5
AGN1:mov dl,num[si] ;从后面开始往前依次输出,调用21H里2号中断,输出一个字符
or dl,30h
mov ah,2
int 21h
dec si
loop AGN1
板凳
wuliaolll [专家分:90] 发布于 2007-11-13 19:49:00
可以先转为BCD码,用daa ax,0的方法(假定ax存的是你要转的16进制数)
然后把BCD码的每四位转换成ASCII码输出,假定al里存一个字节类型,先保护现场,可以把高四位逻辑右移4位,加个30H(0的ASCII码),输出之,然后现场恢复,把al里的数与上个0FH,再加上个30H,输出之。
3 楼
events111 [专家分:30] 发布于 2007-11-18 10:38:00
楼主的能写详细点么,谢谢
4 楼
online916 [专家分:110] 发布于 2007-12-07 13:34:00
除10需用双字,否则会溢出的。思路就如二楼所说的,谢谢了~
我来回复