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

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

热度:957   发布时间:2016-05-02 05:04:58.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初始值是多少?
看你在做除法前,相关寄存器的数值也没有赋值好呢。
不过,最好是做个防止除法溢出的子程序。
  相关解决方案