-1

解決しました。助けてくれてありがとう、ネットで本当に良い例を見ました...しかし、Google検索エンジンの後ろのいくつかのページでした~~

グーグルで組み立てに関するオンラインチュートリアルを読んでいましたが、AND命令が表示されたときの意味がわかりません。

誰かが私にその使い方を説明できますか? 同等の c++ 演算子は何ですか?

また、演算子「!」が何を意味するのか理解できません。in c++ が使用されます。

前もって感謝します。

4

1 に答える 1

4

ビット単位 AND は、一方のオペランドの各ビットを他方のオペランドの対応するビットと比較し、両方が 1 の場合は結果を 1 に、それ以外の場合は 0 を設定することを意味します。したがって、これらの 2 バイトを and'ed でまとめて考えてみましょう。

  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;

論理的で、動作が異なります。各ビットを AND 処理するのではなく、値がゼロの場合は「偽」、そうでない場合は「真」という規則を使用します。これは高水準言語の規約であり、アセンブリ言語の概念ではありません。したがって、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;
于 2013-08-04T01:19:50.800 に答える