为什么要和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
去掉重新编译运行。得不到正确的结果。说明肯定不能去掉。比较不理解。请教下大家。
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位 浩气雄鹰 发表于 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]