`
zzc1684
  • 浏览: 1224525 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

学 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/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
分享到:
评论

相关推荐

    Intel 汇编指令集

    - **BTC - Bit Test with Compliment (386+)**: 位测试并取反指令。 - **BTR - Bit Test with Reset (386+)**: 位测试并清零指令。 - **BTS - Bit Test and Set (386+)**: 位测试并设置指令。 - **CALL - Procedure ...

    INTEL 汇编指令集

    - **BSR - Bit Scan Reverse (386+)**:向后位扫描指令,用于查找最后一个设置的位。 - **BSWAP - Byte Swap (486+)**:字节交换指令,用于反转数据的字节顺序。 - **BT - Bit Test (386+)**:位测试指令,用于测试...

    Intel x86 指令详解(英文).txt

    - **BTC - 位测试并取反**:测试并取反指定位置的比特位。 - **BTR - 位测试并清零**:测试并清零指定位置的比特位。 - **BTS - 位测试并置1**:测试并置1指定位置的比特位。 - **CALL - 过程调用**:调用一个过程或...

    基于Keil 5编写汇编程序,实现进行stm32F103的点灯实验

    - **位操作指令**:包括位测试指令 BT、位测试并置位指令 BTS、位测试并复位指令 BTR、位测试并取反指令 BTC、位向前扫描指令 BSF、位向后扫描指令 BSR 等。 - **控制转移指令**:包括无条件转移指令 JMP、条件转移...

    英特尔汇编指令集.doc

    - `BT`,`BTC`,`BTR`,`BTS`:位测试和操作。 - `CALL`:过程调用。 - `CBW`:字节到字的转换。 - `CDQ`:双字到四字的转换(386+)。 - `CLC`:清除进位标志。 - `CLD`:清除方向标志。 - `CLI`:清除中断标志...

    intel 汇编指令集

    - **BTC—位测试并取反**(386+):测试指定位并将其取反。 - **BTR—位测试并清零**(386+):测试指定位并将其清零。 - **BTS—位测试并置1**(386+):测试指定位并将其置1。 - **CALL—过程调用**:跳转到指定...

    8086~80486_InstructionSet ;8086到80486指令集(英文版)

    10. **BSF - Bit Scan Forward (386+)**:向前位扫描指令,用于查找最低位设置为1的位置。 11. **BSR - Bit Scan Reverse (386+)**:向后位扫描指令,用于查找最高位设置为1的位置。 12. **BSWAP - Byte Swap (486+)...

    支持AT&T汇编语法高亮

    "支持AT&T汇编语法高亮" 在Source Insight中,支持AT&T汇编语法高亮是指在编辑器中添加AT&T汇编语言的语法高亮功能。这使得开发者在编写AT&T汇编代码时能够更方便地编写和阅读代码。 首先,需要添加新的语言。在...

    The Art of Assembly Language Programming

    RCR 6.6.3.3 - ROL 6.6.3.4 - ROR 6.6.4 - The Bit Operations 6.6.4.1 - TEST 6.6.4.2 - The Bit Test Instructions: BT, BTS, BTR, and BTC 6.6.4.3 - Bit Scanning: BSF and BSR 6.6.5 - ...

    Microsoft Library MSDN4DOS.zip

    BTC Bit Test and Complement BTR Bit Test and Reset BTS Bit Test and Set CALL Call Procedure CBW/CWDE Convert Byte to Word/Convert Word to Doubleword CLC Clear Carry Flag CLD Clear Direction Flag CLI ...

Global site tag (gtag.js) - Google Analytics