1

我面临一些问题,因为它们在我正在研究的 IA-32 汇编电子书中没有明确涵盖:
1-EFLAGS 寄存器的状态部分中的零位是受“INC”影响的状态位中唯一的位(增量) 和“Dec”(递减)指令或奇偶校验位是否也受到影响?
2-mul(无符号整数乘法)指令是否影响 EFLAGS 寄存器的状态部分?

最后还有一句话我不知道是不是看清楚了:
“IMUL指令既可以用于有符号整数也可以用于无符号整数,虽然你必须注意结果不使用目标的最高位。对于更大的值,IMUL 指令仅对有符号整数有效。”
我的想法是,当您要使用此指令(具有三种格式)进行无符号整数乘法时,操作数的最高有效位应该为零,因此在这种情况下不要使用该位;一旦打算进行有符号整数乘法,操作数自然会使用最高有效位作为其符号位,那么我是对的吗?

4

2 回答 2

2

许多/大多数指令集参考将告诉您哪些标志受哪些指令影响,例如: http ://home.comcast.net/~fbui/intel.html

一些参考手册有每条指令的信息,一些有一个单独的表,其目的是显示哪些标志受到影响,而这些可能不会告诉你每条指令哪些标志受到影响。

在文档的其他地方,您必须找到这些字母的含义,大多数处理器指的是 Z、V、N 和 C。我上面链接的参考当然使用不同的符号来指示标志,所以您必须找到一个表格告诉您哪些标志是哪些,然后查找问题中提出的说明。

这涵盖了问题 1 和 2。

对于第三个问题,当您回答“有符号数和无符号数之间从按位角度看有什么区别”的问题时,就会理解。我发现用 2 位或 3 位来思考是最容易的,因为我知道基本概念是按比例放大的。因此,例如考虑 3 位,如何将位模式 0b011 解释为无符号位模式,如何将其解释为有符号位模式?那么0b111呢?那么0b001呢?还有0b101?如果使用无符号数,0b011 乘以 0b010 会给你什么?作为签名号码?

如果答案尚不明确,则写下三位操作数的所有 64 种组合,假设数字被认为是无符号的,计算结果,然后用被认为是有符号的数字计算结果。如果您没有犯错误,因为相关语句表明是否设置了任一操作数的高位,那么您将不会在有符号和无符号数学之间得到相同的结果。如果高位清晰,您将获得相同的结果。原因来自于理解有符号与无符号的编码或使用另一个术语,二进制补码。

现在尝试一些有趣的 4 位案例(一些设置了高位,一些没有设置),并确定 4 位是否得到与 3 相同的结果,然后也许用计算器尝试一些 8 或 16 位数字并决定该规则是否适用于任意数量的位或是否更改。然后决定你所学到的关于 3 位数字的知识是否回答或至少澄清了相对于 IA-32 IMUL 指令中操作数大小的语句/问题。

于 2011-02-12T14:44:42.120 回答
1

1) 不,受影响的标志是 O、S、Z、A 和 P。

2)是的,预测的(有用的)标志是 O 和 C,但标志 S、Z、A 和 P 在 IMUL 指令之后是不可预测的。

3) 是的,最后一位 (MSB) 是符号,如果符号为 0,则数字为正数,因此两种数字类型的除法算法相同。

于 2011-02-12T14:43:37.540 回答