Assembly 负条件标志N是否也设置为溢出?

Assembly 负条件标志N是否也设置为溢出?,assembly,cpu,processor,Assembly,Cpu,Processor,当我准备下周学校的组装/处理器体系结构考试时,我遇到了一些相当混乱的事情 执行二进制加法时,我们了解了4个条件标志: N=结果为负 Z=结果为零 C=产生进位的操作 V=操作产生的溢出 但我很困惑,当出现溢出时是否必须设置N标志 我们在6 + 7的两个补中考虑这个4位加法,例如: 0110 0111+ ----- 1101 = result 现在,当用2的补码计算4位时,这显然会导致溢出。它的结果应该是13(01101为5位),但结果是-3,因为它只能以4位显示。 所以我的问题是,在这种情

当我准备下周学校的组装/处理器体系结构考试时,我遇到了一些相当混乱的事情

执行二进制加法时,我们了解了4个条件标志:

N=结果为负

Z=结果为零

C=产生进位的操作

V=操作产生的溢出

但我很困惑,当出现溢出时是否必须设置N标志

我们在6 + 7的两个补中考虑这个4位加法,例如:

0110
0111+
-----
1101  =  result
现在,当用2的补码计算4位时,这显然会导致溢出。它的结果应该是13(01101为5位),但结果是-3,因为它只能以4位显示。
所以我的问题是,在这种情况下是否也设置了负标志N?因为结果是一个负数。

如果不确切知道您使用的是哪个处理器,我无法肯定地回答这个问题,但通常N被设置为等于结果的高位(符号),与所有其他标志无关。因此,在您的示例中,N和V都将被设置


(N、Z和C几乎都是来自ALU的位的简单函数-C是加法器的进位,N等于结果的高位,Z不是(或(寄存器中的所有位))。它的定义很可能因处理器而异。)如果不确切知道您使用的是哪个处理器,我无法肯定地回答这个问题,但通常N被设置为等于结果的高位(符号),与所有其他标志无关。因此,在您的示例中,N和V都将被设置


(N、Z和C几乎都是来自算术运算器的位的简单函数-C是加法器的进位,N等于结果的高位,Z不是(或(寄存器中的所有位))。它的定义很可能因处理器而异。)

以4位为例,继续考虑以下示例:

  • 0001+1110==1111(小数点:1+(-2)=-1)
负,但没有溢出

  • 1100+1001==0101(十进制:(-4)+(-7)==5;-11将不存在溢出)
不是负面的,而是流动的

这将表明负标志与溢出事实没有直接关系

但是:通常不解释的事情是:一旦溢出标志意味着符号错误,就可以检测出真正的结果符号为负标志和溢出标志的异或:

S = N xor V
其中S是真符号标志(不直接出现在NZVC方案中)。这个标志实际上用于分支操作:例如,当BGT的条件为
((nxor V)或Z)==0
,这实际上意味着
S或Z==0
,或者换句话说,
S==0和Z==0


某些指令集体系结构(例如,
AVR
)具有真符号标志而不是负标志。

对于4位示例,请继续考虑以下示例:

  • 0001+1110==1111(小数点:1+(-2)=-1)
负,但没有溢出

  • 1100+1001==0101(十进制:(-4)+(-7)==5;-11将不存在溢出)
不是负面的,而是流动的

这将表明负标志与溢出事实没有直接关系

但是:通常不解释的事情是:一旦溢出标志意味着符号错误,就可以检测出真正的结果符号为负标志和溢出标志的异或:

S = N xor V
其中S是真符号标志(不直接出现在NZVC方案中)。这个标志实际上用于分支操作:例如,当BGT的条件为
((nxor V)或Z)==0
,这实际上意味着
S或Z==0
,或者换句话说,
S==0和Z==0


某些指令集架构(例如,
AVR
)具有真符号标志而不是负标志。

是,已设置。N标志只是最高有效位的副本。当然,也可以在没有溢出的情况下进行设置。是的,设置了。N标志只是最高有效位的副本。当然,也可以在没有溢出的情况下进行设置。