鱼C论坛

 找回密码
 立即注册
查看: 2260|回复: 7

[已解决]运行到div程序就退出,而且是正常退出,求助

[复制链接]
发表于 2019-8-18 20:21:11 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 396449673 于 2019-8-18 20:24 编辑

这是小甲鱼视频中间那个公司的工程,运行到div那一行程序就-----------正常地退出。。。。这是为什么


                               
登录/注册后可看大图


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 cx,21
        s:
        mov di,0
        mov ax,[si]
        mov word ptr es:[bx+di],ax
        mov ax,2h[si]
        mov word ptr es:2h[bx+di],ax
        add di,5
        
        mov ax,54h[si]
        mov word ptr es:[bx+di],ax
        mov ax,56h[si]
        mov word ptr es:2h[bx+di],ax
        
        add di,2
        
        mov ax,[bx+0A7h]
        mov word ptr es:[bx+di],ax
        add di,2
        mov ax,54h[bx]
        mov dx,56[bx]
        div word ptr ds:[bx+0A7h]
        mov es:[bx+di],ax
        add si,4
        add bx,16
        
        loop s
        
        mov ax,4c00h
        int 21h
        codesg ends
        end start
最佳答案
2019-8-18 21:26:11
本帖最后由 jackz007 于 2019-8-18 21:49 编辑

        试试我修改的代码吧

  1. data segment para public 'DATA'
  2.         db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  3.         db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  4.         db '1993','1994','1995'
  5.         
  6.         dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  7.         dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  8.         
  9.         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  10.         dw 11542,14430,15257,17800
  11. data ends

  12. table segment
  13.         db 21 dup('year summ ne ?? ')
  14. table ends

  15. stack segment stack
  16.         dw 800h dup(00)
  17. stack ends

  18. code segment
  19.         assume cs:code,ds:data,es:table
  20. main proc far
  21.         mov ax,data
  22.         mov ds,ax
  23.         mov ax,table
  24.         mov es,ax
  25.         xor bx,bx
  26.         xor si,si
  27.         mov cx,21
  28.         cld
  29.     m1: push cx
  30.         mov di,bx
  31.         mov cx,4
  32.         rep movsb
  33.         add bx,16
  34.         pop cx
  35.         loop m1
  36.         mov bx,5
  37.         mov cx,21
  38.     m2: mov di,bx
  39.         movsw
  40.         movsw
  41.         add bx,16
  42.         loop m2
  43.         mov bx,10
  44.         mov cx,21
  45.     m3: mov di,bx
  46.         movsw
  47.         add bx,16
  48.         loop m3
  49.         mov bx,5
  50.         mov cx,21
  51.     m4: mov ax,word ptr es:[bx]
  52.         mov dx,word ptr es:[bx+2]
  53.         div word ptr es:[bx+5]
  54.         mov word ptr es:[bx+8],ax
  55.         add bx,16
  56.         loop m4

  57.         mov ax,4c00h
  58.         int 21h
  59. main endp
  60. code ends
  61. end main
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-18 20:44:54 | 显示全部楼层
本帖最后由 396449673 于 2019-8-18 20:47 编辑

那个56少写了一个h,加上之后前3个循环对了,第四个循环就又正常退出了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 20:47:45 | 显示全部楼层
本帖最后由 jackz007 于 2019-8-18 20:55 编辑

       通过楼主贴出的图片可以看到相关的存储器和存储单元:DX = 3931,AX = 0010,WORD PTR DS:[00A7] = 0300
       就是说,执行的除法是
       39310010H div 300H = 131055H
       显然,这个商太大,已经远远超出了一个 16 位寄存器(AX)所能储存的数值范围,所以才会溢出。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 21:26:11 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-8-18 21:49 编辑

        试试我修改的代码吧

  1. data segment para public 'DATA'
  2.         db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  3.         db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  4.         db '1993','1994','1995'
  5.         
  6.         dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  7.         dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  8.         
  9.         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  10.         dw 11542,14430,15257,17800
  11. data ends

  12. table segment
  13.         db 21 dup('year summ ne ?? ')
  14. table ends

  15. stack segment stack
  16.         dw 800h dup(00)
  17. stack ends

  18. code segment
  19.         assume cs:code,ds:data,es:table
  20. main proc far
  21.         mov ax,data
  22.         mov ds,ax
  23.         mov ax,table
  24.         mov es,ax
  25.         xor bx,bx
  26.         xor si,si
  27.         mov cx,21
  28.         cld
  29.     m1: push cx
  30.         mov di,bx
  31.         mov cx,4
  32.         rep movsb
  33.         add bx,16
  34.         pop cx
  35.         loop m1
  36.         mov bx,5
  37.         mov cx,21
  38.     m2: mov di,bx
  39.         movsw
  40.         movsw
  41.         add bx,16
  42.         loop m2
  43.         mov bx,10
  44.         mov cx,21
  45.     m3: mov di,bx
  46.         movsw
  47.         add bx,16
  48.         loop m3
  49.         mov bx,5
  50.         mov cx,21
  51.     m4: mov ax,word ptr es:[bx]
  52.         mov dx,word ptr es:[bx+2]
  53.         div word ptr es:[bx+5]
  54.         mov word ptr es:[bx+8],ax
  55.         add bx,16
  56.         loop m4

  57.         mov ax,4c00h
  58.         int 21h
  59. main endp
  60. code ends
  61. end main
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-8-18 22:20:42 | 显示全部楼层
jackz007 发表于 2019-8-18 21:26
试试我修改的代码吧

