x86指令编码表

2023-12-27

我正在重写我的汇编程序。同时我也对实现反汇编感到好奇。我想让它变得简单和紧凑,并且在这样做时我可以利用一些概念。

可以从操作码确定 x86 指令编码的其余部分(也许也需要前缀字节)。我知道很多人都写了表格来做到这一点。

我对助记符不感兴趣,而是对指令编码感兴趣,因为这是一个实际的难题。对于每个操作码编号,我需要知道:

  • 该指令包含 modrm 吗?
  • 该指令有多少个立即数字段?
  • 立即使用什么编码?
  • 字段中的立即数是指令指针相对地址吗?
  • modrm 使用什么类型的寄存器作为操作数和寄存器字段?

sandpile.org 有相当多我需要的东西,但它的格式不容易解析。

在我开始自己编写和验证这些表格之前,我决定写这个问题。您知道某处存在这种表吗?采用不需要太多精力来解析的形式。

b   byte
w   word
v   word or dword (or qword), depends on operand size attribute (0x66)
z   word or dword (or dword), depends on operand size attribute
J   instruction-relative address (next character describes type)
G   instruction group, has modrm-field (next character describes operand type)
R   has modrm-field (next two characters describe register and operand type)
M   modrm, but operand field must point to memory
O   direct offset (next character describes type)
F   FPU
T   separate table
_   defined, but no arguments

x    0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
0  Rbb  Rvv  Rbb  Rvv    b    z            Rbb  Rvv  Rbb  Rvv    b    z         T
1  Rbb  Rvv  Rbb  Rvv    b    z            Rbb  Rvv  Rbb  Rvv    b    z
2  Rbb  Rvv  Rbb  Rvv    b    z            Rbb  Rvv  Rbb  Rvv    b    z
3  Rbb  Rvv  Rbb  Rvv    b    z            Rbb  Rvv  Rbb  Rvv    b    z
4    _    _    _    _    _    _    _    _    _    _    _    _    _    _    _    _
5    _    _    _    _    _    _    _    _    _    _    _    _    _    _    _    _
6    _    _  Mvv                             z Rvvz    b Rvvb
7   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb   Jb
8  Gbb  Gvz  Gbb  Gvb  Rbb  Rvv  Rbb  Rvv  Rbb  Rvv  Rbb  Rvv       Mvv
9    _    _    _    _    _    _    _    _                        _    _    _    _
A   Ob   Ov   Ob   Ov    _    _    _    _    b    z    _    _    _    _    _    _
B    b    b    b    b    b    b    b    b    v    v    v    v    v    v    v    v
C  Gbb  Gvb    w    _                                            _    b    _    _
D   Gb   Gv   Gb   Gv                        F    F    F    F    F    F    F    F
E                                           Jz   Jz        Jb
F                        _    _   Gb   Gv    _    _    _    _    _    _   Gb   Gv

这里我得到了第一个操作数的表。格式是这样的表可以被解析 直接从包含它的文本文件中提取。我留下了一些 CISC 和分段相关的说明。

对于两字节指令,我可能需要四个这样的表。对于三字节指令,我还需要两个表。 FPU指令需要8个表,幸运的是非常简单。之后我就会覆盖相当大的 x86 指令块。不过我只吃一两张桌子就可以了。

此外,很少有指令组可能需要一些小数组来识别指令类型。


