MIX 发表于 2018-1-25 23:26:57

为什么会相除溢出???

为什么用debug跟踪一用—g或者—p就出现divide overflow??????

cnkizy 发表于 2018-1-26 11:14:30

放下代码不要放图片呀呀呀{:10_245:}

兰陵月 发表于 2018-1-26 11:14:35

发代码,不要发图片。

cnkizy 发表于 2018-1-26 11:18:42

本帖最后由 cnkizy 于 2018-1-26 11:26 编辑

图片看着头疼,你把代码贴出来我给你分析下。
首先我猜下 你的 div word ptr 这里 这两个字节单元的数据没对。是不是bp取错了。
你把代码放上来 我给你调试{:10_266:}

cnkizy 发表于 2018-1-26 13:50:27

本帖最后由 cnkizy 于 2018-1-26 14:10 编辑

代码有问题

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

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

code segment
start:
                mov ax, data
                mov ds, ax
                mov ax, table
                mov ss, ax
                mov bx, 0
                mov bp, 0
                mov si, 0
                mov di, 84
                mov ss:,di
                mov cx, 21
       
        s:        mov ss:, cx
                mov cx, 4
       
        s0:        mov sp,
                mov , sp
                inc bp
                inc si
                loop s0                ;你这个地方loop s0
                mov sp, ' '
                mov , sp
                mov sp,
                mov , sp
                add di, 2
                mov sp,
                mov , sp
                add di, 2
                mov ss:,di
                mov sp, ' '
                mov , sp
                mov di, ss:
                mov sp,
                mov di,ss:
                mov sp, ' '
                mov,sp
                mov ax,
                mov dx,
                div word ptr
                mov,ax
                mov SP, ' '
                mov,sp
                add bp,0ch
                mov cx,ss:
                loop s0                        ;你这个地方应该loop s
               
                mov ax,4c00h
                int 21h


code ends
end start


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

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

双重循环参考

      mov cx,2
again1:
      push cx                ;这里用栈暂时存放cx次数
      mov cx,5
again2:
      nop ; 这里加上你的循环指令
      nop
      nop
      loop again2
      pop cx                ;这里就取出刚才存放的cx次数
      loop again1


MIX 发表于 2018-2-8 14:57:28

谢谢

MIX 发表于 2018-2-8 15:00:19

cnkizy 发表于 2018-1-26 13:50
代码有问题

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


谢谢了
页: [1]
查看完整版本: 为什么会相除溢出???