假设AX包含0到15之间的数字。现在" AXth"必须补充BX中的位
例如,AX包含值6
,那么BX中的第6位应该被补充。
我怎样才能做到这一点?
答案 0 :(得分:0)
你没有说过想要支持30年前的硬件,所以我假设现代的x86,即使你是出于某种奇怪的原因在16位模式下进行编程。
btc bx, ax # bt / bts / btr / btc were new with 80386
它将bx & (1<<ax)
的原始值存储到进位标志中,因此助记符:位测试和补充。
该指令对于内存操作数来说很慢,但btc reg, reg
和btc 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
会更快。