汇编中的高级if语句

时间:2014-12-14 16:04:02

标签: c assembly

如何在Assembly中编写逻辑运算符if语句?例如,在C中,我们有AND和OR逻辑函数,让我们说:

用C语言撰写

if((A >= B) && ( C < D)) {
   A = A+1;
   C = C*C;
 }else
C = C - 1;
A = C;

我不知道它是否正确但是在汇编时我会用这种方式翻译它:

在汇编中翻译

if:   cmp RA,RB
      jl else
      cmp RC,RD
      jge else
      inc RA
      mul RC,RC
      jmp endif
else: dec RC
      mov RA,RC
endif:

我需要你的帮助,如果我有if((A&gt; = B)||(C&lt; D))?, OR函数,将会应用哪些更改?我看到程序集也有逻辑运算符(AND,OR,XOR),在这种情况下我们可以使用它们吗? 你能描述两种情况的例子吗?

1 个答案:

答案 0 :(得分:3)

  

如果我有if((A >= B) || ( C < D))

怎么办?

应用De Morgan's law后,您可以采用与原始代码相同的方法:

if(!((A < B) && ( C >= D)))
  

我看到程序集也有逻辑运算符(AND,OR,XOR),在这种情况下我们可以使用它们吗?

在这种情况下,你可以。但是,它不再等同于您的C代码,因为||&&运算符使用short-circuit evaluation