汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作
<p>AND 指令在两个操作数的对应位之间进行(按位)逻辑与(AND)操作,并将结果存放在目标操作数中:</p><p>AND destination,source</p>
<p>下列是被允许的操作数组合,但是立即操作数不能超过 32 位:</p>
<p>AND reg, reg<br />
AND reg, mem<br />
AND reg, imm<br />
AND mem, reg<br />
AND mem, imm</p>
<p>操作数可以是 8 位、16 位、32 位和 64 位,但是两个操作数必须是同样大小。两个操作数的每一对对应位都遵循如下操作原则:如果两个位都是 1,则结果位等于 1;否则结果位等于 0。</p>
<p>下表展示了两个输入位 X 和 Y,第三列是表达式 X^Y 的值:</p>
<p>
<table style="height: 107px; width: 108px">
<tbody>
<tr>
<td>X</td>
<td>Y</td>
<td>X^Y</td>
</tr>
<tr>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
</tbody>
</table>
</p>
<p>AND 指令可以清除一个操作数中的 1 个位或多个位,同时又不影响其他位。这个技术就称为位屏蔽,就像在粉刷房子时,用遮盖胶带把不用粉刷的地方(如窗户)盖起来。</p>
<p>例如,假设要将一个控制字节从 AL 寄存器复制到硬件设备。并且当控制字节的位 0 和位 3 等于 0 时,该设备复位。那么,如果想要在不修改 AL 其他位的条件下,复位设备,可以用下面的指令:</p>
<p>and AL, 11110110b ;清除位 0 和位 3 ,其他位不变</p>
<p>如,设 AL 初始化为二进制数 1010 1110,将其与 1111 0110 进行 AND 操作后,AL 等于 1010 0110:</p>
<p>mov al,10101110b<br />
and al, 11110110b ;AL 中的结果 = 1010 0110</p>
<p><span style="color: #ff0000"><strong>标志位</strong></span><br />
</p>
<p>AND 指令总是清除溢出和进位标志位,并根据目标操作数的值来修改符号标志位、零标志位和奇偶标志位。比如,下面指令的结果存放在 EAX 寄存器,假设其值为 0。在这种情况下,零标志位就会置 1:</p>
<p>and eax,1Fh</p>
<p><span style="color: #ff0000"><strong>将字符转换为大写</strong></span><br />
</p>
<p>AND 指令提供了一种简单的方法将字符从小写转换为大写。如果对比大写 A 和小写 a 的 ASCII 码,就会发现只有位 5 不同:</p>
<p>0 1 1 0 0 0 0 1 = 61h ('a')<br />
0 1 0 0 0 0 0 1 = 41h ('A')</p>
<p>其他的字母字符也是同样的关系。把任何一个字符与二进制数 1101 1111 进行 AND,则除位 5 外的所有位都保持不变,而位 5 清 0。下例中,数组中所有字符都转换为大写:</p>
<p> .data array BYTE 50 DUP(?) .code mov ecx,LENGTHOF array mov esi,OFFSET <br />
</p>
<p>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持琼殿技术社区。</p>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>汇编语言存储及寄存器原理解析</li><li>汇编语言之寄存器(详细介绍)</li><li>16位汇编语言寄存器及指令整理(小结)</li><li>汇编语言之寄存器详解</li><li>汇编语言位向量(位映射)的实现</li><li>汇编语言mov指令及基本用法</li><li>详解汇编语言MOV指令</li><li>详解汇编语言中中括号[]作用及lea和mov指令的区别</li><li>汇编语言入门教程(这一篇足矣)</li><li>汇编语言 寄存器内存访问原理解析</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]