vvoooo 发表于 2011-4-20 13:56:34

求教小甲鱼

本帖最后由 loop 于 2011-4-25 04:04 编辑

段地址和偏移地址是由2个16位构成,方式为段地址*16+偏移地址,那么偏移地址最大只能是FFFF,但是,如果段地址是FFFF,那么偏移地址超过F之后,地址就会变21位的,这就不对了,这是咋回事?

vvoooo 发表于 2011-4-20 17:12:19

补充,我在debug下用-d命令查看,也有类似与这样的地址FFFF:0010---FFFF:FFF0,这些不都超过了20位了么

小甲鱼 发表于 2011-4-21 11:21:21

这个问题有点意思哈,我可以这么解释给你听,在现在CPU模式中我们不是说CPU对每个程序看以看到的地址空间都是4G,那事实上呢?内存真的需要4G这么大吗?答案是否定的。这只是由于现在的CPU的EIP是32位,32可以寻址这么大的空间,所以微软在这么给个定义。

回到这道题,也是一样的道理,两个十六位可以合成一个二十位的数,但也可能合成一个二十一位的数值,但是当时的物理内存最大确只有1MB,所以超出的部分是访问不到的,在当时超出部分的实际寻址是00000h的内容。而现在我们都知道内存很大,你懂得,越界访问~
页: [1]
查看完整版本: 求教小甲鱼