znzjh 发表于 2012-2-11 19:02:28

关于栈的概念的一些问题 求大神们指点

在网上看到一个问题是问
1 设一个堆栈段共有100H个字节单元,堆栈的起始地址是1250H:0000H,若在堆栈中有5个字数据,求SS和SP的内容,还有栈顶的物理地址、栈底的物理地址是多少。然后解答在如下:
栈底的逻辑地址 1250H:0100HSP=栈底-5*2=0100H-AH=00F6HSS=1250H栈低物理地址 1250H*16+0100H=12600H栈顶物理地址 1250H*16+00F6H=125F6H 所以有一个很大的疑问就是一个堆栈或者说是栈的起始地址指的是什么?指的是他栈顶的地址呢还是栈底的地址?比如说有如下栈段stack segmentst dw 0,0,0,0,0,0,0stack ends那么stack是不是这个栈段的起始地址,还是标号st是这个栈段的起始地址?? 2 假如一个堆栈从地点1250H:0100H 开始,SP=0050,则SS的段地点是多少这里所说的一个堆栈或者说是栈从某一地址开始,则这个地址和栈底和栈顶地址是什么关系,又是否是堆栈的其实地址呢? 求大神指点

小小鱼苗 发表于 2012-2-11 20:11:30

在堆栈中有5个字数据   SS:1250HSP:FFFAH我分析 由于栈是以字为单位的 数据是以字节为单位,所以要3个字节才能容纳5个数据   SP-2-2-2=FFFAHSS不变   

我也不知道我回答的对不对知识我刚学习到栈所以试试   高手来个正解!我也好参照下!

小小鱼苗 发表于 2012-2-11 20:16:42

第2个问题没看明白 但是栈的地址 就是栈的最高地址单元的下一个单元!!
比如站的最高地址是 1000:10   那初始地址就是1000:11   栈底和栈顶 的关系?他们范围是0~FFFF

小小鱼苗 发表于 2012-2-11 20:23:53

假如一个堆栈从地点1250H:0100H 开始,SP=0050,则SS为1255?
1250*16+100=这个栈的物理地址为12600H   题给出SP为50用
12600-50=12550   12550/16 =1255
以上解答均不知是否正确

小小鱼苗 发表于 2012-2-11 20:24:47

又是否是堆栈的其实地址呢?    堆栈 没学到那呢 什么也不明白

znzjh 发表于 2012-2-12 11:52:57

假如如你所说栈的起始地址是最高地址后一位,那么第一题为何题中给出了起始地址是1259h:0000h,解答中却一上来就是以1250h:0100为栈底的   不是应该是1250h:0000h-1才是栈底吗?

小小鱼苗 发表于 2012-2-12 20:08:05

不明白你在说什么题中哪有1259h:0000h,   还有楼主你不能用回车把问题分开吗,

底的逻辑地址 1250H:0100HSP=栈底-5*2=0100H-AH=00F6HSS=1250H栈低物理地址 1250H*16+0100H=12600H栈顶物理地址 1250H*16+00F6H=125F6H   这都是啥啊

刺骨之剑 发表于 2012-2-12 21:54:03

1250H:0100HSP    怎么变成了1259??这是书本上的答案???:funk:不明白

以1250h:0100为栈底sp 应该指向1250:0101    加1才对吧   还有 1250h??地址有带h的??{第一次接触汇编   第一次接触计算机语言初中都没毕业}   

小甲鱼的视频还是慢好懂的建议难懂的地方暂停下想想

非同凡想 发表于 2012-2-14 23:15:12

任意时刻,SS:SP指向栈顶元素;push和pop指令执行时,cpu从ss和sp中得到栈顶地址。也是栈的起始地址。
cpu能且只能从ss和sp中获得栈的信息,其他都是无用的。楼主一定要清楚这些,不要被其他所打扰!
第二,如果执行push指令,首先sp会-2,以当前(sp-2)栈顶前面的单元(即前=高地址,因为地址是从低往高排列的)为新的栈顶,并把AX内容放入sp和sp-1地址所对应的内存单元内。

fishc1008 发表于 2016-12-29 20:05:54

留个座

fishc1008 发表于 2016-12-29 20:07:02

留个座

e马先森 发表于 2017-2-15 13:39:46

这道题有点难上面的说的可能是对的
页: [1]
查看完整版本: 关于栈的概念的一些问题 求大神们指点