注册 登录
编程论坛 汇编论坛

求助 关于16进制数除10取余转化为10进制数的问题

一剑终秦 发布于 2006-12-16 20:10, 1777 次点击
小弟初学汇编 ,下面这几行代码怎么也看不明白
哪位大虾帮我解释下,谢谢

( HITNUMBER DB 0

TEMP DB 2 DUP(0) )

……

MOV AX, 0
MOV AL, HITNUMBER
MOV DI, OFFSET TEMP
INC DI
MOV DX, 0
MOV BX, 10D
DIV BX
XCHG AX, DX
ADD AL, 30H
MOV [DI], AL
DEC DI
ADD DL, 30H
MOV [DI], DL

[此贴子已经被作者于2006-12-16 20:23:55编辑过]

2 回复
#2
lefttime2006-12-16 20:45

MOV AX, 0
MOV AL, HITNUMBER ;这里取16进制数
MOV DI, OFFSET TEMP
INC DI
MOV DX, 0
MOV BX, 10D
DIV BX ;除数为16位,则商放在AX中,余数放在DX中
XCHG AX, DX ;交换AX和DX中的值,方便存储
ADD AL, 30H ;转换ASCII码
MOV [DI], AL ;从高位开始存,它这里是为了以后以字的形式输出啦
DEC DI
ADD DL, 30H
MOV [DI], DL


如果仅仅是按照原程序这个思路,其实还有更简单的方法

......
MOV AL,HITNUMBER
执行完后,用除法调整指令比较简易

......
MOV AX,0
MOV AL,HITNUMBER
AAM ;BCD码调整,典型的范围在0-99之间的16进制转10进制方法
AND AX,0F0FH
......

#3
一剑终秦2006-12-16 21:13
呵呵,明白了
多谢!!
1