Intel 64/x86_64/IA-32/x86处理器 - 通用指令(9/E) - 比特位操控指令(BMI1 BMI2)
Bit Manipulation Instructions (BMI1 & BMI2)
指令 |
描述 |
ANDN |
格式: ANDN r32a, r32b, r/m32 第一源操作数(r32b)取反后与第二源操作数(r/m32)按位“与”操作,结果保存在目标操作数中。 |
BEXTR |
格式:BEXTR r32a, r/m32, r32b 按照第二源操作数(r32b)指定的索引值与长度值,从第一源操作数(r/m32)中截取比特位,结果保存在目标操作数中。 Intel C/C++ Compiler Intrinsic Equivalent BEXTR: unsigned __int32 _bextr_u32( unsigned __int32 src, unsigned __int32 start. unsigned __int32 len); BEXTR: unsigned __int64 _bextr_u64( unsigned __int64 src, unsigned __int32 start. unsigned __int32 len); |
BLSI |
格式: BLSI r32, r/m32 在源操作数中查找到设置为1的最低比特位,将目标操作数中对应的比特位设置为1,其他的所有比特位置0。如果源操作数是0(即没有比特位为1),则目标操作数也置0。 Intel C/C++ Compiler Intrinsic Equivalent BLSI: unsigned __int32 _blsi_u32(unsigned __int32 src); BLSI: unsigned __int64 _blsi_u64(unsigned __int64 src); |
BLSMSK |
格式:BLSMSK r32, r/m32 扫描源操作数(r/m32),从最低比特位开始,直到最低的设置为1的比特位,将目标操作数中对应的比特位设置为1。 Intel C/C++ Compiler Intrinsic Equivalent BLSMSK: unsigned __int32 _blsmsk_u32(unsigned __int32 src); BLSMSK: unsigned __int64 _blsmsk_u64(unsigned __int64 src); |
BLSR |
格式:BLSR r32, r/m32 将源操作数的最低设置为1的比特位清除为0,其他比特位保持不变,结果写入到目标操作数。 Intel C/C++ Compiler Intrinsic Equivalent BLSR: unsigned __int64 _blsr_u64(unsigned __int64 src); |
BZHI |
格式:BZHI r32a, r/m32, r32b 按照第二源操作数(r32b)指定的比特位,将第一源操作数(r/m32)对应的比特位及其更高比特位全部设置为0,结果写入到目标操作数(r32a) Intel C/C++ Compiler Intrinsic Equivalent BZHI: unsigned __int32 _bzhi_u32( unsigned __int32 src, unsigned __int32 index); BZHI: unsigned __int64 _bzhi_u64( unsigned __int64 src, unsigned __int32 index); |
LZCNT |
格式:LZCNT r32, r/m32 统计r/m32中的前导比特位0的个数,结果保存在r32中。 Intel C/C++ Compiler Intrinsic Equivalent unsigned __int32 src); LZCNT: unsigned __int64 _lzcnt_u64( unsigned __int64 src); |
TZCNT |
格式:TZCNT r32, r/m32 统计r/m32中结尾比特位0的个数,结果保存在r32中。 TZCNT与BSF指令的关键区别在于当源操作数是0时,TZCNT的计数结果是32(即操作数的宽度),但是BSF的结果是未定义的。 Intel C/C++ Compiler Intrinsic Equivalent unsigned __int32 src); TZCNT: unsigned __int64 _tzcnt_u64( unsigned __int64 src); |
MULX |
格式:MULX r32a, r32b, r/m32 无符号整数乘法,EDX * r/m32,结果保存在r32a:r32b中。 Intel C/C++ Compiler Intrinsic Equivalent unsigned int a, unsigned int b, unsigned int * hi); unsigned __int64 mulx_u64( unsigned __int64 a, unsigned __int64 b, unsigned __int64 * hi); |
PDEP |
格式:PDEP r32a, r32b, r/m32 使用r/m32的掩码,将r32b中的低比特位传输并散列到r32a中。 (参看表后图PDEP示例) Intel C/C++ Compiler Intrinsic Equivalent PDEP: unsigned __int32 _pdep_u32( unsigned __int32 src, unsigned __int32 mask); PDEP: unsigned __int64 _pdep_u64( unsigned __int64 src, unsigned __int32 mask); |
指令 |
描述 |
PEXT |
格式:PEXT r32a, r32b, r/m32 与PDEP的操作相反,PEXT根据r/m32中指定的掩码将r32b中的比特位传输到r32a的低比特位中。(参看表后图PEXT示例) Intel C/C++ Compiler Intrinsic Equivalent unsigned __int32 src, unsigned __int32 mask); PEXT: unsigned __int64 _pext_u64( unsigned __int64 src, unsigned __int32 mask); |
指令 |
描述 |
RORX |
格式:RORX r32, r/m32, imm8 将32位的r/m32右移imm8次,结果保存到r32中,不修改算术标志位。 |
SARX |
格式:SARX r32a, r/m32, r32b 将r/m32算术右移r32b次,结果保存在r32a中。 |
SHLX |
格式:SHLX r32a, r/m32, r32b 将r/m32逻辑左移r32b次,结果保存在r32a中。 |
SHRX |
格式:SHRX r32a, r/m32, r32b 将r/m32逻辑右移r32b次,结果保存在r32a中。 |
Intel 64/x86_64/IA-32/x86处理器 - 通用指令(9/E) - 比特位操控指令(BMI1 BMI2)相关推荐
- Intel 64/x86_64/IA-32/x86处理器通用寄存器 (2) - 64位通用寄存器
General-Purpose Registers in 64-mode 在64位模式下,有16个64位宽通用寄存器(32位模式是8个通用寄存器),默认的操作数宽度是32位(注:与32位模式相同).但 ...
- Intel 64/x86_64/IA-32/x86处理器基本执行环境 (2) - 64位执行环境
64-Bit Execution Environment 64位模式的执行环境与32位执行环境类似.不同点如下所述: 地址空间 – 程序/任务运行在64位模式下,可以访问最高2^64字节(受制于规范寻 ...
- Intel 64/x86_64/IA-32/x86处理器基本执行环境 (1) - 32位执行环境概述
Basic Execution Environment Overview IA-32处理器提供了一套完整的资源,在处理器上运行的程序/任务可以执行指令,存储代码,数据以及状态信息.这些资源(如下简要的 ...
- Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(3) - 32位EFLAGS - 概述
32位标志寄存器中的标志位/域可以分成3组:状态标志位,控制标志位,以及系统标志位.下图定义了这些标志位以及对应的比特位编号.在处理器刚刚初始化之后(通过激活RESET引脚或者INIT引脚),EFLA ...
- Intel 64/x86_64/IA-32/x86处理器 - 指令格式(7) - 80386/32位指令格式概述
32-bit Instruction Format 从80386的指令格式可以看出,32位指令的操作码可以是1个字节或者2个字节,还新引入了SIB(即BYTE4)字节.地址位移量和操作数宽度也都升级为 ...
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(1) - 数据传输指令
General-Purpose Instructions 通用指令执行基本的数据搬移,算术/逻辑计算,程序流控制,字符串操作等.这些指令被频繁地用于运行在IA-32与Intel 64架构的系统软件与应 ...
- Intel 64/x86_64/IA-32/x86处理器段寄存器 - 32位段寄存器/64位段寄存器
Segment Registers 本节主要讲述Intel处理器中的段寄存器,用于支持处理器的段式存储器管理机制.16位的8086/Intel286处理器有4个段寄存器CS/DS/SS/ES.32位的 ...
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(2) - 二进制算术指令/十进制算术指令
Binary Arithmetic Instructions 二进制算术指令执行基本的二进制整型计算,操作数可以是字节,单字和双字整型数,位于存储器中,和/或通用寄存器中. 指令 描述 ADCX 带进 ...
- Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(2) - 32位EFLAGS - 80386(386, Intel386)/80486(486, Intel486)
80386/386/Intel386标志寄存器EFLAGS 80386增加了RF/VM标志位,用于支持虚拟8086模式与指令断点调试. 80486/486/Intel486标志寄存器EFLAGS (1 ...
最新文章
- GitHub标星10,000+,Apache项目ShardingSphere的开源之路
- Tomcat发布项目方法!
- linux 写脚本登录ftp,Linux使用Shell脚本实现ftp的自动上传下载-Go语言中文社区
- 基于Sbo SDK的Add-on插件开发实例
- 软件配置管理(六)常用配置软件配置工具指令
- Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法...
- DOS命令之ping命令大全详解
- SharePoint:扩展DVWP - 第15部分:通过网站栏实现可维护的下拉框
- bootstrap 学习 ---css样式学习
- web视频播放插件:Video For Everybody
- JFinal一行代码搞定增删改,要的就是快
- 电脑必备必装的软件工具神器,强烈推荐
- Oracle 数据库锁机制
- junit5 入门系列教程-05-junit5 断言(assert)
- 学历低的程序员要起飞了!拿下这个证书!年薪58万起!
- 应广单片机MINI-C编程要点
- 邮箱、微信号、手机号正则验证
- 在go mod中使用k8s.io/code-generator生成代码
- linux多线程调用同一个函数解析
- 开发一个简单易用的SDK的详细步骤(超详细,超适用)
热门文章
- PyCharm将制表符转换为空格并显示的配置方法
- 从零开始学keras之电影二分类
- jenkins中文插件_Jenkins学习笔记(一)
- 删除顽固文件夹cygwin的方法,挺折腾的
- java获取本机ip地址_代码片段:获取系统所有IP
- java 计数器_java并发之计数器CountDownLatch原理
- 计算机二级选择题40分,2017年计算机二级选择题及答案
- 大学计算机基础网络配置实验报告答案,大学计算机基础实验报告2.doc
- python提取高频词_seo与python大数据结合给文本分词并提取高频词
- mysql查询中怎样使用索引_MySQL如何使用索引