|
|
|
|
|
|
|
《软件调试》勘误和意见
帖子发起人: jackywei 发起时间: 2010-07-26 20:04 下午 回复: 5
|
帖子排序:
|
|
|
|
2010-07-26, 20:04 下午
|
jackywei
注册: 2010-07-19
发 贴: 4
|
|
|
61页开始,“取线性地址的高10位得到PDE在页目录中的索引,即94a/4",这里除以4做何理解?
是因为94a是高12位,所以做移位运算(向右移动2位,即/4)得到高10位?
还是因为其他原因?
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-07-27, 12:33 下午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
|
|
是<font color=yellow>因为每个页目录项(PDE)是4个字节大小,除以4得到的是对应表项在页目录表中的表项序号</font>。[此回答不当,见下面的帖子,是右移2位,取高10位]
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-07-27, 13:18 下午
|
jackywei
注册: 2010-07-19
发 贴: 4
|
|
|
Raymond,我觉得你的答复是错误的。
问题的关键是:究竟是取高10,还是高12位;以及这个地方存的是索引项序号还是实际偏移值。
我估计你是把94a当做了实际的偏移值.但这样是不对的。
首先是94a是高12位,而不是按规则高10位,所以直接取94a来操作是不对的。
第二,94a对应得二进制是100101001010b,高10位是1001010010b,也就是0x252,这个就代表了序号,后面的*4得到了实际的偏移值。
你这里/4得到正确的值只不过是凑巧,只是因为94a是12位,右移2位(相当于除以4)正好得到高10位。
为表述清楚,这里不应该用94a/4这样的说法,而应该改成和你在描述4K页那里一样:由于0x94a0d678的高10位是100101001010b,也就是0x252就可以得到索引,再*4就得到了偏移值。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-07-28, 14:22 下午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
|
|
赫赫,除以4永远是右移两位,不是凑巧,不过我在二楼的解释的确不对,低估了这个问题......
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-07-28, 15:07 下午
|
jackywei
注册: 2010-07-19
发 贴: 4
|
|
|
那这里/4是应该按我的解释,是为了取94a的高10位吧?
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-07-28, 15:10 下午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
|
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
高端调试 » 图书 » 《软件调试》勘误和意见 » Re: 有个问题请教下
|
|
|
|
|
|