assume cs:code
data segment
db 10 dup (0)
data ends
code segment
start:mov ax,12666 ;被除数
mov bx,data ;目标储存区域
mov ds,bx
mov di,0
call dtoc
!!!!!!!!!!!!!!!!!!!!!10.3程序开始
dtoc:
mov dx,0 ;32位除法,dx闲置
mov bx,10 ;赋值除数
mov cx,ax ;测试被除数是否为0
jcxz ok
div bx ;除法,商在ax中,余数在dx中
add dx,30H
push dx ;放入栈中,目的是把最终数倒过来
inc di ;记录读取字符的数量
jmp short dtoc ;循环dtoc
ok:
mov cx,di ;cx赋值循环次数
mov si,0
s1:
pop ds:[si] ;取出栈中的内容
inc si
loop s1
!!!!!!!!!!!!!!!!!!!10.3程序完毕
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
show_str:
push si
push cx
mov ax,0b800h
mov es,ax
mov al,0A0h ;80*25彩色缓冲区,每行为80*2=160 个字节。
dec dh ;内存从0开始
mul dh ;转到需要输出的行
mov bx,ax ;bx储存行
mov al,02h ;同理
mul dl
sub ax,2
add bx,ax ;在行的基础上加上列,定位完毕
mov di,0
mov al,cl ;cl中的颜色值先做保存
mov ch,0 ;归零,做递增使用
mov si,0 ;归零,递增用
s2:
mov cl,ds:[si] ;读取值
jcxz ok1 ;判断cx是否为0
mov es:[bx+di],cl ;不为0,赋值字符
mov es:[bx+di+1],al ;赋值颜色
inc si
add di,2
jmp short s2
ok1:
pop cx
pop si
ret
code ends
end start |