如果大于参数的大小,ADD指令的结果“包围”是什么意思

时间:2017-12-18 19:27:16

标签: assembly x86

我正在关注Udemy的汇编语言冒险:完整课程

在解释ADD指令时,教师说如果大于参数的大小, ADD指令的结果会“回绕”。

它包裹的意味着什么?

从我的描述中,在4位签名中,我不能添加两个(正)数字,导致数字大于7,或者结果溢出改变符号位。是指导者的意思吗?

1 个答案:

答案 0 :(得分:3)

基本上就是这样。如果添加两个数字,结果无法存储在目标中,则:

    如果存在最重要的存储列*,则
  • 进位将被准确设置;和
  • 如果结果符号不正确,
  • 溢出将被准确设置**。

因此,通常,进位用于扩展多个单词的加法,但是如果处理有符号数字,则需要检查溢出是否有错误的结果。

通过环绕,我认为他的意思是你说的:如果你正在处理4位无符号数,那么例如1001 + 1001 = 1 0010 =进位设置,结果0010.所以你加了9到9并得到了2的结果。结果在某种意义上一直到15,然后回到0,然后继续再次到2。

如果您反而想象您正在处理已签名的数字,那么您实际执行了(-7)+( - 7)并得到了2的结果。您无法通过添加两个负数来获得正结果,因此设置了溢出 - 标志不正确。你已经四处走动,然后下降到-8,然后跳到7,然后继续下降到2.

*例如好像它是任何其他长期添加:

1100 +
0101
----
0101 (result)
11   (carry)

左边最重要的列产生进位。因此处理器会设置进位标志。

**这里的逻辑非常简单:

  • 如果添加两个正数产生负数,则设置溢出;
  • 如果添加两个负数会产生正数,请设置溢出;
  • 否则,重置溢出。

所以你只要看看这两个数字的迹象。如果符号相同,但结果的符号不同,则设置溢出。否则重置它。

没有正数和负数的组合,当添加时,即使添加了进位,也不适合目的地。尝试一下最极端的例子:

  • 127 +( - 128)= -1,适合
  • 127 +(比-128更接近0的东西)=介于-1和127之间的东西,适合
  • (任何接近0而不是127)+(-128)=介于-1和128之间的东西,适合