我相信参考x86asm.net http://ref.x86asm.net/可能有您正在寻找的东西。它是所有 x86-64 指令的列表,采用易于解析的 XML 格式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x86指令编码表 的相关文章

  • 生成 C / C++ 代码时表达式的结合性和优先级?

    我编写了一个生成 AST 的基本编译器 正确考虑了表达式中运算符的优先级 但是 在执行代码生成以生成 C 代码时 我不确定如何处理括号的使用 对于这个表达式 A B c AST如下 A B C 应该正确生成包含括号的前一个表达式 但是如果第
  • 为什么我的空循环在 Intel Skylake CPU 上作为函数调用时运行速度是原来的两倍?

    我正在运行一些测试来比较 C 和 Java 并遇到了一些有趣的事情 在 main 调用的函数中 而不是在 main 本身中 运行具有优化级别 1 O1 的完全相同的基准代码 导致性能大约翻倍 我正在打印 test t 的大小 以毫无疑问地验
  • 如何在 Linux x86_64 上模拟 iret

    我正在编写一个基于 Intel VT 的调试器 由于当 NMI Exiting 1 时 iret 指令在 vmx guest 中的性能发生了变化 所以我应该自己处理vmx主机中的NMI 否则 guest会出现nmi可重入错误 我查了英特尔手
  • 如何在 Debian 上编译 DOS 程序?

    在我的汇编语言课程中 我们使用 DPMI 编写 DOS 程序 不幸的是 我无法一直使用 32 位 Windows 机器 我在我使用的几乎每台计算机上都安装了 Debian 虚拟机 我已经安装了 DOSBox 和 DOSEMU 有什么办法可以
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • 程序集比较标志理解

    我正在努力理解汇编程序中的以下代码片段 if EAX gt 5 EBX 1 else EBX 2 在汇编程序中 可以写如下 根据我的书 模拟jge操作说明 https www felixcloutier com x86 jcc您通常会使用
  • CPU寄存器和多任务处理

    我目前正在学习汇编 我很困惑 CPU 寄存器如何与多任务一起工作 所以在多任务系统中 CPU可以随时暂停某个程序的执行并运行另一个程序 那么在这一步中寄存器值是如何保存的呢 寄存器是压入堆栈还是以其他方式 CPU 寄存器如何与多任务一起工作
  • 如何将 x86 GCC 风格的 C 内联汇编转换为 Rust 内联汇编?

    我在 C 中有以下内联汇编 unsigned long long result asm volatile byte 15 byte 49 shlq 32 rdx orq rdx rax a result rdx return result
  • 如何使用movntdqa避免缓存污染?

    我正在尝试编写一个 memcpy 函数 该函数不会将源内存加载到 CPU 缓存中 目的是避免缓存污染 下面的 memcpy 函数可以工作 但会像标准 memcpy 一样污染缓存 我正在使用带有 Visual C 2008 Express 的
  • MikeOS 引导加载程序中的堆栈段

    我不明白这段代码 mov ax 07C0h Set up 4K of stack space above buffer add ax 544 8k buffer 512 paragraphs 32 paragraphs loader cli
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • linux x86 汇编语言 sys_read 调用的第一个参数应为 0 (stdin)

    我正在编写一个简单的汇编程序来从标准输入读取 如 scanf 这是我的代码 section bss num resb 5 section txt global start start mov eax 3 sys read mov ebx 0
  • GCC的sqrt()编译后如何工作?使用哪种root方法?牛顿-拉夫森?

    只是对标准感到好奇sqrt 来自 GCC 上的 math h 我自己编码的sqrt 使用牛顿拉夫森来做到这一点 是的 我知道 fsqrt 但CPU是如何做到这一点的呢 我无法调试硬件 现代 CPU 中的典型 div sqrt 硬件使用 2
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 错误 LNK2019:函数 main 中引用的外部符号无法解析

    我正在尝试在 C 中运行我的简单汇编代码 我只有两个文件 cpp 文件和 asm 文件 编译时出现错误 见下文 如果有人可以提供帮助 我将不胜感激 这是我的 main cpp 文件 include
  • 从对象定义生成数据库表

    我知道有几种 自动 方法可以创建数据访问层来操作现有数据库 LINQ to SQL Hibernate 等 但我有点厌倦了 我相信应该有更好的做事方式 比如 在 Visio 中创建 更改表 使用 Visio 的 更新数据库 创建 更改数据库
  • NASM 中的 equ 和 db 有什么区别?

    len equ 2 len db 2 它们是否相同 产生可以用来代替的标签2 如果不是 那么每种申报表的优点或缺点是什么 它们可以互换使用吗 第一个是equate 与 C 类似 define len 2 因为它实际上并没有在最终代码中分配任
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 避免 gcc 函数序言开销?

    我最近遇到了很多 gcc 在 x86 上生成非常糟糕的代码的函数 它们都符合以下模式 if some condition do something really simple and return else something comple
  • 汇编器8086将32位数字除以16位数字

    我尝试将 32 位数字除以 16 位数字 例如 10000000h 除以 2000h 根据我尝试做的设计除以 右 4 位数字除以除数 然后左 4 位数字除以除数 这是我的代码 DATA num dd 10000000h divisor dw

