BT、BTS、BTR、BTC: 位测试指令
2013-07-16 20:26
309 查看
BT、BTS、BTR、BTC: 位测试指令
BSF、BSR: 位扫描指令
;BT(Bit Test): 位测试 ;BTS(Bit Test and Set): 位测试并置位 ;BTR(Bit Test and Reset): 位测试并复位 ;BTC(Bit Test and Complement): 位测试并取反 ;它们的结果影响 CF ;它们的指令格式相同: BT r16/r32/m16/m32, r16/r32/m16/m32 BT r16/r32/m16/m32, i8 ; Test23_1.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc ;BT 把 10000001b 的第七位复制到 CF, 得知是 1 mov dx, 10000001b bt dx, 7 lahf PrintHex ah ;47 - 01000111b (CF=1) ;BT 把 10000001b 的第六位复制到 CF, 得知是 0 bt dx, 6 lahf PrintHex ah ;86 - 10000110b (CF=0) ;BTS 在执行 BT 命令的同时, 把操作数的指定位置为 1 mov dx, 10000001b bts dx, 6 PrintHex dl ;C1 - 11000001b ;BTR 在执行 BT 命令的同时, 把操作数的指定位置为 0 mov dx, 10000001b btr dx, 7 PrintHex dl ;01 - 00000001b ;BTC 在执行 BT 命令的同时, 把操作数的指定位取反 mov dx, 10000001b btc dx, 0 PrintHex dl ;80 - 10000000b btc dx, 0 PrintHex dl ;81 - 10000001b ret main endp end main
BSF、BSR: 位扫描指令
;BSF(Bit Scan Forward): 位扫描, 低 -> 高 ;BSR(Bit Scan Reverse): 位扫描, 高 -> 低 ;它们的结果影响 ZF ;扫描的是参数二, 找到是 1 的位后, 把位置数给参数一并置 ZF=0 ;找不到(也就是参数二是 0)时, 置 ZF=1 ;它们的指令格式相同: BSF r16/r32, r16/r32/m16/m32 ; Test23_2.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc ;扫描到时 mov dx, 0000111100001100b bsf cx, dx PrintDec cx ;2 - 也就是左数第 3 位 bsr cx, dx PrintDec cx ;11 - 也就是左数第 12 位 ;扫描不到时 mov cx, 0FFFFh mov dx, 0 bsf cx, dx lahf PrintHex ah ;C6 - 11000110 (ZF=1) PrintHex cx ;FFFF - 找不到时不会影响到目的值 ret main endp end main
相关文章推荐
- Win32 汇编 [23] - 位测试指令: BT、BTC、BTR、BTS
- 学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、BSF、BSR
- BT,BTC,BTR,BTS 指令
- BTS, BTR 指令
- btHashMap vs std::unodered_map ——两种hashmap的性能对比测试
- 单指令的时间测试
- [C++] 测试硬件popcnt(位1计数)指令与各种软件算法,利用模板实现静态多态优化性能
- Android:系统测试指令
- BTC教程(已测试)--GPU铸造比特币 教你用显卡挖矿赚美金
- 在C/C++代码中使用SSE等指令集的指令(5)SSE进行加法运算简单的性能测试
- rdtsc 指令测试 cpu 频率
- 通用 monkey 测试指令
- 高性能Web服务器Nginx的配置与部署研究(6)核心模块之主模块的测试常用指令
- Linux-Test(测试指令)
- Android命令行测试BT,WIFI,Sensor工作状态
- 多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间 Options
- 八卦指令测试
- 性能测试常用的监控指令 topas vmstat iostat
- 大话测试之BT思维 推荐
- 高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用指令