[hide]assume cs:code,ds:data
data segment
dw 123,12666,1,8,3,38
db 80 dup (0)
db 0 ;ds:[96] ;字符总数计数
db 0 ;ds:[98] ;除数变量 保存 值10
db 0 ;ds:[100] ;用于记录录入数据的个数
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
call display_dig ?调用显示主函数
mov ax,4c00h
int 21h
display_dig:
call get_dig_count ;取得字数?
mov cx,ds:[100]
mov di,16
mov bp,8
mov word ptr ds:[96],0 ;记 数
covent:push cx
mov ax,ds:[bx]
mov cx,5
r_01:mov dx,10
push dx
pop ds:[98] ;除数
mov dx,0
div word ptr ds:[98]
; mov word ptr ds:[38],0
push cx ;保存内层循环计数 下面cx有别的用途
mov cl,dl
jcxz null ;检测某位的余数是否为零
add dl,30h
mov byte ptr ds:[bp+di],dl
jmp put_color
null: mov byte ptr ds:[bp+di],0
put_color: mov byte ptr ds:[bp+di+1],75h ;颜色值,如果某位中数值为零依然进行此操作
pop cx
add di,2 ;内存地址递增参数
sub bp,4 ;每前进(由左至右)2字节后退4字节保存高位字符
add word ptr ds:[96],1 ;每进行一位数操作,计数器+1
loop r_01
add di,6 ;空字符
sub bp,4 ;空字符
add bx,2
add bp,20
pop cx
loop covent
mov cx,ds:[96] ;所有待显示字符计数
add cx,6 ;此处空字符需要各加两次运算
mov ax,0b850h
mov si,10h
mov di,02h
mov es,ax
dp: mov ax,ds:[si]
mov es:[di],ax ;显示
add si,2
add di,2
loop dp
ret
get_dig_count:
mov bx,0
mov word ptr ds:[100],0
get_data: mov cx,ds:[bx]
jcxz is_0
add word ptr ds:[100],1
add bx,2
jmp get_data
is_0: mov bx,0
ret
code ends
end start
[/hide]