程序的意图是把12666按十进制显示在屏幕的第8行第三列 行是dh列是dl cl是颜色
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
mov ax,4c00h
int 21h
dtoc:push si
push ax
s1:pop ax
mov bx,10
div bx ------这里第二次循环div后ax的值就从04f2/a,ax就变成9a18了
mov cx,dx ax我也进站保护了啊,这里ax的值怎么就不对了呢
push ax
jcxz s2
add cx,30h
mov ds:[si],cx
inc si
jmp s1
s2:pop ax
pop si
ret
show_str:mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
mov di,ax
mov bl,cl
s3:mov cl,ds:[si]
mov ch,0
jcxz s4
mov es:[bx+di],cl
mov es:[bx+di+1],bl
inc si
add di,2
jmp s3
s4:ret
code ends
end start
------解决方案--------------------------------------------------------
div bx是16位除法,被除数是dx::ax寄存器对,32位,你没管dx,所以得不到想要的结果。如果你只想用ax/bx,应在div前面把dx清0。