assume cs:codesg,ds:datasg,ss:stack
datasg segment
db 10 dup (0)
datasg ends
stack segment
db 32 dup (0)
stack ends
codesg segment
start: mov ax,12666
mov bx,datasg
mov ds,bx
mov bx,stack
mov ss,bx
mov sp,20h
mov si,0
call dtoc ;将下一地址入栈,占用栈一个位置,注意栈溢出
mov dh,8
mov dl,3q
mov cl,2
call show_str
mov ax,4c00h
int 21h
;名称:dtoc
;功能:将word型数据转换成十进制字符串,字符串以0结尾
;参数:(ax)=word型数据,ds:si指向字符串首地址
;返回:无
dtoc: push ax
push bx
push cx
push dx
push si
push di
mov di,0
s: mov dx,0 ;被除数高16位为0,低16位ax
mov bx,10d
div bx ;商为ax
add dx,30H ;余数+30H 对应ASCII码
push dx ;入栈保存
inc di
mov cx,ax
jcxz ok ;若商cx为0跳出循坏
jmp s
ok: mov cx,di
ok1:pop ax
mov ds:[si],ax
inc si
loop ok1
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
show_str: push ax
push bx
push cx
push dx
push si
push di
mov ax,0b800h
mov es,ax
mov bl,cl ; 储存字体颜色
mov al,160
mul dh ;显示屏位置dh*160+dl*2
mov dh,0
add dl,dl
add ax,dx
mov di,ax ;显示屏位置dh*160+dl*2
mov ah,bl ;设置字体颜色
s0: mov ch,0
mov cl,ds:[si]
jcxz s1 ;遇到0跳出循环
mov al,ds:[si]
mov es:[di],ax
inc si
add di,2
jmp short s0
s1: pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
codesg ends
end start |