随机推荐

  • 尝试在设备上运行 calabash-android 测试时出现“应用程序未启动(运行时错误)”

    我试图在连接到 Windows 7 笔记本电脑的 Samsung Galaxy S3 上运行一小部分初始的 calabash android 测试 并在尝试启动测试服务器时不断收到 应用程序未启动 运行时错误 消息 我安装了 Ruby v1
  • 使用 rmarkdown/knitr 将所有代码保存到最后

    我希望能够使用 knit rmarkdown 生成一个文档 将所有输出保留在一起 但将代码保留到最后 理想情况下作为各种引用的脚注 即可以查找每个图形或输出的代码在附录中使用脚注 这可能吗 如果我正确理解你的意思的话 您可以向原始代码块添加
  • Python 中正则表达式的使用令人困惑

    我对以下三种模式感到困惑 有人能更详细地解释一下吗 IPython with Python 2 7 3 In 62 re findall r a z f233op Out 62 f op why does the last come out
  • 计算阶乘结果的数字尾随零

    我正在尝试计算由阶乘产生的数字的尾随零 这意味着数字变得非常大 以下代码采用一个数字 计算该数字的阶乘 并计算尾随零 然而 当数量大约为25 numZeros 不起作用 public static void main String args
  • 字符串排序顺序(LC_COLLATE 和 LC_CTYPE)

    显然 PostgreSQL 从 8 4 版本开始允许每个数据库使用不同的语言环境 所以我去文档阅读有关语言环境的信息 http www postgresql org docs 8 4 static locale html 字符串排序顺序是我
  • 未找到 JNI_Onload() 且 VM 关闭

    我是安卓新手 我按照链接上的说明进行操作http marakana com forums android examples 49 html http marakana com forums android examples 49 html使
  • 如何使用另一个 XML 文件中的属性值作为当前 XML 中的元素值选择

    我有两个 XML 文件 一个是主 XML 文件 另一个用作查找表 这是主要的 XML
  • Kubernetes 中 subPath 和 mountPath 有什么区别

    我正在尝试将volumeMounts 中的文件添加到 dockerignore 并尝试了解subPath 和mountPath 之间的区别 阅读官方文档对我来说并不清楚 我应该从我读到的内容中添加 mountPath 是 pod 中将挂载卷
  • 如何使用 Jackson 解析不合格的 JSON 数组?

    因此 我正在访问第三方 API 它为我提供了这个 JSON 对象 但我花了很长时间试图找到一种使用 Jackson 解析资源子对象的优雅方法 我假设我必须编写一个自定义反序列化器 尽管我想知道是否还有其他方法 somekey someval
  • XSLT 节点值比较

    如何将 IP 地址与家庭和姓名参考进行比较 使用 XSLT 文件 在详细信息中 我有一个 xml 文件 其中包含操作员站节点列表 每个操作员站都有其唯一的信息 因此 通过将第一个操作员站节点视为主站 比较所有剩余的从属操作员站信息 首先需要
  • HTTP 持久连接

    尝试使用 Linux 套接字接口用 C 语言实现一个简单的 HTTP 服务器时 我在我希望它具有的某个功能 即持久连接 方面遇到了一些困难 使用单独的 TCP 连接一次发送一个文件相对容易 但这似乎不是非常有效的解决方案 例如考虑多次握手
  • 字符串常量池中的 new String("") 会发生什么

    如果我创建一个字符串对象 String s new String Stackoverflow 将只在堆中创建 String 对象 或者也在 String 常量池中创建一个副本 提前致谢 如果调用 则只能将字符串放入常量池中intern或使用
  • 为什么 Moq 不运行重写的 ToString 方法?

    在下面的代码中为什么mockTest ToString 返回Null 编辑 在示例代码中添加注释以显示如何解决问题 Public Sub Main Try Dim test New TestClass If test ToString lt
  • 如何给Python程序添加暂停模式

    我已经开发了一个 Python 代码 正在寻找改进以及如何添加暂停选项 尽管我不知道更简单的方法 但我还是一遍又一遍地重复完全相同的行 import math pygame random sys turtle from itertools
  • mapView 已弃用方法 getZoomControls?

    我正在尝试让默认缩放控件显示在谷歌地图视图上 我在看this http mobiforge com developing story using google maps android代码 但 getZoomControls 已被弃用 我尝
  • WinRT 投影类型文档

    有一种东西叫做预测类型在 WinRT 中 例如 在元数据中 IXamlType UnderlyingType定义为 TypeName UnderlyingType get 然而 当在 C 应用程序中使用时 它会发生如下变化 Type Und
  • 自定义 Flask 管理行操作

    我想在烧瓶管理列表视图上的编辑和删除图标旁边添加另一个按钮 此外 我想将该行数据作为发布请求发送到路线 我知道我必须编辑admin model list html模板 但我不知道如何添加此功能 你能提供任何指导吗 您需要为您的视图定义自定义
  • 如何使用 Typesafe Activator UI 在开发模式下运行 play 项目

    我正在使用 Typesafe Activator 1 2 10 我使用模板 play scala 中的 activator ui 创建了一个新项目 当我单击开始时 游戏正在产品模式下运行 我想在开发模式下运行它 如何使用 activator
  • 将单元格位置字符串解析为行和列

    i have string col AB21 这是 Excel 单元格位置 我想将其解析为string column AB int row 21 我怎样才能做到这一点 string col AB21 int startIndex col I
  • x86指令编码表

    我正在重写我的汇编程序 同时我也对实现反汇编感到好奇 我想让它变得简单和紧凑 并且在这样做时我可以利用一些概念 可以从操作码确定 x86 指令编码的其余部分 也许也需要前缀字节 我知道很多人都写了表格来做到这一点 我对助记符不感兴趣 而是对