Assembly 汇编程序,子指令中的第七位用于什么?

Assembly 汇编程序,子指令中的第七位用于什么?,assembly,x86,instructions,machine-code,Assembly,X86,Instructions,Machine Code,在我从大学拿到的论文中,我得到了这样的东西: SUB 1. Subtracting value from register | 100000 s w | 11 101 reg | value(L) | value(...) | value(...) | value(H) | 我知道“w”代表什么。它指定“reg”字段中的寄存器是8位还是16/32位,但“s”选项是什么?它代表什么?我在网上搜索了一下,但没有找到一个明确的答案。s代表扩展标志 SUB80-83代表SUB-reg,imm 如图所示

在我从大学拿到的论文中,我得到了这样的东西:

SUB
1. Subtracting value from register
| 100000 s w | 11 101 reg | value(L) | value(...) | value(...) | value(H) |

我知道“w”代表什么。它指定“reg”字段中的寄存器是8位还是16/32位,但“s”选项是什么?它代表什么?我在网上搜索了一下,但没有找到一个明确的答案。

s代表扩展标志

SUB
80-83代表
SUB-reg,imm

如图所示,
SUB
版本82和83号扩展了立即数操作数

w表示存在位w(位索引0,操作数大小);可与位d或s组合<代码>04添加 s表示存在位s(位索引1,符号扩展);可与钻头w结合使用<代码>6B IMUL

允许立即数操作数更小,从而允许更紧凑的代码

您可以在以下位置查看完整的操作码映射:

请注意,80和82都表示带字节操作数的算术运算。80为无符号扩展,82为符号扩展;然而,字节操作数上的符号扩展是不可操作的,因此82是80的别名。
为了简化解码,英特尔选择不重新利用冗余的82操作码,只允许它们作为官方80操作码的别名


x86操作码映射有十几个别名,这些别名是英特尔不能简单地在解码问题上投入更多硅元素的时候遗留下来的

s代表符号扩展

SUB
80-83代表
SUB-reg,imm

如图所示,
SUB
版本82和83号扩展了立即数操作数

w表示存在位w(位索引0,操作数大小);可与位d或s组合<代码>04添加 s表示存在位s(位索引1,符号扩展);可与钻头w结合使用<代码>6B IMUL

允许立即数操作数更小,从而允许更紧凑的代码

您可以在以下位置查看完整的操作码映射:

请注意,80和82都表示带字节操作数的算术运算。80为无符号扩展,82为符号扩展;然而,字节操作数上的符号扩展是不可操作的,因此82是80的别名。
为了简化解码,英特尔选择不重新利用冗余的82操作码,只允许它们作为官方80操作码的别名


x86操作码映射有十几个别名,这些别名是英特尔不能简单地在解码问题上投入更多硅元素的时候遗留下来的

“我在网上搜索了一下,但没有找到一个明确的答案。”没有必要在网上搜索。只需获取《英特尔64和IA-32体系结构软件开发人员手册》。无论如何,
s
在这个非标准描述中似乎代表直接操作数的符号扩展。“我在互联网上搜索过,但没有找到明确的答案。”无需搜索互联网。只需获取《英特尔64和IA-32体系结构软件开发人员手册》。无论如何,在此非标准描述中,
s
似乎代表立即数操作数的符号扩展。请注意,操作码0x82是操作码0x80的未记录别名。在执行字节减法时,实际上没有任何符号扩展。因此将
sub al,7
编码为
80 E8 07
是否正确?请注意,操作码0x82是操作码0x80的未记录别名。在执行字节减法时,实际上没有任何符号扩展。因此将
sub al,7
编码为
80 E8 07
正确吗?