新手求助,急
1>SS=0,SP=FFFF的空栈,栈顶是指向哪里?2>CS和IP,可以同时为 FFFF 吗?王爽老师讲解的8086CPU,SS,SP都是16bit 的寄存器,那就是一个固定值。所以8086CPU栈的寻址范围为:0000~FFFF(FFFF转换成二进制,64KB)
示例:8086CPU加电启动或复位后,CS和IP指向的值为,CS=FFFFH,IP=0000。当我们把SS:SP分别指向CS和IP后,那么SS=CS=FFFFH,SP=IP=0000H,SS:SP从内存FFFF:0000开始指向的栈空间范围为:FFFF:0000~FFFF:FFFF 。当SS:SP指向FFFF:FFFF时,SS=FFFF,SP=FFFE,因栈操作都是以字为单位的。):
注:栈不存放于CPU中,CPU中的寄存器(SS:SP)指向内存一段空间构成了栈。 沉ジ寞 发表于 2014-3-29 22:06 static/image/common/back.gif
王爽老师讲解的8086CPU,SS,SP都是16bit 的寄存器,那就是一个固定值。所以8086CPU栈的寻址范围为:0000~FFF ...
感谢您的回复,虽然这个内容我在别的地方看过了,但还是要谢谢你。
其实我不懂的是 16 cpu 寻址能力不是只有 FFFFF 20位么, 那CS和IP怎么可以同时设置为FFFF呢,段地址*16+偏移地址FFFF*16+FFFF 不等于 FFFFF 啊?
还有小甲鱼老师说:为段地址和偏移地址为 1000:0的空栈 写入某数据(假如是2C36),那我们就要设置SS和IP为 1000:2,那我要为FFFF:FFFF的空栈写入数据的时候呢,那要设置它的SS和SP 为多少?难道是SS=FFFF,SP=FFFF+2 吗? 如果上面我给的 FFFF:FFFF不存在 那为 1:FFFF 的空栈写入数据呢
ss:sp就是栈顶
ffff:ffff 就是 10ffef 也就是说只要你的内存 有2mb就没问题
牡丹花下死做鬼 发表于 2014-3-29 22:23 static/image/common/back.gif
ss:sp就是栈顶
ffff:ffff 就是 10ffef 也就是说只要你的内存 有2mb就没问题
对于第一个问题,我可能明白了, 我应该是把 8086 CPU 的寻址能力和 寄存器存储的大小 给搞混了, 寻址能力是说他能找到 FFFFF 这么多个字节 而不是说寄存器能存放 FFFFF 这么大的数据
但是他只能 寻到FFFFF 这么多字节, 但是10ffef 多的字节 怎么能够找到呢? 为之疯狂 发表于 2014-3-29 22:33 static/image/common/back.gif
对于第一个问题,我可能明白了, 我应该是把 8086 CPU 的寻址能力和 寄存器存储的大小 给搞混了, 寻址 ...
8086CPU的地址总线 的寻址能力 CS:IP CS 0~FFFFIP 0~FFFF
CS:IP 0:0~FFFF:FFFF 也就是0~10ffef 牡丹花下死做鬼 发表于 2014-3-29 22:36 static/image/common/back.gif
8086CPU的地址总线 的寻址能力 CS:IP CS 0~FFFFIP 0~FFFF
CS:IP 0:0~FFFF:FFFF 也就是0~10ffef
恩,谢谢这个我明白了,还想问一下 内存地址为 FFFFF 入栈,此时他是空栈,那它的栈顶是 FFFFF+2吗,因为入栈之前不是要 SP - 2 吗 为之疯狂 发表于 2014-3-29 22:21 static/image/common/back.gif
感谢您的回复,虽然这个内容我在别的地方看过了,但还是要谢谢你。
其实我不懂的是 16 cpu 寻址能力不 ...
8086 CPU,只有 20 条地址线
至于你说的FFFF*16+FFFF=10FEF,约为1088KB,这已超过1MB范围进入扩展内存了。这部分地址,在 20 位地址的年代里面,无法利用。等到286 以上的机器,加上了扩展内存,才讨论这部分。
比如要为FFFF:FFFF的空栈写入数据,SS=FFFF,SP=FFFE SS:SP指向栈顶最高地址的下一个单元sp+2以后 栈顶跳到FFFE,栈操作都是以字为单位的 沉ジ寞 发表于 2014-3-29 22:49 static/image/common/back.gif
8086 CPU,只有 20 条地址线
至于你说的FFFF*16+FFFF=10FEF,约为1088KB,这已超过1MB范围进入扩展内存 ...
那SP=FFFF+2 之后不是 存不了这么大的数据了吗
页:
[1]