将数值转换为表示十进制数的字符串
王爽汇编语言第二版,实验10.3
一、实验要求
编写一个子程序,实现将一个数值转换为表示十进制数的字符串
二、程序接口
名称:dtoc
功能:将word型数据转变为十进制数的字符串,字符串以0为结尾符
参数:(ax) = word型数据
ds:si指向字符串的首地址
返回:无
三、算法概述
1、可以反复调用除法运算除以10d取余数,直到商为0,可以获得十进制各位码
例如:
10 | 12666 6
——————
10 | 1266 6
—————
10 | 126 6
————
10 | 12 2
———
10 | 1 1
——
0
2、对十进制各位码加上30h就转换成为了各位的ASCII值
四、实现代码
dtoc:
push ax ;保存寄存器现场
push bx
push cx
push dx
push si
mov bp,0 ;字符串长度计数器
dtoc_s:
mov cx,10
mov dx,0
div cx
push dx ;余数入栈
mov cx,dx ;商保存到cx中,进行判断
inc bp
loop dtoc_s ;如果cx值不为零,则转跳
mov cx,bp
mov dx,0
dtoc_s1:
pop dx
add dl,30h ;转换为ASCII码
mov ds:[si],dl
inc si
loop dtoc_s1
mov byte ptr ds:[si],0 ;向最后一位写入一个0
pop si ;恢复寄存器现场
pop dx
pop cx
pop bx
pop ax
ret
五、测试代码
assume cs:code
data segment
db 10 dup (0)
data ends
stack segment
dw 16 dup (0)
stack ends
code segment
start:
mov bx,stack ;定义栈段
mov ss,bx
mov sp,33
mov ax,12666 ;为调用子程序传参
mov bx,data
mov ds,bx
mov si,0
call dtoc ;调用子程序
;调用显示字符串的子程序,参考http://blog.csdn.net/lingdushanke/archive/2009/12/27/5085512.aspx
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
code ends
end start
六、测试结果