. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->更灵活的定位内存地址的方法
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第二版158页P7.9上边那个程序中栈顶SP的设置问题,感觉好像书上错了?  [待解决] 回复[ 9次 ]   点击[ 359次 ]  
idhyt
[帖 主]   [ 发表时间: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。。。各种疑问 求解答啊!!!
idhyt
[第1楼]   [ 回复时间:2012-01-07 20:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58
截图如下
tomato
[第2楼]   [ 回复时间:2012-01-08 00:46 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
1.是两个段,一个是栈段,一个是数据段,每个段的偏移地址都是从零开始的,所以,不能进行加和;

2.那个应该是0606h,楼主可以再计算一下。
chinatree
[第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
如果还有疑问,请详细说明.
tomato
[第4楼]   [ 回复时间:2012-01-08 01:06 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
楼上说的很清楚了,是这样的。

另:不要轻易怀疑是书的错误,先自己想清楚。
idhyt
[第5楼]   [ 回复时间:2012-01-08 10:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58
回复:[第3楼]
------------------
原来最后一行是add,我还以为那个是mov呢,看错了哎,谢谢了!
idhyt
[第6楼]   [ 回复时间:2012-01-08 10:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58
回复:[第4楼]
------------------
恩 发现是我眼睛看错了 以后果断不能怀孕了。。。
idhyt
[第7楼]   [ 回复时间:2012-01-08 10:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58
回复:[第2楼]
------------------
恩 那个0606是对的 我最后把ADD看错成MOV了
那个SP的我还是不理解 我看前边的测试题一直都是算在一起的 然后栈顶就是指向所有内存空间,没有说分开来算的。
idhyt
[第8楼]   [ 回复时间:2012-01-08 10:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58
回复:[第3楼]
------------------
就是第一个问题还不明白 栈顶SP的设置 我看前边的测试题一直都是算在一起的 然后栈顶就是指向所有内存空间,没有说按照2楼说的 即使分两个段 也不是从0开始算的 而是接着数据段的偏移地址算~

或许是我看书理解错了 还希望你帮我分析下~
chinatree
[第9楼]   [ 回复时间:2012-01-09 01:48 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
你把书上6.3和 实验5仔细做下,就会明白了.数据段寄存器和堆栈段寄存器的值是不同的,因为他们不在一个段.
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved