首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

有点代码看不懂,帮忙解释一下解决办法

2012-06-17 
有点代码看不懂,帮忙解释一下GdtLenEQU$-LABEL_GDTGdtPtrDWGdtLen-1DD0XOREAX,EAXMOVAX,DSSHLEAX,4ADDEAX,

有点代码看不懂,帮忙解释一下
GdtLen             EQU       $   -   LABEL_GDT
GdtPtr             DW         GdtLen-1
                        DD         0

                          XOR       EAX,EAX
                          MOV       AX,DS
                          SHL       EAX,4
                          ADD       EAX,LABEL_GDT
                          MOV       DWORD[GdtPtr+2],EAX
 
                          LGDT         [GdtPtr]
上面基本上就是把GDT的物理地址填充到GDTPTR中,再load到gdtr中。那上面的SHL       EAX,4是怎么回事啊?这么一句放在这里,怎么想也想不明白。期待高人指点!

[解决办法]
SHL EAX,4有错误,
要么SHL EAX,1
要么 MOV CL,4
SHL EAX,CL
还有应该是MOV DWORD PTR[GdtPtr+2],EAX 把
XOR EAX,EAX, " SHL EAX,4 " 是先把EAX的内容取反,EAX 的低4位送高4位(或者将EAX剩16)


[解决办法]
为楼主解惑,为国家的操作系统事业贡献力量^_^!
GdtLen EQU $ - LABEL_GDT ;GDTR(全局描述符表寄存器)使用的数据结构
GdtPtr DW GdtLen-1
DD 0 ;待填

XOR EAX,EAX ;清零EAX
MOV AX,DS ;加载数据段的段值到AX
SHL EAX,4 ;通过将AX左移四位,用EAX表示数据段的物理内存首地址
ADD EAX,LABEL_GDT ;获取LABEL_GDT(全局描述符表)的物理内存地址
MOV DWORD[GdtPtr+2],EAX ;填充全局描述符表指针的地址域

LGDT [GdtPtr] ;加载全局描述符表到GDTR(全局描述符表寄存器)

补充:joydiy() 所言谬也!
[解决办法]
从80286开始,支持SHL的移动位数可以由立即数直接指定了

热点排行