LIDT的操作数是位移/绝对地址

| 我偶然发现了英特尔软件开发人员手册中的一项声明: \“对于LGDT,LIDT,LLDT,LTR,SGDT,SIDT,SLDT,STR,退出资格接收指令的位移字段的值,如有必要,将其符号扩展为64位(在不支持的处理器上为32位Intel 64体系结构。如果指令没有位移(例如,具有寄存器操作数),则将零存储到退出条件中。 现在,如果我有LIDT 0xf290指令,那么“ 0xf290”是位移吗?我认为答案是肯定的。 那么,我的困惑是什么全部构成位移?我印象深刻的是,位移是根据当前eip值计算得出的。 例如。 jmp xxx(在段内跳转中,这将是一个位移。但是对于段间跳转,应为绝对地址。)如果是这种情况,那么为什么LIDT加载相对地址?     
已邀请:
位移只是相对于某个原点的偏移量,可能是
Base+Index*Scale
或0。另一个可以容纳较大值的操作数x86是立即数,这对于添加常量(例如
ADD $42, %eax
)很有用。 顺便说一句,似乎相对跳转使用立即数字段,可能是因为它们通过常数修改了“ 2”。     

要回复问题请先登录注册