【发布时间】:2011-11-22 09:50:58
【问题描述】:
我对@987654321@ 汇编指令有疑问。我摘录了本书的一部分以提供上下文。请参阅最后一个示例,bt Testme, bx。为什么要复制TestMe+8?不应该是复制TestMe+65吗?
非常感谢您的帮助!
6.6.4.2 比特测试说明:BT、BTS、BTR、BTC
在 80386 或更高版本的处理器上,您可以使用 bt 指令(位 测试)来测试一个位。它的第二个操作数指定位索引 进入第一个操作数。 Bt 将寻址位复制到进位 旗帜。比如指令
bt ax, 12将 ax 的第 12 位复制到进位标志中。
bt/bts/btr/btc 指令只处理 16 或 32 位操作数。 这不是指令的限制。毕竟,如果你想 测试 al 寄存器的位 3,你可以很容易地测试位 三个斧头寄存器。另一方面,如果索引较大 大于寄存器操作数的大小,则结果未定义。
如果第一个操作数是内存位置,bt 指令测试 内存中给定偏移处的位,无论 指数。例如,如果 bx 包含 65 则
bt TestMe, bx将位置 TestMe+8 的第 1 位复制到进位 旗帜。再一次,操作数的大小无关紧要。对所有人 意图和目的,内存操作数是一个字节,你可以测试 该字节之后的任何位具有适当的索引。实际位 bt 测试在位位置索引 mod 8 和内存偏移有效 地址+索引/8。
【问题讨论】: