鱼C论坛

 找回密码
 立即注册
查看: 2532|回复: 6

[已解决]为什么会相除溢出???

[复制链接]
发表于 2018-1-25 23:26:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么用debug跟踪一用—g或者—p就出现divide overflow??????
最佳答案
2018-1-26 13:50:27
本帖最后由 cnkizy 于 2018-1-26 14:10 编辑

代码有问题

这是你的源代码  我给你敲下了
  1. assume cs:code,ds:data,ss:table
  2. data segment
  3. ;21个年份
  4.         db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  5.         db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  6.         db '1993','1994','1995'
  7. ;21个收入
  8.         dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  9.         dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  10. ;21个人数
  11.         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  12.         dw 11542,14430,45257,17800
  13. data ends
  14. table segment

  15.         db 21 dup ('year summ ne ?? ')
  16.        
  17. table ends

  18. code segment
  19. start:
  20.                 mov ax, data
  21.                 mov ds, ax
  22.                 mov ax, table
  23.                 mov ss, ax
  24.                 mov bx, 0
  25.                 mov bp, 0
  26.                 mov si, 0
  27.                 mov di, 84
  28.                 mov ss:[152h],di
  29.                 mov cx, 21
  30.        
  31.         s:        mov ss:[150h], cx
  32.                 mov cx, 4
  33.        
  34.         s0:        mov sp, [bx+si]
  35.                 mov [bp] , sp
  36.                 inc bp
  37.                 inc si
  38.                 loop s0                ;你这个地方loop s0
  39.                 mov sp, ' '
  40.                 mov [bp], sp
  41.                 mov sp, [bx+di]
  42.                 mov [bp+1], sp
  43.                 add di, 2
  44.                 mov sp, [bx+di]
  45.                 mov [bp+3], sp
  46.                 add di, 2
  47.                 mov ss:[154h],di
  48.                 mov sp, ' '
  49.                 mov [bp+5], sp
  50.                 mov di, ss:[152h]
  51.                 mov sp, [bx+di]
  52.                 mov di,ss:[154h]
  53.                 mov sp, ' '
  54.                 mov[bp+8],sp
  55.                 mov ax,[bp+1]
  56.                 mov dx,[bp+3]
  57.                 div word ptr[bp+6]
  58.                 mov[bp+9],ax
  59.                 mov SP, ' '
  60.                 mov[bp+0bh],sp
  61.                 add bp,0ch
  62.                 mov cx,ss:[150h]
  63.                 loop s0                        ;你这个地方应该loop s
  64.                
  65.                 mov ax,4c00h
  66.                 int 21h


  67. code ends
  68. end start
复制代码



你看看你loop s0 两次,第一次在43行 第二次在71行   。小伙要细心呀

还有就是给你几个建议。ss一般是用来放栈的,你这里最好用es来存放,双重循环那里可以用 push cx和pop cx来写。

双重循环参考

  1.       mov cx,2
  2. again1:
  3.       push cx                ;这里用栈暂时存放cx次数
  4.       mov cx,5
  5. again2:
  6.       nop ; 这里加上你的循环指令
  7.       nop
  8.       nop
  9.       loop again2
  10.       pop cx                ;这里就取出刚才存放的cx次数
  11.       loop again1
复制代码



捕获3.PNG
捕获2.PNG
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-26 11:14:30 | 显示全部楼层
放下代码不要放图片呀呀呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 11:14:35 | 显示全部楼层
发代码,不要发图片。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 11:18:42 | 显示全部楼层
本帖最后由 cnkizy 于 2018-1-26 11:26 编辑

图片看着头疼,你把代码贴出来  我给你分析下。
首先我猜下 你的 div word ptr [bp+6]这里 [bp+6]这两个字节单元的数据没对。是不是bp取错了。
你把代码放上来 我给你调试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-26 13:50:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 cnkizy 于 2018-1-26 14:10 编辑

代码有问题

这是你的源代码  我给你敲下了
  1. assume cs:code,ds:data,ss:table
  2. data segment
  3. ;21个年份
  4.         db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  5.         db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  6.         db '1993','1994','1995'
  7. ;21个收入
  8.         dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  9.         dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  10. ;21个人数
  11.         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  12.         dw 11542,14430,45257,17800
  13. data ends
  14. table segment

  15.         db 21 dup ('year summ ne ?? ')
  16.        
  17. table ends

  18. code segment
  19. start:
  20.                 mov ax, data
  21.                 mov ds, ax
  22.                 mov ax, table
  23.                 mov ss, ax
  24.                 mov bx, 0
  25.                 mov bp, 0
  26.                 mov si, 0
  27.                 mov di, 84
  28.                 mov ss:[152h],di
  29.                 mov cx, 21
  30.        
  31.         s:        mov ss:[150h], cx
  32.                 mov cx, 4
  33.        
  34.         s0:        mov sp, [bx+si]
  35.                 mov [bp] , sp
  36.                 inc bp
  37.                 inc si
  38.                 loop s0                ;你这个地方loop s0
  39.                 mov sp, ' '
  40.                 mov [bp], sp
  41.                 mov sp, [bx+di]
  42.                 mov [bp+1], sp
  43.                 add di, 2
  44.                 mov sp, [bx+di]
  45.                 mov [bp+3], sp
  46.                 add di, 2
  47.                 mov ss:[154h],di
  48.                 mov sp, ' '
  49.                 mov [bp+5], sp
  50.                 mov di, ss:[152h]
  51.                 mov sp, [bx+di]
  52.                 mov di,ss:[154h]
  53.                 mov sp, ' '
  54.                 mov[bp+8],sp
  55.                 mov ax,[bp+1]
  56.                 mov dx,[bp+3]
  57.                 div word ptr[bp+6]
  58.                 mov[bp+9],ax
  59.                 mov SP, ' '
  60.                 mov[bp+0bh],sp
  61.                 add bp,0ch
  62.                 mov cx,ss:[150h]
  63.                 loop s0                        ;你这个地方应该loop s
  64.                
  65.                 mov ax,4c00h
  66.                 int 21h


  67. code ends
  68. end start
复制代码



你看看你loop s0 两次,第一次在43行 第二次在71行   。小伙要细心呀

还有就是给你几个建议。ss一般是用来放栈的,你这里最好用es来存放,双重循环那里可以用 push cx和pop cx来写。

双重循环参考

  1.       mov cx,2
  2. again1:
  3.       push cx                ;这里用栈暂时存放cx次数
  4.       mov cx,5
  5. again2:
  6.       nop ; 这里加上你的循环指令
  7.       nop
  8.       nop
  9.       loop again2
  10.       pop cx                ;这里就取出刚才存放的cx次数
  11.       loop again1
复制代码



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-2-8 14:57:28 | 显示全部楼层
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-8 15:00:19 | 显示全部楼层
cnkizy 发表于 2018-1-26 13:50
代码有问题

这是你的源代码  我给你敲下了

谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 05:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表