您的位置:首页 > 其它

[汇编]逻辑运算 => AND,OR,XOR,NOT

2013-04-22 15:01 507 查看
《The Art of Assembly Language》

Logical Operations on Bits

原文下载地址:http://kuai.xunlei.com/d/V6-BASHO7eB0UQQAa50

2013-04-22上传 20天有效 不续期

我是从下面的这个地址下载的,不知道有效期到何时

http://www.planetpdf.com/codecuts/pdfs/aoa.pdf

本文在书中的20页,1.5 Logical Operations on Bits

版本、ISBN、作者,笔者都不清楚,因为书中没写

我英语真心不太好,也是边翻译边学习。求砍砖~

正文开始

这里有四个主要逻辑运算,我们需要通过十六进制和二进制来表现他们,他们分别是AND,OR,XOR(exclusive-or),和NOT。与算数运算不同的是,一个十六进制计算器是不侧重这些操作的。因为通常手算会比使用电子设备计算他们简单的多。逻辑运算符AND是一个并失运算注1(意思是它接受两个完全的操作数(operand))。这些操作数都是单一二进制(基于2)位。下面是AND运算:

0 and 0 = 0

0 and 1 = 0

1 and 0 = 0

1 and 1 = 1

我们可以通过一个更简单的办法来表示AND操作符,它叫做真值表:



这就像一个你在上小学时学的乘法表一样。我们可以看到这个表格中最左上角的AND是操作符,左侧第一列除了AND,其余的两个是操作数,第一行中,除了最左侧的AND,其余的两个也是操作数,通俗的说,如果第一个操作数和第二个操作数都是1,那结果是1;其余所有情况结果都是0。

逻辑运算符AND的一个重要操作就是,我们可以使用它来把某个结果强制变成0。如果其中一个操作数为0,那么无论另外一个操作数是什么,那么结果一定是0。举个例子来说,在上面的真值表中的结果中,第一行只有0,而且第一列也只有0。相反的,如果一个操作数包含1,那么运算的结果完全就取决于第二个操作数。这些AND操作符的特性是非常重要的,尤其当我们在操作一个序列(bit strings)并希望把它的个位(individual)强制变成0的时候。我们将会在下一节进一步探讨逻辑操作符AND。

译者注2 start:

这里呢,我来举个例子

mov al, 00001111b

and al, 11110101b

最后al的结果就是00000101b

我给大家对应一下啊

画个格子:

0
and
1
=
0
0
and
1
=
0
0
and
1
=
0
0
and
1
=
0
1
and
0
=
0
1
and
1
=
1
1
and
0
=
0
1
and
1
=
1
笔者感觉有了这个表格和上面那段示例代码,地球人应该都明白了吧~~

有了这个,下面的我就不写示例代码和画格了,大家自行解决

译者注2 end

逻辑运算符OR也是一个并失运算,他的定义如下:

0 or 0 = 0

0 or 1 = 1

1 or 0 = 1

1 or 1 = 1

下面是OR操作符的真值表:



通俗的说(colloquially),逻辑操作符OR是“如果第一个操作数或(or)第二个操作数1,那么结果就是1;另外一种就是,”这也被视为是inclusive-OR操作符。

如果在一个OR逻辑运算其中的一个是1,那么它的结果完全与第二个数无关。如果一个操作数是0,那么他的结果永远取决于第二个操作数,并且结果是第二个操作数。和逻辑操作数AND一样,在操作一个序列的时候逻辑操作符OR也是很重要的。

记住这是逻辑操作符OR与标准日常用语中OR的区别。请考虑一句话“我要去商店or我要去公园。”以上陈述意味着讲话要去商店或者要去公园,而不是两个地方都去。因此,在我们日常用语中的OR和汇编语言中的逻辑操作符OR的意思是不一样的。然而,日常应用中的OR却更想汇编语言中的操作符exclusive-OR逻辑操作符,也就是XOR。

逻辑操作符XOR(exclusive-or)也是一个并失运算。它的定义如下:

0 xor 0 = 0

0 xor 1 = 1

1 xor 0 = 1

1 xor 1 = 0

下面是逻辑操作符XOR的真值表:



在日常用语中,通俗的说就是“如果两个都是一样,那么结果就是0,如果两个不一样,那么结果就是1”,记住这个XOR逻辑操作符和我们语言中的OR是最相似的,他比逻辑操作符OR更像。

在XOR中,如果一个操作数是1,那么另外一个操作数就会被它反转(inverse);也就是说,如果第一个操作数是1结果是0那另外一个操作数就是1。如果第一个操作数是0,那么结果肯定是第二个操作数。这个逻辑操作符可以让你有选择的转化一个序列中的位。

逻辑操作符NOT是一个一元运算(monadic operation)(意思是它只接受一个操作数)它是:

NOT 0 = 1

NOT 1 = 0

它的真值表如下表示:



注1:并失运算,许多文章中管它叫二元运算(binary operation),这里叫做并失运算是为了避免与二进制编码系统(binary numbering system)混淆

单词:

dyadic operation 并失[二元,双值]运算

binary numbering system 二进制编码系统

colloquially adv. 口语地,用通俗语
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: