文档章节

intel指令的变化(SGDT / SIDT)

l
 lgj1107
发布于 2017/08/26 14:14
字数 552
阅读 45
收藏 0

386手册:

SGDT/SIDT copies the contents of the descriptor table register to the six bytes of memory indicated by the operand. The LIMIT field of the register is assigned to the first word at the effective address. If the operand-size attribute is 32 bits, the next three bytes are assigned the BASE field of the register, and the fourth byte is written with zero. The last byte is undefined. Otherwise, if the operand-size attribute is 16 bits, the next four bytes are assigned the 32-bit BASE field of the register.

奔腾手册:

Stores the contents of the global descriptor table register (GDTR) or the interrupt descriptor
table register (IDTR) in the destination operand. The destination operand specifies a 6-byte
memory location. If the operand-size attribute is 32 bits, the 16-bit limit field of the register is
stored in the lower 2 bytes of the memory location and the 32-bit base address is stored in the
upper 4 bytes. If the operand-size attribute is 16 bits, the limit is stored in the lower 2 bytes and
the 24-bit base address is stored in the third, fourth, and fifth byte, with the sixth byte filled with
0s.

最新的手册:
Stores the content of the global descriptor table register (GDTR) in the destination operand. The destination operand specifies a memory location.
In legacy or compatibility mode, the destination operand is a 6-byte memory location. If the operand-size attribute is 16 or 32 bits, the 16-bit limit field of the register is stored in the low 2 bytes of the memory location and the 32-bit base address is stored in the high 4 bytes.
In 64-bit mode, the operand size is fixed at 8+2 bytes. The instruction stores an 8-byte base and a 2-byte limit.
SGDT is useful only by operating-system software. However, it can be used in application programs without causing an exception to be generated if CR4.UMIP = 0. See “LGDT/LIDT—Load Global/Interrupt Descriptor Table Register” in Chapter 3, Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2A, for information on loading the GDTR and IDTR.

 

286手册上说明SGDT/SIDT指令只存储5个字节,最后一个字节是未定义,PCEM里最后一个字节是写入的0xFF。而386+CPU在16位模式最后一个字节是要写入值的,他是按照286手册中说明的那样:GDTR/IDTR描述符最后一个字节是保留位必须是0这样操作的,也就是说386+以后的CPU SGDT/SIDT根本就是忽略了16位的前缀,存储的是6个字节只不过最后一个字节写0。

© 著作权归作者所有

上一篇: vtx
l
粉丝 0
博文 67
码字总数 34164
作品 0
达川
私信 提问
GDT,LDT,GDTR,LDTR 详解,包你理解透彻

一、引入 保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成 段描述符寄存器: 存储段描述符 选择器:存储段描述符的索引 段寄存器 PS:原先实模式下的各个段寄存器作为保...

simpower
2018/05/30
91
1
多种方法获取sys_call_table(linux系统调用表)的地址

一.方法一:常用方式,也是一google一堆的方式 我们首先需要找到call table-with-offset的特征,先看下面的代码 syscall_call: call *sys_call_table(,%eax,4) 假设我们没有vmlinux可供gdb反...

晨曦之光
2012/04/10
1K
0
SgxSpectre攻击:可从Intel SGX Enclave中窃取数据

  Intel Software Guard eXtensions (SGX) 是现代Intel处理器的一个特征,允许应用创建enclave。SGX通过从可信计算基(Trusted computing base)中移除特权代码来增强应用的安全性。Encla...

嘶吼RoarTalk
2018/03/08
0
0
x86\x64\ia64的区别

这几天做MDT时,总是会遇到x86x64ia64这几个文件夹。前两者很常见,自从Win7系统出现之后,经常会遇到。于是猜想ia64应该也是CPU的某种架构或版本。现对三者做了下总结。 x86或80x86是英特尔...

superuser
2012/11/15
279
3
Linux操作系统下关于引导和初始化的问题

系统引导和初始化概述 相关代码(引导扇区的程序及其辅助程序,以x86体系为例): \linux-2.4.22\arch\i386\boot\bootsect.S:Linux引导扇区的源代码;512字节 \linux-2.4.22\arch\i386\boot\setup...

zt371
2009/05/07
755
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部