鱼C论坛

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

大家帮忙看看哪里错了

 关闭 [复制链接]
发表于 2011-9-13 12:30:08 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 等雨 于 2011-9-15 10:35 编辑

           ASSUME    CS:D

           A  SEGMENT
              DB        1H,2H,3H,4H
           A  ENDS
           B  SEGMENT
              DB        1H,2H,3H, 4H
           B  ENDS
           C  SEGMENT
              DB        0,0,0,0
           C  ENDS
           D  SEGMENT
      START:  MOV       AX,A
              MOV       DS,AX
              MOV       AX,B

              MOV       ES,AX
              MOV       AX,C
              MOV       SS,AX
              MOV       BX,0H
              MOV       CX,4
          S:  MOV       AX,DS:[BX]
              MOV       CX,ES:[BX]
              ADD       AX,CX
              MOV       SS:[BX],AX
              ADD       BX,2H
              LOOP      S

              MOV       AX,4C00H
              INT       21H
           D  ENDS
              END       START
直接运行出现这个

                               
登录/注册后可看大图



用debug运行时一直在循环loop

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-13 13:01:02 | 显示全部楼层
那么长,我没看代码,但那个提示,一般是你访问到了不改访问的地址了,被河蟹了!呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-13 13:21:16 | 显示全部楼层
这是实验5.5的题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-13 15:03:59 | 显示全部楼层
本帖最后由 ytrfamli 于 2011-9-13 17:04 编辑
...
S:
...
MOV       CX,ES:[BX]
ADD       AX,CX
...
LOOP S
Loop指令每次执行都需要检查CX的值,但是每一次都在
如上的指令被覆写,所以会卡死在Loop中.

Add指令可以将数据从内存搬到寄存器里,所以二合为一
ADD      AX,ES:[BX]
这样就正常了.

*:唉,想答Add打错成了Mov,修正了一下.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-13 16:16:27 | 显示全部楼层
ytrfamli 发表于 2011-9-13 15:03
Loop指令每次执行都需要检查CX的值,但是每一次都在
如上的指令被覆写,所以会卡死在Loop中.

++

还有楼主段内分配空间用的DB,引用时CX=4,BX步进为2,会引起地址的错误吧!
严重的是SS:[BX]已经可以访问到程序段了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-13 16:39:38 | 显示全部楼层
谢谢3楼的朋友
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-13 17:14:21 | 显示全部楼层
本帖最后由 ytrfamli 于 2011-9-13 17:21 编辑

喔,Holy说的对,我只很快的debug一下,没有注意到.
以楼主的写法,MOV CX,2即可

如果是MOV CX,4,那麽因为每次bx都是增加2
除了A段:0000以及B段:0000开始的01 02 03 04 4个byte之外,
接在其後的另外4个byte(A段:0004~0007以及B段:0004~0007)
也会被加到C段相对应的位置里,程序要是复杂一些可能运行时就会出错的.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-14 10:20:02 | 显示全部楼层
谢谢各位鱼友,我明白了,我在循环里面改变的cx的值,低级错误啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 04:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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