有符号与无符号时,40h + 40h 中会设置哪些标志?

What flags are set off in 40h + 40h when they are signed vs. unsigned?

对于他们两个,我的输出都是 1000 0000 (80h)。十进制相加是 64 + 64 = 128。128 无符号在范围内,有符号则超出范围。

所以对于无符号来说,应该关闭的标志是溢出标志(因为当添加的数字为正时MSB为负)和符号标志(因为MSB为1)。

对于带符号的溢出标志应该再次设置(因为 128 超出了 8 位带符号的范围)并且符号标志应该设置为 1 因为 MSB。不应设置进位标志,因为在 MSB 位中未发生进位操作。这个对吗?在这种情况下,为有符号和无符号设置的标志应该相同吗?

只有一个加法运算可以为运算的有符号和无符号效果设置标志。减法是一样的(cmp只是一个舍弃结果的减法,除了flags)

  • V(溢出)标志捕获 signed 溢出。
  • C(进位)标志捕获 unsigned 溢出。
  • S(符号)标志捕获结果的最高位。
  • 如果所有结果位都为 0,则设置 Z(零)标志。

就是这样。如果您正在执行未签名或已签名的操作,您会查看不同的标志,具体取决于您要检测的内容。