不太理解lgdt的操作数。

ShawFeld 2014-12-14 12:30:52
0f 01 15 48 00 10 00
lgdtl 0x100048
不是说lgdt 操作数是m16&32,
应该是6字节的一个数啊,为什么这里只有5个。
总之,应该怎么看这个指令呢?
...全文
1646 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_42490606 2018-12-20
  • 打赏
  • 举报
回复 1
就拿楼主这个例子来说,lgdt操作归根到底是取6个字节的数据,其中有2个字节数据装载进gdtr寄存器的limit部分,另外4个字节数据装载进gdtr寄存器的base部分。而通过解析,我们得到一个内存地址addr=0x10048,而我们要取得这六个字节数据就在以改地址为首地址的内存中。可以通过memcpy(&dest,addr,2)取出两个字节数据保存在dest中装载进gdtr中,然后再memcpy(&dest,addr+2,4)取出四个字节数据保存在dest中。(个人理解,勿喷)
均陵鼠侠 2015-03-08
  • 打赏
  • 举报
回复
lgdt是间接寻址的,需要用它后面的地址操作数间接找到真正的GDT的线性地址。
疯疯颠巅 2015-02-18
  • 打赏
  • 举报
回复
0f 01 15 |48 00 10 00 ;48 00 10 00 倒转来看不就是0x00100048吗? 0f 01 15 = lgdt,是lgdt的机器码 lgdt |0x100048 操作数是m16&32,是指可以是16位或者32位 16位 00 00 32位 00 00 00 00; 48 00 10 00是32位
赵4老师 2015-01-07
  • 打赏
  • 举报
回复
0f011548001000   lgdt    [00100048]
zara 2014-12-15
  • 打赏
  • 举报
回复
不知道 6字节只有5个 是怎么来的,啥个意思。
就 0f 01 15 48 00 10 00 这个指令机器码来说,0f 01 是操作码,15 是寻址模式字节表示 32 位偏移,48 00 10 00 就是偏移地址了。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