数值显示
编程,将data段中的数据以二进制的形式显示出来。
子程序描述
名称:dtoc
功能:将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
参数:(ax)=word型数据
ds:si指向字符串的首地址
返回:无
应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。在显示时我们调用上面程序中的show_str子程序。
assume cs:code
data segment
db 10 dup (0)
data ends
code segment
start: mov ax, 12666
mov bx, data
mov ds, bx
mov si, 0
call dtoc ;将ax的每一位转化为字符串
mov dh, 8
mov dl, 3
mov cl, 2
call show_str ;显示data段的字符串
mov ax, 4c00h
int 21h
dtoc:
push dx
push bx
push cx
push si
mov dx, 0 ;做除法的高16位
mov bx, 10
s4: div bx
mov cx, ax
jcxz s5 ;余数为0时函数退出返回
add dx, 30h ;将余数转换为对应的ASCII值
mov ds:[si], dl ;除以10的余数存在dl中
inc si
mov dx, 0 ;上一次的商作为被除数
mov cl, 1 ;保证余数为0时才退出,让cl不为0
loop s4
s5: mov ds:[si], dl ;字符串以0为结尾符
mov si, 0
pop si
pop cx
pop bx
pop dx
ret
show_str:
push es
push ax
push bp
push di
push si
mov ax, 0b800h
mov es, ax
mov al, cl
mov bp, 0
mov ch, 0
mov cl, dh
s0: add bp, 160
loop s0 ;循环计算行偏移量
mov di, 0
mov ch, 0
mov cl, dl
s1: add di,2
loop s1 ;循环计算列偏移量
s2: mov cl,ds:[si]
jcxz s3
mov es:[bp + di],cl ;字符
inc di
mov es:[bp +di], al ;颜色
inc di
inc si
loop s2
s3:
pop si
pop di
pop bp
pop ax
pop es
ret
code ends
end start
网友评论