yefengya 发表于 2014-4-24 14:31:13

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

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


疑问2:

nsonline 发表于 2014-4-24 15:23:54

第一个,你应该查看的地址是076A,就是AX的,才是你stack的数据,复习下stack的知识吧。
第二个,数据是对的,可能那条指令被编译器优化掉了吧。

yefengya 发表于 2014-4-25 18:44:22

那个实验的源代码有assume了2个段:data segment 和stack segment段
图1中push指令执行之前,各寄存器中的值为:
DS=076ASS=076B
由上可知即数据段从076A开始,堆栈段从076B开始,内存数据异常的是堆栈段,
不知道您要我看076A(数据段中)的内存数据,是何原因?麻烦你明示一些,谢谢!

yefengya 发表于 2014-4-25 18:44:57

nsonline 发表于 2014-4-24 15:23 static/image/common/back.gif
第一个,你应该查看的地址是076A,就是AX的,才是你stack的数据,复习下stack的知识吧。
第二个,数据是对 ...

那个实验的源代码有assume了2个段:data segment 和stack segment段
图1中push指令执行之前,各寄存器中的值为:
DS=076ASS=076B
由上可知即数据段从076A开始,堆栈段从076B开始,内存数据异常的是堆栈段,
不知道您要我看076A(数据段中)的内存数据,是何原因?麻烦你明示一些,谢谢!

nsonline 发表于 2014-4-25 20:32:08

本帖最后由 nsonline 于 2014-4-25 20:50 编辑

yefengya 发表于 2014-4-25 18:44 static/image/common/back.gif
那个实验的源代码有assume了2个段:data segment 和stack segment段
图1中push指令执行之前,各寄存器中的 ...
sorry,是我看错了。
确实数据不太对。
不过你指向的地方也不对~~dw是一个字,等于2个字节,你指向的内存数据的地方应该是你栈里的第四个数字。
byte是8位,word是16位的。

为之疯狂 发表于 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了

wei3620320 发表于 2014-4-27 04:30:11

问题一:初始化的栈为16字节, 应该是16个0,从 076B:0 - 076B:F ,其中部分内容debug单步中断使用的。
问题二:因为中断随时可能发生,而中断会使用栈,所以当设置栈段时,后面一条指令会紧接执行的,以保证栈的正确设置
页: [1]
查看完整版本: <零基础入门学习汇编语言>第6章,实验5中碰到的2个疑问?