sentiment 发表于 2013-8-17 22:02:38

王爽老师的书 134页实验5 第一个




第一问中 我认为在栈中有16个字节 记作0~15 0~7应该全是0 后面才是0123h,0456h
所以data的数据应该前两个为0,后面不变
但是答案却说data没有变化

请问为什么呢

第三问 答案给的是x-2,x-1
请问为什么

小咒 发表于 2013-8-17 22:02:39

sentiment 发表于 2013-8-18 09:04 static/image/common/back.gif
那么第一问中 初始状态为栈中是8个0
将数据push进去后 再pop出来的还是0啊
就象这样


栈让你理解先入后出的概念
第三问中主要是让你理解DW的定义,随后加深段地址和偏移地址的概念
x-2,x-1数据段是在代码段的前面怎么能理解成偏移地址数值比较大呢?

小咒 发表于 2013-8-18 07:19:53

本帖最后由 小咒 于 2013-8-18 07:25 编辑

dw定义字形数据占2个字节
data段8个字,16个字节
stack段8个字,16个字节
内存形象如下:

我们查看段地址为1000偏移地址为0的内存地址
内存地址每一行为16个字节
我们将段地址+1后继续查看得到结果如上图

sentiment 发表于 2013-8-18 09:04:11

小咒 发表于 2013-8-18 07:19 static/image/common/back.gif
dw定义字形数据占2个字节
data段8个字,16个字节
stack段8个字,16个字节


那么第一问中 初始状态为栈中是8个0
将数据push进去后 再pop出来的还是0啊
就象这样
0

0

0

。。。


0123h

0456h






第三问中我如果认为段地址也是X 但是偏移地址数值比较大 这样理解可不可以呢

麻烦你了

tsembrace 发表于 2013-8-18 14:31:26

第一问,都不需要管其他,涉及到原始数据段的就以下四句:
push ds:
push ds:
pop ds:
pop ds:
push的两句不影响原始data段数据;
pop的两句用栈内数据复制到data段;但栈是先入后出,所以第一次pop的数据是最好一次push的数据,每次pop到ds:的值刚好是之前push ds:的数值,所以data段数值仍然没变化的。
第二问:
该程序加载后,设ds寄存器的值为Y,系统为整个程序分配内存分布如下:
Y:0~Y:0ffhPSP区--->对应起始偏移地址为0的段地址为Y
Y:100h~Y:10fhdata数据段区域--->对应起始偏移地址为0的段地址为(Y+10h)
Y:110h~Y:11fhstack栈段区域--->对应起始偏移地址为0的段地址为(Y+11h)
Y:120h~Y:(120h+(cx-1))代码段区域,加载后cx为代码段长度---->对应起始偏移地址为0的段地址为(Y+12h),即cs的值。
即若cs为X,则data和stack对应的段地址为X-2和X-1.

tsembrace 发表于 2013-8-18 14:39:12

sentiment 发表于 2013-8-18 09:04 static/image/common/back.gif
那么第一问中 初始状态为栈中是8个0
将数据push进去后 再pop出来的还是0啊
就象这样


直接回答你的“第三问中我如果认为段地址也是X 但是偏移地址数值比较大 这样理解可不可以呢”
不可以。
但反向问的话,你的理解我个人认为也是对的。
即:如果设data段为X,那么stack和code的段地址为多少?
这里有两个需要说明的地方:
首先对于一个内存段,段地址:偏移地址的表示不是唯一的。所以针对上述问题,stack和code的段地址也可以认为是X,只不过,当段地址为X时候,其对应的偏移地址不再是0了。
其次,data,stack,code作为段地址标识符,他们所表示的段地址是针对偏移地址为0的情况。这才会有诸如:
mov ax,data
mov ds,ax
mov bx,0
之类的指令。

sentiment 发表于 2013-8-18 15:19:14

tsembrace 发表于 2013-8-18 14:31 static/image/common/back.gif
第一问,都不需要管其他,涉及到原始数据段的就以下四句:
push ds:
push ds:


明白明白了 谢啦谢啦

小9 发表于 2013-8-23 13:23:08

这个问题我也看不懂

绝世公子 发表于 2013-8-24 18:23:22

其实我表示只是第二问不懂!!!

006 发表于 2013-8-29 16:57:26

为什么图中的sp的指向16呢 ,一直想不明白 ?谁能帮忙说下 ,谢谢了

vitamin 发表于 2013-9-2 12:52:22

006 发表于 2013-8-29 16:57 static/image/common/back.gif
为什么图中的sp的指向16呢 ,一直想不明白 ?谁能帮忙说下 ,谢谢了

这个是以栈段为段地址的。不要和数据段混了。

菜鸟一个a 发表于 2013-12-31 10:18:29

学习学习再学习
页: [1]
查看完整版本: 王爽老师的书 134页实验5 第一个