我是靠谱客的博主 会撒娇豌豆,这篇文章主要介绍学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、BSF、BSR,现在分享给大家,希望可以做个参考。

BT、BTS、BTR、BTC: 位测试指令


复制代码
1
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
;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: 位扫描指令


复制代码
1
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
;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、BSF、BSR的全部内容,更多相关内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部