;数值显示
;名称:dtoc
;将word型数据转变为表示十进制数的字符串,字符串以0位结尾符
;参数:(ax)=word型数据
; ds:si指向字符串的首地址
;返回:无
;应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来,在显示时我们条用本次试验中的第一个子程序shouw_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
mov dh,8
mov dl,3
mov cl,2
call show_str
dtoc:;转换字符串
push ax
push bx
push cx
push dx
push si
s1:;计算出余数
xor bx,bx
xor dx,dx
mov bl,10
div bl
mov dl,ah
add dl,30h
push dx
mov ah,0
mov cx,ax
mov di,0
inc di
jcxz s2
jmp short s1
mov cx,di
s2:;把栈中的数据弄出来到ds:【si】
pop ax
mov ds:[si],al
inc si
loop s2
quit:
pop si
pop dx
pop cx
pop bx
pop ax
ret
show_str: ;显示字符串的子程序[定义开始]
push cx
push si
mov al,0A0h
dec dh ;行号在显存中下标从0开始,所以减1
mul dh
mov bx,ax
mov al,2
mul dl
sub ax,2 ;列号在显存中下标从0开始,又因为偶字节存放字符,所以减2
add bx,ax ;此时bx中存放的是行与列号的偏移地址
mov ax,0B800h
mov es,ax ;es中存放的是显存的第0页(共0--7页)的起始的段地址
mov di,0
mov al,cl
mov ch,0
s: mov cl,ds:[si]
jcxz ok
mov es:[bx+di],cl ;偶地址存放字符
mov es:[bx+di+1],al ;奇地址存放字符的颜色属性
inc si
add di,2
jmp short s
ok: pop si
pop cx
ret ;显示字符串的子程序[定义结束]
mov ax,4c00h
int 21h
code ends
end start |