学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、BSF、BSR


BT、BTS、BTR、BTC: 位测试指令
;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/m32BT r16/r32/m16/m32, i8; Test23_1.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain 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    retmain endpend 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, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain 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 - 找不到时不会影响到目的值    retmain endpend main

posted on 2010-04-15 11:19 万一 阅读(7349) 评论(1) 编辑 收藏©著作权归作者所有:来自51CTO博客作者JLee79的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 学 Win32 汇编[22] - 逻辑运算指令: AND、OR、XOR、NOT、TEST
  2. 学 Win32 汇编[21] - 传送指令: MOV、LEA、XCHG、XLATB、XLAT、M
  3. 学 Win32 汇编[20]: 洞察标志寄存器
  4. jQuery中的$.ajax方法,以及基本的vue指令操作
  5. SSM整合步骤
  6. 深入理解计算机系统(4.1)------Y86指令集体系结构
  7. 冷月手撕408之操作系统(4)-操作系统的运行环境
  8. 0415作业-Vue常用指令及方法
  9. spring-data详解之spring-data-jpa:简单三步快速上手spring-data-

随机推荐

  1. gRPC请求中对header进行处理
  2. Android 音频系统:从 AudioTrack 到 Audio
  3. Android开发:使用Fragment改造TabActivity
  4. Android(安卓)新建文件夹、生成文件并向
  5. android POST请求
  6. 解读新一代岗位要求(一) ----------------A
  7. React-Native之android集成支付宝
  8. Android获取屏幕实际高度跟显示高度,判断A
  9. android_camera_002
  10. 选择Android还是IOS开发?