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

与 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 (并集)

6.1 布尔和比较指令简介
6.2 AND指令
6.3 OR指令
6.4 位向量(位映射)
6.5 XOR指令
6.6 NOT(反码)指令
6.7 TEST指令
6.8 CMP(比较)指令
6.9 置位和清除单个CPU标志位
6.10 64位模式下的布尔指令
6.11 条件跳转简介
6.12 条件跳转指令汇总
6.13 条件跳转应用及示例
6.14 LOOPZ和LOOPE指令
6.15 LOOPNZ和LOOPNE指令
6.16 使用汇编语言实现IF语句
6.17 使用汇编语言实现逻辑表达式
6.18 使用汇编语言实现WHILE循环
6.19 表驱动选择
6.20 有限状态机
6.21 条件控制流伪指令
6.22 .IF、.ELSE、.ELSEIF、.ENDIF伪指令
6.23 用.REPEAT和.WHILE实现循环

汇编语言位向量(位映射)相关推荐

  1. 位映射--解决大数据排序与排重问题

    文章目录 一.问题提出 二.问题分析 三.位映射的详细阐述 四.将int[] 数组转化为byte[] 数组方案 4.1 实现bit索引与int数值之间的映射关系 4.2 计算转化为byte[]数组的索 ...

  2. 汇编语言--64位乘法运算

    汇编语言–64位乘法运算 文章目录 汇编语言--64位乘法运算 前言 一.采用的方法 二.算法代码 1.算法代码 2.代码结果 总结 前言 本文解决的问题:两个32位数据相乘,得到64位数据的过程. ...

  3. 汇编语言标志位:SF、CF、PF、AF、DF、ZF、TF、IF、OF

    汇编语言标志位:SF.CF.PF.AF.DF.ZF.TF.IF.OF CF:进位标志位.在无符号运算时,记录了运算结果的最高有效位向更高位的进位值或从更高位借位,产生进位或借位时CF=1,否则CF=0 ...

  4. 汇编语言标志位 含义 NV UP EI NG NZ AC PE CY

    缩写原意:<?xml:namespace prefix = o /> Overflow of = OV NV [No Overflow] Direction df = DN (decrem ...

  5. 汇编语言——16位寄存器实现32位二进制数左移4位。

    问题描述 16位寄存器实现32位二进制数左移4位. 源代码 MOV CL, 04 SHL DX, CL MOV BL, AH SHL AX, CL SHR BL, CL OR DL, BL 说明:  ...

  6. c51倒计时程序汇编语言,两位倒计时器程序(单片机—汇编语言).doc

    两位倒计时器程序 ? ??? ORG? ?00H? ?? ?JMP? ?START? ?? ?ORG? ?30HSTART:MOV? ?P2,#00H? ? :位选置低电平? ? 显示00??? ?? ...

  7. 汇编语言 标志位介绍

    一.运算结果标志位 1.进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位.如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0. 使用该标志位的情 ...

  8. 汇编语言 --- 32位x86处理器架构

    x86 CPU有实模式.保持模式.虚拟8086模式.系统管理模式等的分别. x86 CPU只有在启动的时候才能进入实模式,一旦切换到保持模式就无法退出回到实模式. 简单的讲,实模式就是8086使用CP ...

  9. 汇编语言AND指令:对两个操作数进行逻辑(按位)与操作

    AND 指令在两个操作数的对应位之间进行(按位)逻辑与(AND)操作,并将结果存放在目标操作数中: AND destination,source 下列是被允许的操作数组合,但是立即操作数不能超过 32 ...

最新文章

  1. 汇总|医学图像数据集
  2. HTTP POST GET 区别详解
  3. 来自lqqm的一些人生感悟,希望从中受益
  4. 我可以从iOS DeviceSupport中删除数据吗?
  5. centos7 tomcat 设置开机启动
  6. python断点续传代码
  7. seo html空格影响,这一对HTML标签嵌套对SEO优化的影响,居然99%的人不知道!
  8. boost::boost::maximum_adjacency_search用法的测试程序
  9. redis的主从数据库复制功能
  10. Comnnect oracle,RAC监听日志与CRS日志
  11. typedef 及其与struct的结合使用
  12. jdbc 批量insert_037 深入JDBC中PreparedStatement对象使用
  13. 基于注解的Spring MVC与JPA如何解决实体的延时加载问题
  14. Creative Groove Randomizer插件:Audiomodern Playbeat节拍生成器
  15. 从3dmax导出动画总结
  16. 【Windows优秀软件推荐】:唧唧down——视频和弹幕全清晰度下载
  17. 用c语言编写屏幕保护程序,用C语言编写屏幕保护程序.doc
  18. html 表格输出excel,html中导出excel表格
  19. ionic android 证书,Ionic 5/Angular Android和iOS 指纹认证
  20. Byond Compare软件

热门文章

  1. Android大图片裁剪终极解决方案
  2. 编程方法学14:内存
  3. CUDA性能优化----线程配置
  4. Ubuntu10.04各文件夹的作用
  5. 云炬金融每日一题20211010
  6. USTC English Club Note20211215
  7. USTC English Club Note20171023
  8. USTC English Club Note20171013(5)
  9. [Python学习笔记]h5py入门讲解
  10. 如何将ipynb转换为html,md,pdf等格式