为什么下面汇编语言加法中的V标志设置为1而不是0?为什么会出现溢出?
Why does the V flag shown in the addition in assembly language below is set to 1 instead of 0? Why does the overflow occur?
这是我做的练习测验的问题,但我不明白为什么 V 标志是 1。
83 美元 = –125
$74 = 116
–125 – 116 = –241,不适合 8 位。 (8 位有符号数的范围是 –128 到 +127。)由于结果不合适,你会得到有符号溢出,这会设置 V 位。
83 美元 - 74 美元 = 83 美元 + (-74 美元) = 83 美元 + (~74 美元) + 1
逻辑是这样的。
1
10000011
+ 10001011
==============
完成
100000111
10000011
+ 10001011
==============
00001111
确定 v 标志的两种等效方法,如果 msbit 的进位和进位不匹配,则设置 v 标志,否则不设置。另一种方法是,如果操作数的 msbits(记住反转并加一,因为这是逻辑上的加法而不是减法)相同并且结果 msbit 与两个匹配的操作数不同那么它是溢出否则如果所有三个都是相同或两个操作数 msbits 不同则 v = 0.
这是方法,要了解为什么请参阅 prl 的答案,答案不适合可用的位数。
C 标志特定于体系结构来做减法,你反转第二个操作数并反转进位(使其成为 1)在进位的路上,在一些体系结构的出路中反转进位使其成为借位,其他人保持原样。通常没有文档记录,因此您必须通过实验来了解架构的作用。
这是我做的练习测验的问题,但我不明白为什么 V 标志是 1。
83 美元 = –125
$74 = 116
–125 – 116 = –241,不适合 8 位。 (8 位有符号数的范围是 –128 到 +127。)由于结果不合适,你会得到有符号溢出,这会设置 V 位。
83 美元 - 74 美元 = 83 美元 + (-74 美元) = 83 美元 + (~74 美元) + 1
逻辑是这样的。
1
10000011
+ 10001011
==============
完成
100000111
10000011
+ 10001011
==============
00001111
确定 v 标志的两种等效方法,如果 msbit 的进位和进位不匹配,则设置 v 标志,否则不设置。另一种方法是,如果操作数的 msbits(记住反转并加一,因为这是逻辑上的加法而不是减法)相同并且结果 msbit 与两个匹配的操作数不同那么它是溢出否则如果所有三个都是相同或两个操作数 msbits 不同则 v = 0.
这是方法,要了解为什么请参阅 prl 的答案,答案不适合可用的位数。
C 标志特定于体系结构来做减法,你反转第二个操作数并反转进位(使其成为 1)在进位的路上,在一些体系结构的出路中反转进位使其成为借位,其他人保持原样。通常没有文档记录,因此您必须通过实验来了解架构的作用。