|
主题 : : 第二版158页P7.9上边那个程序中栈顶SP的设置问题,感觉好像书上错了? [待解决] |
回复[ 9次 ]
点击[ 359次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2012-01-07 20:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58 |
我从start开始写代码:
start:mov ax,stacksg
mov ss,ax
mov sp,16(这里有问题!!!)
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
.
.
.
.
.
下边不写了
问题:题中的四行数据占了16*4个字节,然后又定义了16个字节的容量作为栈段,这样总共占用的就是64+16=80个字节的空间,那么栈顶指针SP应该指在50H的位置,为什么题上给的SP=16(16进制的话应该是10H)
这点很迷茫。。。求高手解答!!!
还有144页7.6节上边和150页7.9节上边的(cx)应该是0006H吧 怎么书上给的是0606H。。。各种疑问 求解答啊!!! | | |
|
|
|
|
[第1楼]
[ 回复时间:2012-01-07 20:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58 |
|
|
|
|
|
[第2楼]
[ 回复时间:2012-01-08 00:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
1.是两个段,一个是栈段,一个是数据段,每个段的偏移地址都是从零开始的,所以,不能进行加和;
2.那个应该是0606h,楼主可以再计算一下。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2012-01-08 01:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
2000:1000 BE 00 06 00 00 00 ...
这是内存中的状况,现在代码如下:
mov ax,2000h
mov ds,ax
mov bx,1000h
mov ax,[bx];这里,相当于把 2000h:1000h下的一个字给ax,按照高高低低的原则,ah=0;al=0beh
mov cx,[bx+1];相信你能理解,这里是把2000:1001下的一个字给cx,还是高高低低,06给ch,00给cl,此时cx=0600h,
add cx,[bx+2];就是(cx)=(cx)+(2000:1002),cx是0600h,2000:1002这个字是0006h,最终cx=0606h
如果还有疑问,请详细说明. | | |
|
|
|
|
[第4楼]
[ 回复时间:2012-01-08 01:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
楼上说的很清楚了,是这样的。
另:不要轻易怀疑是书的错误,先自己想清楚。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2012-01-08 10:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58 |
回复:[第3楼]
------------------
原来最后一行是add,我还以为那个是mov呢,看错了哎,谢谢了! | | |
|
|
|
|
[第6楼]
[ 回复时间:2012-01-08 10:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58 |
回复:[第4楼]
------------------
恩 发现是我眼睛看错了 以后果断不能怀孕了。。。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2012-01-08 10:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58 |
回复:[第2楼]
------------------
恩 那个0606是对的 我最后把ADD看错成MOV了
那个SP的我还是不理解 我看前边的测试题一直都是算在一起的 然后栈顶就是指向所有内存空间,没有说分开来算的。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2012-01-08 10:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58 |
回复:[第3楼]
------------------
就是第一个问题还不明白 栈顶SP的设置 我看前边的测试题一直都是算在一起的 然后栈顶就是指向所有内存空间,没有说按照2楼说的 即使分两个段 也不是从0开始算的 而是接着数据段的偏移地址算~
或许是我看书理解错了 还希望你帮我分析下~ | | |
|
|
|
|
[第9楼]
[ 回复时间:2012-01-09 01:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
你把书上6.3和 实验5仔细做下,就会明白了.数据段寄存器和堆栈段寄存器的值是不同的,因为他们不在一个段. | | |