晚风心里吹 發表於 2020-1-19 14:18:17

汇编语言位向量(位映射)的实现

<p>有些应用控制的对象是从一个有限全集中选出来的一组项目。就像公司里的雇员,或者气象监测站的环境读数。在这些情景中,二进制位可以代表集合成员。</p>
<p>与 Java HashSet 用指针或引用指向容器内对象不同,应用可以用位向量(或位映射)把一个二进制数中的位映射为数组中的对象。</p>
<p>如下例所示,二进制数的位从左边 0 号开始,到右边 31 号为止,该数表示了数组元素 0、1、2 和 31 是名为 SetX 的集合成员:</p>
<p>SetX = 10000000 00000000 00000000 00000111</p>
<p>(为了提供可读性,字节已经分开。)通过在特定位置与 1 进行 AND 运算,就可以方便地检测出该位是否为集合成员:</p>
<p>mov eax,SetX<br />
and eax, 10000b&nbsp;&nbsp; ;元素[4]是 SetX 的成员吗?</p>
<p>如果本例中的 AND 指令清除了零标志位,那么就可以知道元素[4]是 SetX 的成员。</p>
<p><strong>1) 补集</strong></p>
<p>补集可以用 NOT 指令生成,NOT 指令将所有位都取反。因此,可以用下面的指令生成上例中 SetX 的补集,并存放在 EAX 中:</p>
<p>mov eax,SetX<br />
not eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;Setx的补集</p>
<p><strong>2) 交集</strong></p>
<p>AND 指令可以生成位向量来表示两个集合的交集。下面的代码生成集合 SetX 和 SetY 的交集,并将其存放在 EAX 中:</p>
<p>mov eax,SetX<br />
and eax,SetY</p>
<p>SetX 和 SetY 交集生成过程如下所示:</p>
<div class="jb51code">
<pre class="brush:plain;">
      1000000000000000000000000000111 (SetX)
AND    1000001010100000000011101100011 (SetY)
————————————————————-
      1000000000000000000000000000011 (交集)</pre>
</div>
<p>很难想象还有更快捷的方法生成交集。对于更大的集合来说,它所需要的位超过了单个寄存器的容量,因此,需要用循环来实现所有位的 AND 运算。</p>
<p><strong>3) 并集</strong></p>
<p>OR 指令生成位图表示两个集合的并集。下面的代码产生集合 SetX 和 SetY 的并集,并将其存放在 EAX 中:</p>
<p>mov eax,SetX<br />
or eax,SetY</p>
<p>OR 指令生成 SetX 和 SetY 并集的过程如下所示:</p>
<div class="jb51code">
<pre class="brush:plain;">
       1000000000000000000000000000111 (SetX)
OR    1000001010100000000011101100011 (SetY)
————————————————————-
       1000001010100000000011101100111 (并集)</pre>
</div>
<p>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持琼殿技术社区。</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>汇编语言存储及寄存器原理解析</li><li>汇编语言之寄存器(详细介绍)</li><li>16位汇编语言寄存器及指令整理(小结)</li><li>汇编语言之寄存器详解</li><li>汇编语言AND指令实现对两个操作数进行逻辑(按位)与操作</li><li>汇编语言mov指令及基本用法</li><li>详解汇编语言MOV指令</li><li>详解汇编语言中中括号[]作用及lea和mov指令的区别</li><li>汇编语言入门教程(这一篇足矣)</li><li>汇编语言 寄存器内存访问原理解析</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 汇编语言位向量(位映射)的实现