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

 更新时间:2020年01月19日 14:18:17   作者:Java入门基础教程  
这篇文章主要介绍了汇编语言位向量(位映射)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

有些应用控制的对象是从一个有限全集中选出来的一组项目。就像公司里的雇员,或者气象监测站的环境读数。在这些情景中,二进制位可以代表集合成员。

与 Java HashSet 用指针或引用指向容器内对象不同,应用可以用位向量(或位映射)把一个二进制数中的位映射为数组中的对象。

如下例所示,二进制数的位从左边 0 号开始,到右边 31 号为止,该数表示了数组元素 0、1、2 和 31 是名为 SetX 的集合成员:

SetX = 10000000 00000000 00000000 00000111

(为了提供可读性,字节已经分开。)通过在特定位置与 1 进行 AND 运算,就可以方便地检测出该位是否为集合成员:

mov eax,SetX
and eax, 10000b   ;元素[4]是 SetX 的成员吗?

如果本例中的 AND 指令清除了零标志位,那么就可以知道元素[4]是 SetX 的成员。

1) 补集

补集可以用 NOT 指令生成,NOT 指令将所有位都取反。因此,可以用下面的指令生成上例中 SetX 的补集,并存放在 EAX 中:

mov eax,SetX
not eax                  ;Setx的补集

2) 交集

AND 指令可以生成位向量来表示两个集合的交集。下面的代码生成集合 SetX 和 SetY 的交集,并将其存放在 EAX 中:

mov eax,SetX
and eax,SetY

SetX 和 SetY 交集生成过程如下所示:

        1000000000000000000000000000111 (SetX)
AND    1000001010100000000011101100011 (SetY)
————————————————————-
        1000000000000000000000000000011 (交集)

很难想象还有更快捷的方法生成交集。对于更大的集合来说,它所需要的位超过了单个寄存器的容量,因此,需要用循环来实现所有位的 AND 运算。

3) 并集

OR 指令生成位图表示两个集合的并集。下面的代码产生集合 SetX 和 SetY 的并集,并将其存放在 EAX 中:

mov eax,SetX
or eax,SetY

OR 指令生成 SetX 和 SetY 并集的过程如下所示:

       1000000000000000000000000000111 (SetX)
OR    1000001010100000000011101100011 (SetY)
————————————————————-
       1000001010100000000011101100111 (并集)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 汇编实现直接插入排序的方法示例

    汇编实现直接插入排序的方法示例

    这篇文章主要介绍了汇编实现直接插入排序的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 汇编程序成绩排序的实现

    汇编程序成绩排序的实现

    这篇文章主要介绍了汇编程序成绩排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 汇编语言入门教程阮一峰版

    汇编语言入门教程阮一峰版

    汇编语言是一种最低级、最古老、不具有移植性的编程语言,它能够直接访问计算机硬件,所以执行效率极高,占用资源极少,一般用于嵌入式设备、驱动程序、实时应用、核心算法等
    2020-01-01
  • 汇编语言中mov和lea指令的区别详解

    汇编语言中mov和lea指令的区别详解

    指令(instruction)是一种语句,它在程序汇编编译时变得可执行。本文给大家总结一下汇编语言中mov和lea指令的区别详解,感兴趣的朋友跟随小编一起看看吧
    2020-01-01
  • 使用汇编语言编写一条简单的贪吃蛇的实现

    使用汇编语言编写一条简单的贪吃蛇的实现

    这篇文章主要介绍了使用汇编语言编写一条简单的贪吃蛇的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编实现冒泡排序的方法示例

    汇编实现冒泡排序的方法示例

    这篇文章主要介绍了汇编实现冒泡排序的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 汇编指令-状态寄存器、cmp、test、jz等指令详细说明

    汇编指令-状态寄存器、cmp、test、jz等指令详细说明

    这篇文章主要介绍了汇编指令-状态寄存器、cmp、test、jz等指令详细说明,需要的朋友可以参考下
    2020-01-01
  • iOS汇编入门教程之在Xcode工程中嵌入汇编代码的方法

    iOS汇编入门教程之在Xcode工程中嵌入汇编代码的方法

    在Xcode中嵌入汇编代码主要依赖了C语言支持通过 __asm__ 引入汇编代码的功能。这篇文章主要介绍了iOS汇编入门教程之在Xcode工程中嵌入汇编代码的方法,需要的朋友可以参考下
    2020-02-02
  • 详解汇编语言 dup伪指令

    详解汇编语言 dup伪指令

    dup它有多种意义,包括Linux c 函数、C语言函数DUP、汇编指令、化学物质DUP。这篇文章主要介绍了汇编语言 dup伪指令的相关知识,需要的朋友可以参考下
    2020-01-01
  • 什么是汇编语言

    什么是汇编语言

    汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言
    2020-01-01

最新评论