汇编 如何将十六进制数转换成十进制数输出显示出来。

damimi111 2013-12-30 09:51:57
AL寄存器存放了一个十六进制数,它的范围在00H-FFH。

我现在希望能有一个算法,能够将它转换成十进制,并显示在屏幕上。(最好能用 MOV AH, 02H INT 21H这个来显示)
比如,AL中存放的是30H,则输出048,或者就48也行。AL中放的是70H,则输出112。

00h-09h的算法很好实现,自己已经解决。
但是一旦转换出来的十进制数超过2位,这个算法就困难了,数学不好,看着ASCII码看了半天,归纳了很久没找到规律。。。求大神指教。

初识汇编,较关键的地方希望能多给点注释,感激不尽。



...全文
15842 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_32768191 2016-05-20
  • 打赏
  • 举报
回复
可以使用dosbox这个软件,
qq_24312885 2015-12-17
  • 打赏
  • 举报
回复
引用 4 楼 u010461582 的回复:
求问大家汇编用什嘛软件呀,老师给的只适用于32位机。。。淡淡的忧伤啊啊
Masm for windows 集成实验环境
FlyinTang 2015-11-19
  • 打赏
  • 举报
回复
[quote=引用 4 楼 u010461582 的回复:] masm2015
bitsylvia 2014-11-22
  • 打赏
  • 举报
回复 1
求问大家汇编用什嘛软件呀,老师给的只适用于32位机。。。淡淡的忧伤啊啊
zara 2014-01-02
  • 打赏
  • 举报
回复
xor dx,dx 就是将 dx 置 0 ;由于要保证除以 10 时不溢出,所以用的是 div cx(=10),这样就是 dx:ax 组成的 dword 除以 cx,而 ax 里是原来的被除数,所以就要将 dx 置 0 了,否则有了其它内容的话,就会产生错误的结果。
test ax,ax 就是看商是否为 0;如果 为 0 了说明除法操作该结束了。
damimi111 2013-12-31
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
这个有个通行是方法吧,采用除 10 求余压栈,最后在逐一出栈进行显示。至于实现的原理,拿个实际数据单步走一边就能看明白了。
; display the unsigned integer value in AX
dec2asc		proc
		push	ax
		push	dx
		push	cx
		mov	dx, -1	; flag of ending
		push	dx	; flag to stack
		mov	cx, 10
l_div10:
		xor	dx, dx
		div	cx	; DX:AX / CX
		push	dx
		test	ax, ax
		jne	l_div10
		mov	cx, -1
		mov	ah, 2	; display character in DL
l_disp:
		pop	dx
		cmp	dx, cx
		je	l_ret
		add	dl, '0'	; one-digit value turns to character
		int	21h	; display the digit
		jmp	l_disp
l_ret:
		pop	cx
		pop	dx
		pop	ax
		ret
dec2asc		endp
XOR DX, DX这一句是什么意思呢,还有TEST AX,AX这句。 能给点注释么,读了几遍没看懂。。。DX中也不知道装的什么。。。
zara 2013-12-31
  • 打赏
  • 举报
回复 1
这个有个通行是方法吧,采用除 10 求余压栈,最后在逐一出栈进行显示。至于实现的原理,拿个实际数据单步走一边就能看明白了。
; display the unsigned integer value in AX
dec2asc proc
push ax
push dx
push cx
mov dx, -1 ; flag of ending
push dx ; flag to stack
mov cx, 10
l_div10:
xor dx, dx
div cx ; DX:AX / CX
push dx
test ax, ax
jne l_div10
mov cx, -1
mov ah, 2 ; display character in DL
l_disp:
pop dx
cmp dx, cx
je l_ret
add dl, '0' ; one-digit value turns to character
int 21h ; display the digit
jmp l_disp
l_ret:
pop cx
pop dx
pop ax
ret
dec2asc endp

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