| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 793 人关注过本帖
标题:loop循环中ip的地址忽然变了 .. 请大神们帮忙看一下
只看楼主 加入收藏
w8a5n1g116
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-4-11
收藏
 问题点数:0 回复次数:5 
loop循环中ip的地址忽然变了 .. 请大神们帮忙看一下
这个程序 不能运行结束  loop循环的中途 ip的地址忽然变了  然后程序就变成无限循环了   但是我不知道为什么loop循环中ip的地址忽然变了   因为开始的几次循环ip的地址都很正常   请哪位大神给我看看 为什么   

assume cs:codesg,ss:stack,es:table,ds:data

   data segment
    db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,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,11542,14430,15257,17800
   data ends
  
   table segment
   
   
   db 21 dup ('year summ ne ?? ')

    table ends
   
    stack segment
    dw 8 dup (0)
    stack ends
   
    codesg segment
start: mov ax,data
       mov ds,ax
       mov ax,table
       mov es,ax
       mov ax,stack
       mov ss,ax
       mov sp,16
       mov bx,0
       mov si,0
       mov di,0
       mov cx,21
 s0:   push cx
         
       mov cx,2
  s:   mov ax,[bx+si]
       mov es:[di],ax
       add si,2
       add di,2

       loop s
      
       add di,1
       mov ax,[bx+84]
       mov es:[di],ax
       mov ax,[bx+86]
       mov es:[di+2],ax
       mov ax,[bx+84]
       mov dx,[bx+86]
       push ax
       push dx

       add di,5
       mov ax,[bx+168]
       mov es:[di],ax
       mov cx,[bx+168]
      
       add di,3
       pop dx
       pop ax
      
       div cx
       mov es:[di],ax
       add di,3
       add bx,4
       mov si,0
       pop cx

       loop s0
      
      
    mov ax,4c00h
    int 21h
   
    codesg ends

end start
2012-01-18 22:54
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
无限循环?检查cx
ip地址变了?哪句造成的debug单步就知道了

技术问题,请不要以短消息方式提问
2012-01-23 00:11
lingji521
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-1-26
收藏
得分:0 
我发现我读代码比写代码还困难,不知道多久能赶上楼上
2012-01-26 00:48
汇编疯狂者
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-2-15
收藏
得分:0 
这不是王爽那本书的习题吗。。
2012-02-16 13:48
笨蛋侦探
Rank: 1
等 级:新手上路
帖 子:3
专家分:7
注 册:2012-3-1
收藏
得分:0 
我运行都没有死循环呀,只有当CX=Ah 时出现了divide overflow除法溢出

出现除法溢出是因为 div cx 时 ax>cx. 当被除数的低位比cx大时就会出现除法溢出,这个书后面会讲。
我能想到的解决办法只能是不用cx 做除数,然后做除法的时候把 cx 设得大一点(只要保证ax<cx即可 ,或者你就设cx=ax+1).  
我没有用书上的数据,下面的数据时随机搞的。   
下面是我的代码:

assume cs:code,ds:data
data segment
    db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984','1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
    dd 13328h,18293h,2252h,20515h,7737h,13587h,25830h,20794h,19979h,12959h,21116h,11788h,15894h,26936h,19390h,22363h,15911h,17226h,17402h,7054h,10777h
    dw 3553h,6269h,2464h,9716h,1314h,2387h,1213h,5420h,2399h,4726h,910h,4827h,3381h,1753h,553h,6275h,1345h,615h,2650h,4624h,2015h
data ends
table segment
    db 21 dup ('year summ ne ?? ')  ;刚好一一对应,16个字节
table ends
code segment
start:
    mov ax,data
    mov ds,ax
    mov ax,table
    mov es,ax
    mov ax,208
    mov sp,ax        ;先设设sp。这个貌似随便。
    mov bx,0
    mov si,0
    mov di,0
    mov cx,21
p1:    mov ax,[si]        ;年
    mov es:[bx],ax
    mov ax,[si+2]
    mov es:[bx+2],ax
    mov byte ptr es:[bx+4],' '
   
    mov ax,[84+si]    ;收入       刚开始我21*4-1=83,以为是从0开始算就减 1,其实是我弄混了,说不清楚。84是收入的开头,83是年的结尾。
    mov es:[bx+5],ax
    mov ax,[86+si]
    mov es:7[bx],ax      
    mov byte ptr es:[bx+9],' '
   
    mov ax,[168+di]
    mov es:[bx+10],ax
    mov byte ptr es:[bx+12],' '
   
    push cx        ;因为下面要算除法(薪水),所以借一下cx
    mov ax,[84+si]
    mov dx,[86+si]
    mov cx,[168+di]
    div cx
    mov es:[bx+13],cx   
   
    add di,2    ;注意一下这里的增量
    add si,4
    add bx,10h
    pop cx
    loop p1
   
    mov ax,4c00h
    int 21h
code ends
end start  
2012-03-01 12:02
笨蛋侦探
Rank: 1
等 级:新手上路
帖 子:3
专家分:7
注 册:2012-3-1
收藏
得分:0 
回复 5楼 笨蛋侦探
给自己改错一下,除法溢出的原因是  ⑴除数为0,⑵商太大,寄存器不能表达。            我简单地理解成cx<被除数是不对的!   
2012-03-01 22:38
快速回复:loop循环中ip的地址忽然变了 .. 请大神们帮忙看一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069070 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved