Solved。谢谢你的帮助,在网上看到了一个非常好的例子...但谷歌搜索引擎的后面几页很少~~
我正在通过谷歌搜索阅读一些关于装配的在线教程,但我似乎无法弄清楚他们在展示AND指令时的含义。
有人可以向我解释一下它的用法吗? 什么是它的等效c ++运算符?
我也无法理解操作员“!”在c ++中用于。
提前致谢。
答案 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;