Bit and Byte Instructions
比特指令测试并修改操作数的某些比特位;字节指令设置字节操作数的值,用来指示EFLAGS标志寄存器的状态。
| 指令 | 描述 |
| BT | 测试比特位(将要测试的比特位送CF标志位) |
| BTS | 测试并设置比特位(将要测试的比特位送CF标志位后,设置操作数中对应的比特位) |
| BTR | 测试并清除比特位(将要测试的比特位送CF标志位后,清除操作数中对应的比特位) |
| BTC | 测试并求补比特位(将要测试的比特位送CF标志位后,求补(即取反)操作数中对应的比特位) |
| BSF | 前向扫描比特位(扫描源操作数中设置为1的最低有效比特位,如果找到则将该比特位索引位置保存在目标操作数当中) |
| BSR | 反向扫描比特位(扫描源操作数中设置为1的最高有效比特位,如果找到则将该比特位索引位置保存在目标操作数当中) |
下面是字节设置指令,在文档中有时候统称为SETcc指令。这些指令会测试EFLAGS的标志位,如果条件成立,则目标字节设置为1;否则设置为0。
| 指令 | 描述 |
| SETE/SETZ | 如果相等/为0,则目标字节设置为1 |
| SETNE/SETNZ | 如果不相等/不为0,则目标字节设置为1 |
| SETA/SETNBE | 如果(无符号数)大于/不小于等于,则目标字节设置为1 |
| SETAE/SETNB/SETNC | 如果(无符号数)大于等于/不小于/无借位,则目标字节设置为1 |
| SETB/SETNAE/SETC | 如果(无符号数)小于/不大于等于/有借位,则目标字节设置为1 |
| SETBE/SETNA | 如果(无符号数)小于等于/不大于,则目标字节设置为1 |
| SETG/SETNLE | 如果(有符号数)大于,则目标字节设置为1 |
| SETGE/SETNL | 如果(有符号数)大于等于,则目标字节设置为1 |
| SETL/SETNGE | 如果(有符号数)小于,则目标字节设置为1 |
| SETLE/SETNG | 如果(有符号数)小于等于,则目标字节设置为1 |
| SETS | 如果符号标志SF为1(即负数),则目标字节设置为1 |
| SETNS | 如果符号标志SF为0(即0或正数),则目标字节设置为1 |
| SETO | 如果溢出标志OF为1,则目标字节设置为1 |
| SETNO | 如果溢出标志OF为0,则目标字节设置为1 |
| SETPE/SETP | 如果奇偶校验标志PF为1,则目标字节设置为1 |
| SETPO/SETNP | 如果奇偶校验标志PF为0,则目标字节设置为1 |
| TEST | 逻辑比较 |
| CRC32 | 为循环冗余校验CRC计算提供的硬件加速指令,主要用于快速高效的实现各类数据完整性协议。CPUID.01:ECX[SSE4.2]=1时,才支持CRC32指令。 |
| POPCNT | 统计源操作数中比特位为1的个数,将统计结果保存到目标操作数中。CPUID.01:ECX[POPCNT]=1时,才支持POPCNT指令。 |
最后
以上就是任性柠檬最近收集整理的关于Intel 64/x86_64/IA-32/x86处理器 - 通用指令(4) - 比特位设置指令/字节设置指令的全部内容,更多相关Intel内容请搜索靠谱客的其他文章。
发表评论 取消回复