大家帮忙看看哪里错了
本帖最后由 等雨 于 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
{:5_109:} 那么长,我没看代码,但那个提示,一般是你访问到了不改访问的地址了,被河蟹了!呵呵 这是实验5.5的题 本帖最后由 ytrfamli 于 2011-9-13 17:04 编辑
...
S:
...
MOV CX,ES:
ADD AX,CX
...
LOOP S
Loop指令每次执行都需要检查CX的值,但是每一次都在
如上的指令被覆写,所以会卡死在Loop中.
Add指令可以将数据从内存搬到寄存器里,所以二合为一
ADD AX,ES:
这样就正常了.
*:唉,想答Add打错成了Mov,修正了一下.
ytrfamli 发表于 2011-9-13 15:03 static/image/common/back.gif
Loop指令每次执行都需要检查CX的值,但是每一次都在
如上的指令被覆写,所以会卡死在Loop中.
++
还有楼主段内分配空间用的DB,引用时CX=4,BX步进为2,会引起地址的错误吧!
严重的是SS:已经可以访问到程序段了
谢谢3楼的朋友 本帖最后由 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段相对应的位置里,程序要是复杂一些可能运行时就会出错的. 谢谢各位鱼友,我明白了,我在循环里面改变的cx的值,低级错误啊
页:
[1]