鱼C论坛

 找回密码
 立即注册
查看: 1638|回复: 8

新手求助,急

[复制链接]
发表于 2014-3-29 21:53:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1>  SS=0,SP=FFFF的空栈,栈顶是指向哪里?2>  CS和IP,可以同时为 FFFF 吗?




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-29 22:06:55 | 显示全部楼层
王爽老师讲解的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)指向内存一段空间构成了栈。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:21:31 | 显示全部楼层

感谢您的回复,虽然这个内容我在别的地方看过了,但还是要谢谢你。

其实我不懂的是 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 的空栈写入数据呢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-29 22:23:47 | 显示全部楼层
ss:sp就是栈顶
ffff:ffff 就是 10ffef 也就是说只要你的内存 有2mb就没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:33:53 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-3-29 22:23
ss:sp就是栈顶
ffff:ffff 就是 10ffef 也就是说只要你的内存 有2mb就没问题

  对于第一个问题,我可能明白了, 我应该是把 8086 CPU 的寻址能力和 寄存器存储的大小 给搞混了, 寻址能力是说他能找到 FFFFF 这么多个字节 而不是说寄存器能存放 FFFFF 这么大的数据
但是他只能 寻到FFFFF 这么多字节, 但是10ffef 多的字节 怎么能够找到呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-29 22:36:33 | 显示全部楼层
为之疯狂 发表于 2014-3-29 22:33
对于第一个问题,我可能明白了, 我应该是把 8086 CPU 的寻址能力和 寄存器存储的大小 给搞混了, 寻址 ...

8086CPU的地址总线 的寻址能力 CS:IP CS 0~FFFF  IP 0~FFFF
CS:IP 0:0~FFFF:FFFF 也就是0~10ffef
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:43:55 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-3-29 22:36
8086CPU的地址总线 的寻址能力 CS:IP CS 0~FFFF  IP 0~FFFF
CS:IP 0:0~FFFF:FFFF 也就是0~10ffef

恩,谢谢这个我明白了,还想问一下 内存地址为 FFFFF 入栈,此时他是空栈,那它的栈顶是 FFFFF+2吗,因为入栈之前不是要 SP - 2 吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-3-29 22:49:55 | 显示全部楼层
为之疯狂 发表于 2014-3-29 22:21
感谢您的回复,虽然这个内容我在别的地方看过了,但还是要谢谢你。

其实我不懂的是 16 cpu 寻址能力不 ...

8086 CPU,只有 20 条地址线
至于你说的FFFF*16+FFFF=10FEF,约为1088KB,这已超过1MB范围进入扩展内存了。这部分地址,在 20 位地址的年代里面,无法利用。等到286 以上的机器,加上了扩展内存,才讨论这部分。
比如要为FFFF:FFFF的空栈写入数据,SS=FFFF,SP=FFFE SS:SP指向栈顶最高地址的下一个单元sp+2以后 栈顶跳到FFFE,栈操作都是以字为单位的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-29 22:55:01 | 显示全部楼层
沉ジ寞 发表于 2014-3-29 22:49
8086 CPU,只有 20 条地址线
至于你说的FFFF*16+FFFF=10FEF,约为1088KB,这已超过1MB范围进入扩展内存 ...

那SP=FFFF+2 之后不是 存不了这么大的数据了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 01:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表