鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: haiouda

[技术交流] 错在哪里了,找不到,不知道怎么回事拉,求助!

[复制链接]
 楼主| 发表于 2014-8-15 10:01:03 | 显示全部楼层
一个人在战斗 发表于 2014-8-15 09:50
你现在是大学生吗?以前接触过什么语言?

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


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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

恩,一起努力。。。:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-15 11:11:41 | 显示全部楼层
程序从1436:0开始是SS地址,运行前SS:0 F是空的,

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




程序在内存中的位置

程序在内存中的位置

运行前

运行前
mov ax,1437.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-15 11:21:24 | 显示全部楼层
从143B:008开始到143B:001F,
,SS里面数据一直在变,而这其间,我只对ss(ZAI)操作过一次,即143B:0013

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

变化.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-15 11:33:20 | 显示全部楼层
观察栈里内容的变化,好象与AL有关,而AX的地址又指向栈里,这样AX与SS地址重合,这样或许可以解释上面的疑问,请问是这个样子的么?
那么,即然AX与栈地址重合,这个只是一进一出,还好,要是栈装满了,AX再用栈城的地址,企不天下大乱了???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-15 11:52:39 | 显示全部楼层
143B:001A  MOV AL,[BX+SI+3] 这条应该是罪魁祸首,我是这么认为的,它直接把AX的低位改变了,让它直接指一栈里,然后下边的AL,就顺理成章地改写了栈里的数据;

请问我上面说的对么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-15 12:08:39 | 显示全部楼层
1436:5 D 中的内容,从哪来的,还是没搞懂,求指点{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-15 15:16:50 | 显示全部楼层
haiouda 发表于 2014-8-15 09:43
有些想通了
这是书上的定义,而我把定义改了,所以错了

我也看课本了,书上确实是这么写的,我也很纳闷为啥会这样呢。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-15 15:17:52 | 显示全部楼层
0. 指令MOV AL,[BX+3+SI]本身是没错的,我在debug里尝试这样写,是写的进去的,如图。
改为MOV AX,[BX+3+SI]就可以成功执行,难以理解。
1. 这段代码可以不用定义栈段的,根本就没有使用到栈段数据。
2. 栈段的数据在变化个人感觉是内存其他数据压栈造成的,但是无关紧要,不影响程序设计。
3. 建议帖代码的使用代码编辑框,如图。
4 .这个问题确实挺值得琢磨的,帖子已经移到技术交流区了,看看有没有兴奋的答案:ton:
QQ截图20140815150104.png
代码编辑框.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-15 16:27:00 | 显示全部楼层
143b:001a mov al,[bx+si+3]

上面的意思是,把[BX+SI+3]里的数据即“64”移到AL ,移完AX=1464;
这时观察员1436:0 F ,发现第五个字节(1436:04),变成了64,
现在问,AL,在内存的位置是在哪里???
这里D 1464:0 F,这里面全是空的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

1436:0 f 这个就是我们定义的栈,在上面没有对栈进行操的,它的内容却变了(AL中的内容写进了栈里)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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,[BX+SI+3]后,栈第三个字(1436:04)变成了64 14,由此推断,AL的地址与栈的地址相重叠,AL的地址就是:1436:04,
AH就是,1436:05;AX=1464,这个段地址,怎么写进栈里了???

5、在BEBUG,用命令查 D 1464:0 1却是空的,各人认为,AL和AH应该写在内存1464:0 开始的内存里,怎么写到栈里去了????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-16 11:16:13 From FishC Mobile | 显示全部楼层
回帖是一种美德
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-18 10:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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