你的可以,movsw我还没学到很6,了解一下思路,然后现在我去看看我的是不是写错位置了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 22:53:01 | 显示全部楼层
已经找到问题,将si和bx用混了,还有将0A8H写成了0A7H


  1. assume cs:codesg
  2. data segment
  3.         db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  4.         db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  5.         db '1993','1994','1995'
  6.        
  7.         dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  8.         dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  9.        
  10.         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  11.         dw 11542,14430,15257,17800
  12.        
  13. data ends

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

  17. codesg segment

  18. start:
  19.         mov ax,data
  20.         mov ds,ax
  21.         mov ax,table
  22.         mov es,ax
  23.         mov bx,0
  24.         mov si,0
  25.         mov cx,21
  26.         s:
  27.         mov di,0
  28.         mov ax,[si]
  29.         mov word ptr es:[bx+di],ax
  30.         mov ax,2h[si]
  31.         mov word ptr es:2h[bx+di],ax
  32.         add di,5
  33.        
  34.         mov ax,54h[si]
  35.         mov word ptr es:[bx+di],ax
  36.         mov ax,56h[si]
  37.         mov word ptr es:2h[bx+di],ax
  38.        
  39.         add di,2
  40.        
  41.         mov ax,[bx+0A8h]
  42.         mov word ptr es:[bx+di],ax
  43.         add di,2
  44.         mov ax,54h[si]
  45.         mov dx,56h[si]
  46.         div word ptr ds:[si+0A8h]
  47.         mov es:[bx+di],ax
  48.         add si,4
  49.         add bx,16
  50.        
  51.         loop s
  52.        
  53.         mov ax,4c00h
  54.         int 21h
  55.         codesg ends
  56.         end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 23:26:52 | 显示全部楼层
问题没有完全解决,现在的数据还是不准确的,明早在排查
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-19 09:03:01 | 显示全部楼层
这是昨晚修改的代码,已完全正确
  1. assume cs:codesg
  2. data segment
  3.         db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
  4.         db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
  5.         db '1993','1994','1995'
  6.        
  7.         dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
  8.         dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  9.        
  10.         dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
  11.         dw 11542,14430,15257,17800
  12.        
  13. data ends

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

  17. codesg segment

  18. start:
  19.         mov ax,data
  20.         mov ds,ax
  21.         mov ax,table
  22.         mov es,ax
  23.         mov bx,0
  24.         mov si,0
  25.         mov cx,21
  26.         s:
  27.         mov di,0
  28.         mov ax,[si]
  29.         mov word ptr es:[bx+di],ax
  30.         mov ax,2h[si]
  31.         mov word ptr es:2h[bx+di],ax
  32.         add di,5
  33.        
  34.         mov ax,54h[si]
  35.         mov word ptr es:[bx+di],ax
  36.         mov ax,56h[si]
  37.         mov word ptr es:2h[bx+di],ax
  38.        
  39.         add di,5
  40.        
  41.         mov dx,0
  42.         mov ax,si
  43.         mov ds:[0FFFEh],ax
  44.         mov ds:[0FFFCh],2
  45.         div word ptr ds:[0FFFCh]
  46.        
  47.         mov si,ax
  48.         mov ax,[si+0A8h]
  49.        
  50.         mov word ptr es:[bx+di],ax
  51.         mov ax,ds:[0FFFEh]
  52.         mov si,ax
  53.         add di,3
  54.         mov ax,54h[si]
  55.         mov dx,56h[si]
  56.         div word ptr es:[bx+0Ah]
  57.         mov es:[bx+di],ax
  58.         add si,4
  59.         add bx,16
  60.        
  61.         loop s
  62.        
  63.         mov ax,4c00h
  64.         int 21h
  65.         codesg ends
  66.         end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-11 03:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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