haiouda 发表于 2014-8-15 10:01:03

一个人在战斗 发表于 2014-8-15 09:50
你现在是大学生吗?以前接触过什么语言?

我没有上过大学,以前曾经,捧着C、VC看过,但自己看随着疑问的增多,也就看不下去了;
偶也会在适当的时候,加入进来,不为别的支持原创!


在这里向小甲鱼致敬,以一已之力传道授业,相信若干年后,会有一批程序员记得鱼C

一个人在战斗 发表于 2014-8-15 10:15:53

haiouda 发表于 2014-8-15 10:01
我没有上过大学,以前曾经,捧着C、VC看过,但自己看随着疑问的增多,也就看不下去了;
偶也会在适当的 ...

恩,一起努力。。。:handshake

haiouda 发表于 2014-8-15 11:11:41

程序从1436:0开始是SS地址,运行前SS:0 F是空的,

运行完143B:008后,观看SS里就有东西了,这是什么呀?栈我还没往里存东西呢???里面的东西哪来的?




haiouda 发表于 2014-8-15 11:21:24

从143B:008开始到143B:001F,
,SS里面数据一直在变,而这其间,我只对ss(ZAI)操作过一次,即143B:0013

为什么栈里的数据一直在变化呀? 哪位能说说

haiouda 发表于 2014-8-15 11:33:20

观察栈里内容的变化,好象与AL有关,而AX的地址又指向栈里,这样AX与SS地址重合,这样或许可以解释上面的疑问,请问是这个样子的么?
那么,即然AX与栈地址重合,这个只是一进一出,还好,要是栈装满了,AX再用栈城的地址,企不天下大乱了???

haiouda 发表于 2014-8-15 11:52:39

143B:001AMOV AL, 这条应该是罪魁祸首,我是这么认为的,它直接把AX的低位改变了,让它直接指一栈里,然后下边的AL,就顺理成章地改写了栈里的数据;

请问我上面说的对么?

haiouda 发表于 2014-8-15 12:08:39

1436:5 D 中的内容,从哪来的,还是没搞懂,求指点{:1_1:}

一个人在战斗 发表于 2014-8-15 15:16:50

haiouda 发表于 2014-8-15 09:43
有些想通了
这是书上的定义,而我把定义改了,所以错了



我也看课本了,书上确实是这么写的,我也很纳闷为啥会这样呢。。。

小靚同学Leon 发表于 2014-8-15 15:17:52

0. 指令MOV AL,本身是没错的,我在debug里尝试这样写,是写的进去的,如图。
改为MOV AX,就可以成功执行,难以理解。
1. 这段代码可以不用定义栈段的,根本就没有使用到栈段数据。
2. 栈段的数据在变化个人感觉是内存其他数据压栈造成的,但是无关紧要,不影响程序设计。
3. 建议帖代码的使用代码编辑框,如图。
4 .这个问题确实挺值得琢磨的,帖子已经移到技术交流区了,看看有没有兴奋的答案:ton:

haiouda 发表于 2014-8-15 16:27:00

143b:001a mov al,

上面的意思是,把里的数据即“64”移到AL ,移完AX=1464;
这时观察员1436:0 F ,发现第五个字节(1436:04),变成了64,
现在问,AL,在内存的位置是在哪里???
这里D 1464:0 F,这里面全是空的!

haiouda 发表于 2014-8-15 16:33:12

小靚同学Leon 发表于 2014-8-15 15:17
0. 指令MOV AL,本身是没错的,我在debug里尝试这样写,是写的进去的,如图。
改为MOV AX,就可以成功执行, ...

1436:0 f 这个就是我们定义的栈,在上面没有对栈进行操的,它的内容却变了(AL中的内容写进了栈里)

haiouda 发表于 2014-8-15 17:26:02

综上所述:

1、在 143B:003 MOV SS,AX,之前 1436:0 f之间的栈是空的。

2、在143B:003 MOV SS,AX运行之后,1436:0的第四个字即(1436:06)是:36 14,这个是栈的地址(也是AX段的地址)

3、在143B:0013 PUSH CX,之后,把0004入栈,“37 14”被前移(向低位)二位,而且在栈里面内容0004与37 14 之间的字节内容有了变化??这是怎么回事?是按什么规律变化的???

4、143B:001 MOV AL,后,栈第三个字(1436:04)变成了64 14,由此推断,AL的地址与栈的地址相重叠,AL的地址就是:1436:04,
AH就是,1436:05;AX=1464,这个段地址,怎么写进栈里了???

5、在BEBUG,用命令查 D 1464:0 1却是空的,各人认为,AL和AH应该写在内存1464:0 开始的内存里,怎么写到栈里去了????

黑暗漩涡 发表于 2014-8-16 11:16:13

回帖是一种美德
页: 1 [2]
查看完整版本: 错在哪里了,找不到,不知道怎么回事拉,求助!