鱼C论坛

 找回密码
 立即注册
查看: 2900|回复: 6

[汇编作业] <零基础入门学习汇编语言>第6章,实验5中碰到的2个疑问?

[复制链接]
发表于 2014-4-24 14:31:13 | 显示全部楼层 |阅读模式

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

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

x
问题如下图所示:请大侠们指教这是怎么回事咯?
疑问1:
A2.jpg

疑问2:
A1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-24 15:23:54 | 显示全部楼层
第一个,你应该查看的地址是076A,就是AX的,才是你stack的数据,复习下stack的知识吧。
第二个,数据是对的,可能那条指令被编译器优化掉了吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-25 18:44:22 | 显示全部楼层
那个实验的源代码有assume了2个段:data segment 和stack segment段
图1中push指令执行之前,各寄存器中的值为:
DS=076A  SS=076B
由上可知即数据段从076A开始,堆栈段从076B开始,内存数据异常的是堆栈段,
不知道您要我看076A(数据段中)的内存数据,是何原因?麻烦你明示一些,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-25 18:44:57 | 显示全部楼层

那个实验的源代码有assume了2个段:data segment 和stack segment段
图1中push指令执行之前,各寄存器中的值为:
DS=076A  SS=076B
由上可知即数据段从076A开始,堆栈段从076B开始,内存数据异常的是堆栈段,
不知道您要我看076A(数据段中)的内存数据,是何原因?麻烦你明示一些,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-25 20:32:08 | 显示全部楼层
本帖最后由 nsonline 于 2014-4-25 20:50 编辑
yefengya 发表于 2014-4-25 18:44
那个实验的源代码有assume了2个段:data segment 和stack segment段
图1中push指令执行之前,各寄存器中的 ...

sorry,是我看错了。
确实数据不太对。
不过你指向的地方也不对~~dw是一个字,等于2个字节,你指向的内存数据的地方应该是你栈里的第四个数字。
byte是8位,word是16位的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-27 01:53:34 | 显示全部楼层
1.第一个问题呢,确实与楼上所说,dw是定义字型数据,应该是占用2个字节,也就是4个十六位进制的0,你查看SS:0的数据的时候,第一行应该全部是0,还有就是你的截图为什么不是你自己写的代码呢,能把你的代放出来吗,这样我们也可以自己测试一下,万一是的代码写错了呢。
2.第二个截图,你执行 mov ss,ax 之后仔细观察一下sp 的内存是否被改变了呢,你mov sp,16 ,16也就相当于16进制的10H,而你看不到执行的这条指令就因为这是debug的一种设计,就好像push的时候,为什么看不到sp-2呢,但是sp确实-2了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-27 04:30:11 | 显示全部楼层
问题一:初始化的栈为16字节, 应该是16个0,从 076B:0 - 076B:F ,其中部分内容debug单步中断使用的。
问题二:因为中断随时可能发生,而中断会使用栈,所以当设置栈段时,后面一条指令会紧接执行的,以保证栈的正确设置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-30 22:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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