汇编语言中的位操作与分支循环
1. 位操作
1.1 位测试与设置
x86 - 64 指令集包含左旋转(rol)和右旋转(ror)指令,可在保存位的同时将位串的特定部分移到合适位置进行测试,反向旋转相应位数后,原始位串会留在寄存器或内存位置。
提取或插入位域需要多条指令,有时只需提取或插入单个位,可使用掩码和移位操作,不过使用位测试指令(bt)以及位测试并设置指令(bts)或位测试并重置指令(btr)更简单快捷。
- bt 指令 :有两个操作数,第一个操作数是内存或寄存器中的 16、32 或 64 位字,包含要测试的位;第二个操作数是位编号,范围从 0 到字大小的位数减 1,可以是立即值或寄存器中的值。bt 指令将进位标志(CF)设置为被测试位的值。
- bts 和 btr 指令 :与 bt 指令类似,都会以相同方式测试当前位,不同的是 bts 将位设置为 1,btr 将位设置为 0。
可以使用这些指令实现一个较大的集合,集合成员是 0 到 n - 1 的整数(n 是全集大小)。成员测试可转化为确定内存中的字和位编号,并测试字中的正确位;插入元素可转化为确定字和位编号并使用 bts 设置正确位;移除元素可转化为使用 btr 清除内存中的正确位。
以下代码假设集合的内存位于名为 data 的内存位置,要操作的位编号在寄存器 rax 中,代码会保存 rax 并执行测试、插入和移除操作:
mov rbx, rax
shr rbx,
超级会员免费看
订阅专栏 解锁全文
3152

被折叠的 条评论
为什么被折叠?



