当前位置: 代码迷 >> 汇编语言 >> 请问一上,为什么小弟我这段程序除法溢出了啊
  详细解决方案

请问一上,为什么小弟我这段程序除法溢出了啊

热度:2860   发布时间:2013-02-26 00:00:00.0
请教一下,为什么我这段程序除法溢出了啊?
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 ax,4c00h
  int 21h
  dtoc:push ax
  s1:mov di,0
  mov bx,10d
  div bx
  add dx,30h
  push dx
  mov cx,ax
  inc di
  jcxz s2
  jmp short s1
  mov cx,di
  s2:pop ax
  mov byte ptr ds:[si],al
  inc si
  loop s2
  ret
code ends
end start

--------------
D:\masm>debug tenthree.exe
-u
0C1D:0000 B87A31 MOV AX,317A
0C1D:0003 BB1C0C MOV BX,0C1C
0C1D:0006 8EDB MOV DS,BX
0C1D:0008 BE0000 MOV SI,0000
0C1D:000B E80500 CALL 0013
0C1D:000E B8004C MOV AX,4C00
0C1D:0011 CD21 INT 21
0C1D:0013 50 PUSH AX
0C1D:0014 BF0000 MOV DI,0000
0C1D:0017 BB0A00 MOV BX,000A
0C1D:001A F7F3 DIV BX
0C1D:001C 83C230 ADD DX,+30
0C1D:001F 52 PUSH DX
-r
AX=0000 BX=0000 CX=0040 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0C0C ES=0C0C SS=0C1C CS=0C1D IP=0000 NV UP EI PL NZ NA PO NC
0C1D:0000 B87A31 MOV AX,317A
-g000e

Divide overflow

Program terminated normally
---

------解决方案--------------------------------------------------------
在你这个除法中,你的DX初始值是多少?
看你在做除法前,相关寄存器的数值也没有赋值好呢。
不过,最好是做个防止除法溢出的子程序。
  相关解决方案