等雨 发表于 2011-9-13 12:30:08

大家帮忙看看哪里错了

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

         ASSUME    CS:D

         ASEGMENT
            DB      1H,2H,3H,4H
         AENDS
         BSEGMENT
            DB      1H,2H,3H, 4H
         BENDS
         CSEGMENT
            DB      0,0,0,0
         CENDS
         DSEGMENT
      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:
            MOV       CX,ES:
            ADD       AX,CX
            MOV       SS:,AX
            ADD       BX,2H
            LOOP      S

            MOV       AX,4C00H
            INT       21H
         DENDS
            END       START
直接运行出现这个http://bbs.fishc.com/data/attachment/album/201109/13/122525tji8soiuojo8jsxc.jpg


用debug运行时一直在循环loop

小生我怕怕 发表于 2011-9-13 13:01:02

{:5_109:} 那么长,我没看代码,但那个提示,一般是你访问到了不改访问的地址了,被河蟹了!呵呵

等雨 发表于 2011-9-13 13:21:16

这是实验5.5的题

ytrfamli 发表于 2011-9-13 15:03:59

本帖最后由 ytrfamli 于 2011-9-13 17:04 编辑

...
S:
...
MOV       CX,ES:
ADD       AX,CX
...
LOOP S
Loop指令每次执行都需要检查CX的值,但是每一次都在
如上的指令被覆写,所以会卡死在Loop中.

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

*:唉,想答Add打错成了Mov,修正了一下.

Holy 发表于 2011-9-13 16:16:27

ytrfamli 发表于 2011-9-13 15:03 static/image/common/back.gif
Loop指令每次执行都需要检查CX的值,但是每一次都在
如上的指令被覆写,所以会卡死在Loop中.



++

还有楼主段内分配空间用的DB,引用时CX=4,BX步进为2,会引起地址的错误吧!
严重的是SS:已经可以访问到程序段了

等雨 发表于 2011-9-13 16:39:38

谢谢3楼的朋友

ytrfamli 发表于 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段相对应的位置里,程序要是复杂一些可能运行时就会出错的.

等雨 发表于 2011-9-14 10:20:02

谢谢各位鱼友,我明白了,我在循环里面改变的cx的值,低级错误啊
页: [1]
查看完整版本: 大家帮忙看看哪里错了