首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从线性地址提取目录和页位

从线性地址提取目录和页位
EN

Stack Overflow用户
提问于 2022-06-15 09:43:54
回答 1查看 53关注 0票数 0

正如许多消息来源说的那样,使用((1 << x) -1) << yx位从y分离到y + x,并且构建了这样一个线性地址:0:11是偏移量,12:21是页面,22:31是目录。但是,当我使用上面的位掩码并试图提取目录时,它似乎根本不起作用。

代码语言:javascript
复制
/* unsigned address */
#define MASK_DIR    ((1u << 9) - 1) << 22

int main(void)
{
    unsigned int dir;
    uint32_t addr = 0x12345678;

    dir = MASK_DIR & addr;
    printf("%#x", dir); // 0x12000000
}

当使用与上面相同的过程的(1u << 11) - 1时,提取偏移量效果很好。

EN

回答 1

Stack Overflow用户

发布于 2022-06-15 12:01:24

As @Gerhardh纠正了我的错误计算,我认为0-11是11位,尽管它是12位。

代码语言:javascript
复制
#define ADDR_PAGE(addr)   ((((1u << 10) - 1) << 12) & addr)
#define ADDR_DIR(addr)    ((((1u << 10) - 1) << 22) & addr)
#define ADDR_OFF(addr)    (((1u << 12) - 1) & addr)

输出0x678 - 0x345000 - 0x12000000 (offset, page, dir)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72629154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档