《自己动手写操作系统》开篇杂问
在《自己动手写操作系统》中,有这样描述     
 ;   描述符 
 ;   usage:   Descriptor   Base,   Limit,   Attr 
 ;                        Base:      dd 
 ;                        Limit:   dd   (low   20   bits   available) 
 ;                        Attr:      dw   (lower   4   bits   of   higher   byte   are   always   0) 
 %macro   Descriptor   3 
 	dw	%2   &   0FFFFh				;   段界限   1				(2   字节) 
 	dw	%1   &   0FFFFh				;   段基址   1				(2   字节) 
 	db	(%1   > >    16)   &   0FFh			;   段基址   2				(1   字节) 
 	dw	((%2   > >    8)   &   0F00h)   |   (%3   &   0F0FFh)	;   属性   1   +   段界限   2   +   属性   2		(2   字节) 
 	db	(%1   > >    24)   &   0FFh			;   段基址   3				(1   字节) 
 %endmacro   ;   共   8   字节     
 我想问一下,为什么不换成下面一段,我自己看着这么别扭,上面还要进行计算,   
 struc   gdtdisc 
             LIMITL:            resw               1   ;段界限低16位 
                            alignb   2 
             BASEL:               resw               1   ;基地址低16位 
             BASEM:               resb               1   ;基地址中间8位 
                            alignb   1 
             ATTYPE:            resb               1   ;段属性(含segment   type) 
             ATLIMI:            resb               1   ;段属性(含segment   limit) 
             BASEH:               resb               1   ;基地址的高8位 
 endstruc 
 ;数据结构   
 下面是实例化 
 gdtdisc: 
          istruc   gdttype 
                at   LIMITL,DW   0 
                at   BASEL,   DW   0 
                at   BASEM,   DB   0 
                at   ATTYPE,DB   0 
                at   ATLIMI,DB   0 
                at   BASEH,   DB   0 
          iend   
 书上用宏来实现,方便是方便,但是要进行多余的计算,另外谁能不能告诉我我的这个alignb用的对不对?? 
 我想知道如果在宏内部最后用了alignb   1那么,后面的程序是不是都对齐一个字节,还是出了个结构,或者宏, 
 就会启用默认的4字节对齐。
------解决方案--------------------事实上我认为书上的做法更方便并且易于理解。描述符确定某个段的基地址,界限与属性,而这3个参数不连续的分散在8个字节中,书上的做法使你在定义描述符时给出3个正确值就行了,然后由宏来确定哪些数值放在8字节中的哪些位。而你的做法无法直接的给出那3个参数,虽然表面上你好像避免了一些计算,但是你不得不自己去把那3个参数拆散然后放入相应的位中