我面临一些问题,因为我正在学习的IA-32汇编电子书中没有清楚地提到这些问题:
1-在状态部分的零位是受"INC“(增量)和"Dec”(递减)指令影响的状态位中的唯一位,还是奇偶位也受影响?。
2- mul (无符号整数乘法)指令是否影响寄存器的状态部分?
最后,有一句话我不确定我是否理解得清楚:
“IMUL指令可以由有符号整数和无符号整数使用,尽管您必须注意结果没有使用目标中最重要的位。对于较大的值,IMUL指令仅对有符号整数有效。”。
我的概念是,当您要使用这个指令(有三种格式)来进行无符号整数乘法时,操作数应该在其最重要的位中有一个零,所以在这种情况下不使用该位;一旦打算进行有符号整数乘法,操作数就会自然地使用最重要的位作为符号位,对吗?
发布于 2011-02-12 14:44:42
许多/大多数指令集引用将告诉您哪些标志受到哪些指令的影响,例如:http://home.comcast.net/~fbui/intel.html
有些参考手册每条指令都有这样的信息,有些则有一个单独的表,其目的是显示哪些标志受到影响,而这些指示可能不会告诉您每条指令都有哪些标志受到影响。
在文档的其他地方,您必须找到字母的含义,大多数处理器引用Z、V、N和C。我上面链接的引用当然使用不同的符号来表示标志,所以您必须找到一个表来告诉您哪些标志是哪个,然后查找问题中的说明。
涉及问题1和问题2。
对于第三个问题,当你回答“从位角度看,有符号数字和无符号数字有什么不同”时,就会产生理解。我发现从2到3位的角度来思考是最容易的,因为我知道基本概念在不断扩展。例如,从3位的角度来看,位模式0b011是如何解释为无符号位模式的,它是如何解释为有符号位模式的?0b111怎么样?0b 001怎么样?那0b 101呢?如果使用了没有符号的数字,0b011乘以0b010会给你什么好处?作为签名号码?
如果答案还不明显,那么写下三个位操作数的所有64个组合,假设这些数字被认为是无符号的,计算结果,然后用被认为有符号的数字计算结果。如果您没有犯错误,如所述语句所指示的,是否设置了任一操作数的上位,则在有符号的数学和无符号的数学之间不会得到相同的结果。如果上面的位是清楚的,你将得到同样的结果。原因在于理解有符号和无符号的编码,或者使用另一个术语,两个补语。
现在,尝试一些有趣的4位情况(一些设置为上位,少数没有),并决定4位的结果是否与3相同,然后使用计算器尝试大约8或16位数,并决定规则是否适用于任意数量的位或是否发生更改。然后决定你所学到的大约3位数字的答案,或者至少澄清与IA-32 IMUL指令中操作数的大小相关的语句/问题。
发布于 2011-02-12 14:43:37
1)不,受影响的旗子是O、S、Z、A和P。
2)是的,预测的(有用的)标志是O和C,而标志S、Z、A和P是在IMUL指令之后。
3)是的,最后一位(MSB)是符号,如果符号是0,那么数字是正的,所以这两种类型的除法算法是相同的。
https://stackoverflow.com/questions/4978156
复制相似问题