将数值转换为表示十进制数的字符串2
王爽汇编语言第二版
一、实验要求
上一部分实现了把一个word类型的数据转换为表示十进制数的字符串,现有需求要实现dword类型数据的转换,可用类似算法实现。算法参考http://www.cnblogs.com/S-E-P/archive/2009/12/28/2045087.html。
对dword类型的转换可能出现除法溢出的问题,解决方法参考http://www.cnblogs.com/S-E-P/archive/2009/12/27/2045090.html
二、程序接口
名称:dtoc
功能:将dword型数转变为表示十进制数的字符串,字符串以0为结尾符
参数:(ax)=dword型数据的低16位
(dx)=dword型数据的高16位
ds:si指向字符串的首地址
返回:无
三、实现代码
dtoc:
push ax
push bx
push cx
push dx
push bp
push si
mov bp,0
dtoc_s0:
mov cx,10d
call divdw
push cx
inc bp
mov cx,ax
inc cx
loop dtoc_s0
mov cx,bp
dtoc_s:
pop bx
add bl,30h
mov ds:[si],bl
inc si
loop dtoc_s
mov byte ptr ds:[si],0
pop si
pop bp
pop dx
pop cx
pop bx
pop ax
ret
四、测试代码
assume cs:code,ds:data,ss:stack
data segment
db 10 dup (0)
data ends
stack segment
dw 16 dup (0)
stack ends
code segment
start:
mov ax,9768h ;dx*16+ax=5937000
mov dx,5ah
mov bx,data
mov ds,bx
mov si,0
call dtoc ;调用转换的子程序
mov dh,8
mov dl,3
mov cl,2
call show_str ;调用显示字符串的子程序http://www.cnblogs.com/S-E-P/archive/2009/12/27/2045091.html
mov ax,4c00h
int 21h
code ends
end start
五、测试结果