回 帖 发 新 帖 刷新版面

主题:代码如何实现16进制数转10进制在屏幕输出

先谢过各位大虾,小弟初学汇编,望请教:

.8086

(AX)=18BAH  ;5050D


如何经过对AX寄存器的数据进行处理,在屏幕上输出它的十进制形式呢?

最好说明输出是调用几号中断哦~ 

THANKS~

回复列表 (共4个回复)

沙发

用除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

板凳

可以先转为BCD码,用daa ax,0的方法(假定ax存的是你要转的16进制数)

然后把BCD码的每四位转换成ASCII码输出,假定al里存一个字节类型,先保护现场,可以把高四位逻辑右移4位,加个30H(0的ASCII码),输出之,然后现场恢复,把al里的数与上个0FH,再加上个30H,输出之。

3 楼

楼主的能写详细点么,谢谢

4 楼

除10需用双字,否则会溢出的。思路就如二楼所说的,谢谢了~

我来回复

您尚未登录,请登录后再回复。点此登录或注册