我是靠谱客的博主 会撒娇豌豆,最近开发中收集的这篇文章主要介绍学 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

最后

以上就是会撒娇豌豆为你收集整理的学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、BSF、BSR的全部内容,希望文章能够帮你解决学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、BSF、BSR所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部