当前位置: 代码迷 >> 汇编语言 >> 这里div执行后ax的值为什么不是计划中的值。该怎么处理
  详细解决方案

这里div执行后ax的值为什么不是计划中的值。该怎么处理

热度:5501   发布时间:2013-02-26 00:00:00.0
这里div执行后ax的值为什么不是计划中的值。。
程序的意图是把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。
  相关解决方案