windows - ASM x64 中 40h REX 操作码的目的是什么?
问题描述
我一直在尝试了解0x40
ASM x64 指令的 REX 操作码的用途。例如,在这个来自 Kernel32.dll 的函数序言中:
如您所见,它们push rbx
用作:
40 53 push rbx
但是仅使用53h
操作码(不带前缀)也会产生相同的结果:
根据this site,REX前缀的布局如下:
所以40h
操作码似乎什么也没做。有人可以解释它的目的吗?
解决方案
04xh
字节(即,040h
... 041h
)04fh
确实是 REX 字节。正如您在问题中列出的那样,低半字节中的每一位都有一个含义。该值040h
表示REX.W
、REX.R
和REX.X
都是REX.B
。0
这意味着添加此字节不会对该指令执行任何操作,因为您没有覆盖任何默认 REX 位,并且它不是以 AH/BH/CH/DH 作为操作数的 8 位指令。
此外,X
和R
位B
都对应一些操作数。如果您的指令不使用这些操作数,则忽略相应的 REX 位。
推荐阅读
- c++ - 如何使用 trompeloeil 加入分离的 TDD 执行流程?
- reactjs - 更改父级下拉菜单后,如何重置子级下拉菜单?
- c++ - 为什么 Eigen .select() 不接受两个标量?
- php - ssl 未在 codeigniter 网站的首次访问中显示
- java - 如何解决在数据帧上工作的错误 java.io.NotSerializableException?
- ios - 在 iOS 中访问其他项目 Firestore 数据
- arrays - 如何从谷歌表格中读取带有 appscript 的数字,并希望使用另一张表格上格式化的数字”
- c# - 如何从 DataGridView 读取 C# 中的单元格值
- java - 是否可以忽略 Maven 中的 CLASSPATH 变量?
- jquery - 将字符串添加到jquery中的变量会多次添加