首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x86指令编码表

x86指令编码表
EN

Stack Overflow用户
提问于 2010-05-18 07:58:53
回答 2查看 4.3K关注 0票数 10

我正在重写我的汇编程序。在此期间,我对实现反汇编也很好奇。我想使它简单和紧凑,并有一些概念,我可以利用在这样做。

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

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

  • 这条指令包含modrm吗?
  • 这个指令有多少个直接字段?
  • 什么编码可以立即使用?
  • 字段中的“立即”是指令指针-relative地址吗?
  • modrm对操作数和寄存器字段使用什么类型的寄存器?

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

在开始编写和验证这些表之前,我决定编写这个问题。你知道在什么地方有这种桌子吗?在一种不需要花费太多精力来解析的表单中。

代码语言:javascript
复制
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指令被掩盖。不过我只需要一两张桌子就行了。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-20 22:14:18

我相信ref.x86asm.net可能有你想要的东西。它是所有x86-64指令的列表,采用的XML格式应该很容易解析。

票数 9
EN

Stack Overflow用户

发布于 2010-06-14 10:16:28

对于自由Pascal编译器的内部汇编程序,我们最初使用的是从NASM源代码中提取的表。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2855418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档