汇编和指令和c ++等价?

时间:2013-08-04 00:47:39

标签: c++ assembly

Solved。谢谢你的帮助,在网上看到了一个非常好的例子...但谷歌搜索引擎的后面几页很少~~

我正在通过谷歌搜索阅读一些关于装配的在线教程,但我似乎无法弄清楚他们在展示AND指令时的含义。

有人可以向我解释一下它的用法吗? 什么是它的等效c ++运算符?

我也无法理解操作员“!”在c ++中用于。

提前致谢。

1 个答案:

答案 0 :(得分:4)

按位和,表示将一个操作数的每个位与另一个操作数的相应位进行比较,如果它们都是1,则将结果设置为1,否则设置为0。所以考虑这两个字节和'在一起:

  00000011
& 00000101
----------
  00000001

结果中只设置了最低位,因为只有该位的操作数都是1。

在Intel x86汇编语言中,您使用“and”运算符来实现此目的:

mov    eax, [op1]   ; eax is a register
and    eax, [op2]   ; now eax is the bitwise 'and' of the two.
mov    [result], eax

在C ++中

unsigned result = op1 & op2;

逻辑和工作方式不同。我们使用一个约定为“假”的约定,如果它为零则为“假”,而“如果不是则为真”。这是更高级语言的约定,它不是汇编语言概念。所以在x86中我们有:

    mov    eax, [op1]
    test   eax, eax  ; Test if eax is zero by anding it with itself.
    jz     isfalse   ; just to isfalse if the first operand is false

    mov    eax, [op2]
    test   eax, eax
    jnz    istrue

isfalse:
    mov    [result], 0
    jmp    done
istrue:
    mov    [result], 1

done:
    ...

此处此代码使用0为false且1表示true的约定。

C ++等价物是:

boolean result = op1 && op2;