当前位置: 代码迷 >> 汇编语言 >> 除法溢出,该怎么解决
  详细解决方案

除法溢出,该怎么解决

热度:208   发布时间:2016-05-02 04:30:26.0
除法溢出
assume cs:codesg


data segment

  db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  db '1993','1994','1995'

  dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

  dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  dw 11542,14430,15257,17800

data ends

table segment

  db 21 dup ('year summ ne ?? ')

table ends

codesg segment

start: mov ax,data
       mov ds,ax
       mov ax,table
       mov es,ax

       mov bx,0
       mov si,0
       mov di,168
       mov cx,21

     s:mov ax,[bx+2]
       mov es:[si+2],ax
       mov ax,[bx]
       mov es:[si],ax
       mov byte ptr es:[si+4],20h       

       mov ax,[bx+84]
       mov es:[si+5],ax
       mov ax,[bx+86]
       mov es:[si+7],ax
       mov byte ptr es:[si+9],20h 

       mov ax,[di]
       mov es:[si+10],ax
       mov byte ptr es:[si+12],20h 

       mov ax,[bx+84]
       mov dx,[bx+86]
       mov cx,[di]
       div  cx


       mov es:[si+13],ax
       
       mov byte ptr es:[si+0fh],20h

       add bx,4
       add di,2
       add si,16

       loop s
       mov ax,4c00h
       int 21h

codesg ends

end start
这段代码会出现除法溢出,把标红的部分(mov cx,[di];div  cx)改为       div word ptr [di]就不会有溢出,这是什么问题?
已经对dx进行了赋值,应该不存在未初始化的问题啊
请大神们帮帮忙
------解决思路----------------------
你这里使用了 cx 又没有进行保存恢复的保护,下面的 loop 的依据不就被毁了么?
  相关解决方案