首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-09-04 
学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、BSF、BSRBT、BTS、BTR、BTC: 位测试指令BT(Bit Tes

学 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

热点排行