补充ith位

时间:2015-09-20 15:23:03

标签: assembly x86 bit-manipulation x86-16

假设AX包含0到15之间的数字。现在" AXth"必须补充BX中的位 例如,AX包含值6,那么BX中的第6位应该被补充。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

你没有说过想要支持30年前的硬件,所以我假设现代的x86,即使你是出于某种奇怪的原因在16位模式下进行编程。

btc  bx, ax    # bt / bts / btr / btc were new with 80386

它将bx & (1<<ax)的原始值存储到进位标志中,因此助记符:位测试和补充。

该指令对于内存操作数来说很慢,但btc reg, regbtc reg, imm8形式的单周期延迟和每时钟2个吞吐量。 (英特尔Sandybridge家族)。

内存操作数形式类似于bt insn,具有疯狂的CISC语义,将内存视为从给定地址开始的位串。因此,不仅仅在给定地址处测试8/16 / 32bit值,高位位置实际上会影响不同字节中的位。为了解决这个古怪的需求,最近的英特尔设计从微码解码bt/btc mem, r到10微秒,吞吐量为每5个时钟一个。 bt/r/s/c m,i解码为3 uops(或2,只读取bt),因此测试位域中的已知位置并不可怕。如果位位置可变,则以2个步骤加载寄存器bt会更快。