TomodaMaki 发表于 2013-3-13 16:34:05

为什么要和0xFFFF按位取或

本帖最后由 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
去掉重新编译运行。得不到正确的结果。说明肯定不能去掉。比较不理解。请教下大家。

浩气雄鹰 发表于 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位

TomodaMaki 发表于 2013-3-13 17:25:52

浩气雄鹰 发表于 2013-3-13 17:01 static/image/common/back.gif
Base:dd
Limit: dd (low 20 bits available)低二十位可用
Attr:dw (lower 4 bits of higher byt ...

非常感谢,非常感谢
页: [1]
查看完整版本: 为什么要和0xFFFF按位取或