edi*_*ian 2 x86 assembly machine-code opcode instruction-encoding
I386指令集中的“Grpl”指令的作用是什么?我正在学习计算机指令并做指令模拟实验。在模拟的过程中我遇到了这样的指令83 F8 01。
为了了解如何使用该指令,我查阅了 i386 手册中的附录 a 操作码映射。由于该指令的操作码为83,所以我找到了操作码映射条目:
\n
但我不知道GRPL是什么意思,也不知道CPU是做什么的。我检查了Intel 80386指令集,但找不到该指令的描述。以 E 开头的指令后面直接跟着以 H 开头的指令。 (enter和hlt)
我还查了谷歌,找不到该命令的描述。由于不知道这条指令的实际含义,我无法模拟它。CPU是如何实现这个功能的呢?正确的查询是什么?我错过了什么\xef\xbc\x9f
\n您读到的“GRPL”实际上是“Grp 1”。它不是CPU执行的指令。它只是将相关事物组合在一起的一种方法。
查找 83h 操作码,您会在表中看到“Ev,Ib”。
“A.1 使用操作码表”一章解释了这些字符组合的含义。
E --- ModR/M 字节跟随操作码并指定操作数。
v --- 字或双字,取决于操作数大小属性。
, --- 一个分隔逗号
I --- 立即数据:操作数值被编码在指令的后续字节中。
b --- 字节,无论操作数大小属性如何。
ModR/M 字节是二进制表示法中的 F8h 或 11'111'000b,位于“mod-TTT-r/m”分组之后。
因为指令 83h 属于 Grp1,所以 ModR/M 字节 (111b) 的位 5、4 和 3 通知您实际指令。还有另一个表可以查找,您会看到指令是cmp。
由于 2 个最高有效位 (11b) 在 ModR/M 字节中设置,因此 3 个最低有效位 (000b) 指的是寄存器。三个零表示累加器,但AL、AX、 或 是哪一个EAX?
为此,我们必须查看分组“TTTTTT-sw”后面的二进制表示法的操作码 83h 或 100000'1'1b。
位 0 (w) 告诉我们这是一个字大小的操作。AL消失了,AX或者EAX留下了。
位 1 (s) 告诉我们接下来的立即数据将是一个字节,CPU 在将其用于字大小的操作之前将对其进行符号扩展。
因此,3字节指令将cmp ax, 1取决于cmp eax, 1操作模式是实地址模式还是保护模式。如果指令以操作数大小前缀 66h 为前缀,则反之亦然。
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |