鱼C论坛

 找回密码
 立即注册
查看: 3704|回复: 2

为什么要和0xFFFF按位取或

[复制链接]
发表于 2013-3-13 16:34:05 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 TomodaMaki 于 2013-3-13 17:02 编辑

看那本Orange's 一个操作系统的实现 这本书,第三章有如下这段代码:
%macro Descriptor 3
        dw        %2 & 0FFFFh                                ; 段界限1
        dw        %1 & 0FFFFh                                ; 段基址1
        db        (%1 >> 16) & 0FFh                        ; 段基址2
        dw        ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh)        ; 属性1 + 段界限2 + 属性2
        db        (%1 >> 24) & 0FFh                        ; 段基址3
%endmacro ; 共 8 字节


这段代码定义了一个Macro.其中数字3是参数个数,%1代表第一个参数,%2代表第二个参数,等等。


第一句
dw %2 & 0FFFFh
我觉得这一句似乎多余,&是按位取或,不管参数2%是什么值,与FFFF取或肯定是自己本身。为啥要这样做?我把我觉得多余的这两句:
dw %2 & 0FFFFh
dw %1 & 0FFFFh
去掉重新编译运行。得不到正确的结果。说明肯定不能去掉。比较不理解。请教下大家。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-13 17:01:51 | 显示全部楼层
Base:  dd  
Limit: dd (low 20 bits available)低二十位可用  
Attr:  dw (lower 4 bits of higher byte are always 0)高字节的低四位始终为0  
Limit: dd 所以是32位,在这里要截取后16位,因为dw        %2 & 0FFFFh,此处是16位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-3-13 17:25:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-7 22:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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