老_船长 发表于 2016-4-26 19:24:02

关于栈的问题,求大神解惑

我被栈给弄晕了!
假如 将10000H ~ 10001FH 当做栈栈空时,最底部的字单元地址是 10001EH   SP为 0010H       如果将CPU能执行的最大地址范围 当做栈 栈空 那么此时 SP就等于0 了.当栈空或者栈满时的 SP指向的地址有点晕,

当将 10000H - 10001FH 为栈时
我的理解是: 当栈满时 SP = 0000H字单元地址 = 0FFFFH.   当栈为空时, SP = 100020H 字单元地址 = 10001EH;
当将 CPU能执行的最大地址范围为栈时
我的理解是: 当栈满时 SP = 0H字单元地址 = 0H.   当栈为空时, SP = 0H 字单元地址 = 最大地址 - 1;
总感觉是哪里理解错了

寒月独狼 发表于 2016-4-27 04:36:18

你写的是什么啊,怎么地址有6位的,完全懵了

老_船长 发表于 2016-4-27 09:35:30

寒月独狼 发表于 2016-4-27 04:36
你写的是什么啊,怎么地址有6位的,完全懵了

那肯定就是多了个0 了我自己也是晕的

兰陵月 发表于 2016-4-27 10:28:11

本帖最后由 兰陵月 于 2016-4-27 10:35 编辑

老_船长 发表于 2016-4-27 09:35
那肯定就是多了个0 了我自己也是晕的

10001FH   10001EH 多写了0

琢磨了半天,还是没理解你要说的东西,估计还是我理解能力有点差{:10_262:}

andor 发表于 2016-4-27 10:34:10

当 将10000H ~ 10001FH 为栈,即ss:1000 sp:0000~ss:1000 sp:001F, 栈SP是指的0000~001F这段空间,所以栈为空时,SP指针指向的是 栈底001F 的下方 即0020,当一个字型数据PUSH时,SP先减2,这时SP指针指向 001E,然后放入数据,如果一直有字型数据入栈,那么SP即指向001C ,001A ,0018 ,0016 ,0014 ,0012,0010,000E, 000C ,000A ,0008 ,0006 ,0004 ,0002,0000,到这里就结束了,如果再有数据入栈就会溢出0000减2,就会是FFFE

兰陵月 发表于 2016-4-27 10:36:22

andor 发表于 2016-4-27 10:34
当 将10000H ~ 10001FH 为栈,即ss:1000 sp:0000~ss:1000 sp:001F, 栈SP是指的0000~001F这段空间,所以栈为 ...

你说的好多了{:10_323:}

寒月独狼 发表于 2016-4-28 03:06:26

本帖最后由 寒月独狼 于 2016-4-28 03:07 编辑

老_船长 发表于 2016-4-27 09:35
那肯定就是多了个0 了我自己也是晕的

那把错的改过来啊,我想了好久,好久,我想你的意思是:假如将10000H ~ 1001FH 当做栈时,栈空和栈满的情况吧
当栈空时,最底部的字单元地址是1001EH 那么,SP就要指向它的下一个字单元地址,也就是SP=SP+2=001E+2 = 0020H
栈满时,那么SP必定指向0000H处
我是这么认为的,也不知道对不对,因为我也是新手来的
页: [1]
查看完整版本: 关于栈的问题,求大神解惑