- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用最新的官方“Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D and 4”作为引用来理解 x86-64 ISA 的机器级编码。
第 2 卷第 2.1.3 节中提供的 ModR/M 和 SIB 字节的文档给出了引用 8 位、16 位和 32 位寄存器的确切编码(表 2-1、2- 2 和 2-3)
但是,我找不到类似的表来指定 REX 前缀中的 REX.X、REX.B、REX.R 字节如何与 ModR/M 结合以指定扩展寄存器。我专门为每个扩展寄存器寻找显式二进制编码。据我所知,手册中 REX 前缀的文档仅指定使用 REX 中的相应位将 reg、r/m 字段在 MSB 中扩展 1 位,但实际上并未给出显式映射位组合。
英特尔文档是否在 SDM 的任何地方明确说明了这些映射?或者只是假设 R8-R15 将遵循明显/自然的映射策略,REX.B/X/R 设置为 1,R8 编码为 000,R9 编码为 001 ... R15 编码为 111?
最佳答案
是的,正如您发现的那样,它遵循简单的二进制编号,使用 REX 位作为前导位,ModRM 位作为低 3 位来对寄存器编号进行编码。 8 = 二进制 1000,因此这是 R8 的编码。
https://wiki.osdev.org/X86-64_Instruction_Encoding#Encoding解释得很好,https://wiki.osdev.org/X86-64_Instruction_Encoding#Registers甚至还有一张 table 。
我在 Intel 的 vol.2 PDF 中搜索了 r14
(它对任何东西都不是“特殊”的,并且可能只会出现在表格中)。第 2 卷中有一些表格,但没有一个用于简单 ModRM 本身。 (合并后的 PDF 太大而无法使用)。
第 2 卷确实清楚地描述了 REX 字段如何与 ModRM 字段结合以生成 4 位寄存器数字。 (例如,图 2-4 显示了 REX.B 和 ModRM.rm 的串联,以及 REX.R 和 ModRM.r 的串联)。我没有检查第 1 卷 - 如果可以在那里找到关于寄存器 名称(由汇编程序使用)匹配二进制寄存器编号的一些声明,我不会感到惊讶。名称仅对汇编程序有意义,在机器代码中没有意义,这在第 2 卷中有明确记录。
但是,第 2 卷中的信息是:
它确实有 表 3-1。与+rb、+rw、+rd、+ro(续)相关的寄存器代码(续) 对于没有 ModRM 的指令,其中操作码字节的低 3 位是寄存器编号的低 3 位。 (就像 push/pop r64 的短编码)。
Reg REX.B Reg field R13B Yes 5 R14B Yes 6
以此类推,每个寄存器都有行,还有 3 组列用于 R14W、R14D、R14 的字、双字和四字大小。因此,如果您对二进制数映射到寄存器名称这一事实存有疑问,该表将一目了然。 (如果认为寄存器编号在这里与其他情况下的工作方式不同,那就太疯狂了。)
还有一个字节操作码的操作码映射,其中 push rSI/r14
共享一个条目 (0x58),与 xchg-with-(e)ax 相同,mov-immediate 到 byte- reg、pop、mov-immediate 到 word/dword/qword-reg 和 2 字节操作码映射中的 bswap。同样,如果这些寄存器编号的工作方式与其他地方的寄存器编号不同,那就太疯狂了。
有一个完整的表格表2-8。 VEX.vvvv 注册名称映射,与 xmm/ymm0..15 和 RAX/EAX .. R15/R15D。 (VEX.vvvv 可以为 BMI 指令编码整数寄存器,如 andn
,是的,它们仅记录为双字或四字,不能用 66
前缀覆盖字操作数大小。)
表 2-13。 SIB 字节的 32 位 VSIB 寻址形式也是相关的,显示像 ESI/R14D 这样的列。 (在 64 位模式下,您通常不会将 67 地址大小前缀与 vpgatherdd
或其他任何内容一起使用,但您可以。没有单独的 64 位地址大小表。 ) 该表没有明确提及如何 VEX.B 为给定的位 2:0 值在两个寄存器之间进行选择,但从其他情况来看应该很明显。
关于assembly - 英特尔在哪里记录了 ModR/M 字节中扩展寄存器 (R8-R15) 的编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68853305/
我有一个网站。 必须登录才能看到里面的内容。 但是,我使用此代码登录。 doc = Jsoup.connect("http://46.137.207.181/Account/Login.aspx")
我正在尝试为我的域创建一个 SPF 记录并使我的邮件服务器能够对其进行评估。我在邮件服务器上使用 Postfix 并使用 policyd-spf (Python) 来评估记录。目前,我通过我的私有(p
我需要为负载平衡的 AWS 站点 mywebsite.com 添加 CName 记录。记录应该是: @ CNAME mywebsite.us-east-1.elb.amazon
我目前正在开发一个相当大的多层应用程序,该应用程序将部署在海外。虽然我希望它在解聚后不会折叠或爆炸,但我不能 100% 确定这一点。因此,如果我知道我可以请求日志文件,以准确找出问题所在以及原因,那就
我使用以下命令从我的网络摄像头录制音频和视频 gst-launch-0.10 v4l2src ! video/x-raw-yuv,width=640,height=480,framerate=30/1
我刚刚开始使用 ffmpeg 将视频分割成图像。我想知道是否可以将控制台输出信息保存到日志文件中。我试过“-v 10”参数,也试过“-loglevel”参数。我在另一个 SO 帖子上看到使用 ffmp
我想针对两个日期查询我的表并检索其中的记录。 我这样声明我的变量; DECLARE @StartDate datetime; DECLARE @EndDate datetime; 并像这样设置我的变量
在 javascript 中,我可以使用简单的 for 循环访问对象的每个属性,如下所示 var myObj = {x:1, y:2}; var i, sum=0; for(i in myObj) s
最近加入了一个需要处理大量代码的项目,我想开始记录和可视化调用图的一些流程,让我更好地理解一切是如何组合在一起的。这是我希望在我的理想工具中看到的: 每个节点都是一个函数/方法 如果一个函数可以调用另
如何使用反射在F#中创建记录类型?谢谢 最佳答案 您可以使用 FSharpValue.MakeRecord [MSDN]创建一个记录实例,但是我认为F#中没有任何定义记录类型的东西。但是,记录会编译为
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
我是 Sequelize 的新手并且遇到了一些语法问题。我制作了以下模型: // User sequelize.define('user', { name: { type: DataTyp
${student.name} Notify 这是我的output.jsp。请注意,我已经放置了一个链接“Notify”以将其转发到 display.jsp 上。但我不确定如何将 Stud
例如,这是我要做的查询: server:"xxx.xxx.com" AND request_url:"/xxx/xxx/xxx" AND http_X_Forwarded_Proto:(https O
我一直在开发大量 Java、PHP 和 Python。所有这些都提供了很棒的日志记录包(分别是 Log4J、Log 或logging)。这在调试应用程序时有很大帮助。特别是当应用程序 headless
在我的Grails应用程序中,我异步运行一些批处理过程,并希望该过程记录各种状态消息,以便管理员以后可以检查它们。 我考虑过将log4j JDBC附加程序用作最简单的解决方案,但是据我所知,它不使用D
我想将进入 MQ 队列的消息记录到数据库/文件或其他日志队列,并且我无法修改现有代码。是否有任何方法可以实现某种类似于 HTTP 嗅探器的消息记录实用程序?或者也许 MQ 有一些内置的功能来记录消息?
如果我有一条包含通用字段的记录,在更改通用字段时是否有任何方法可以模仿方便的 with 语法? 即如果我有 type User = // 'photo can be Bitmap or Url {
假设我有一个名为 Car 的自定义对象。其中的所有字段都是私有(private)的。 public class Car { private String mName; private
当记录具有特定字段时,我需要返回 true 的函数,反之亦然。示例: -record(robot, {name, type=industrial, ho
我是一名优秀的程序员,十分优秀!