bt汇编指令

时间:2011-09-21 23:54:18

标签: assembly masm masm32

我对bt汇编指令有所了解。我摘录了部分书籍以提供背景信息。请参阅上一个示例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寄存器的第三位,就可以轻松测试位   三个斧头登记。另一方面,如果指数较大   比寄存器操作数的大小,结果是未定义的。

     

如果第一个操作数是内存位置,则bt指令进行测试   内存中给定偏移量的位,无论值是多少   指数。例如,如果bx包含65,那么

  bt  TestMe, bx
     

将位置TestMe + 8的第一位复制到进位中   旗。再一次,操作数的大小无关紧要。对全部   意图和目的,内存操作数是一个字节,你可以测试   具有适当索引的该字节后的任何位。实际位bt   测试是在位位置索引mod 8和内存偏移有效   地址+索引/ 8。

2 个答案:

答案 0 :(得分:6)

当本书说“位置TestMe+8”时,“8”指的是地址偏移量,以字节为单位。 8个字节中有64位,因此第65位是TestMe之后的8个字节中的第1位。

  • TestMe处的字节位为7..0
  • TestMe+1处的字节位为15..8
  • TestMe+2处的字节位为23..16
  • ...
  • TestMe+8处的字节位为71..64

所以“65”指的是地址TestMe+8处字节的“第1位”(第二位从右边开始计数)。

答案 1 :(得分:2)

bt TestMe, bx其中bx包含65是超出TestMe地址的访问8字节(64位加1)。它不会复制那里的字节,只复制该字节中的第二位(进位标志,CF)。