tin*_*yaa 6 x86 assembly masm masm32
我对bt
汇编指令有所了解.我摘录了部分书籍以提供背景信息.请看最后一个例子bt Testme, bx
.为什么复制TestMe+8
?不应该复制TestMe+65
?
非常感谢你的帮助!
6.6.4.2位测试指令:BT,BTS,BTR和BTC
在80386或更高版本的处理器上,您可以使用bt指令(位测试)来测试单个位.它的第二个操作数指定第一个操作数的位索引.Bt将寻址的位复制到进位标志中.例如,指令
Run Code Online (Sandbox Code Playgroud)bt ax, 12
将第12位斧头复制到进位标志中.
bt/bts/btr/btc指令仅处理16或32位操作数.这不是指令的限制.毕竟,如果你想测试al寄存器的第三位,你可以很容易地测试ax寄存器的第三位.另一方面,如果索引大于寄存器操作数的大小,则结果是未定义的.
如果第一操作数是存储位置,在BT测试指令在索引的给定的存储器偏移量,而不管值的比特.例如,如果bx包含65则
Run Code Online (Sandbox Code Playgroud)bt TestMe, bx
将位置TestMe + 8中的第一位复制到进位标志中.再一次,操作数的大小无关紧要.对于所有意图和目的,内存操作数是一个字节,您可以使用适当的索引测试该字节后的任何位.实际的位bt测试是位位置索引mod 8和存储器偏移有效地址+ index/8.
当书中写着"位置之一TestMe+8
"时," 8
"指的是地址偏移量,以字节为单位.8个字节有64位,因此第65位是过去8个字节的第1位TestMe
.
TestMe
位为7..0TestMe+1
位15..8TestMe+2
位有23..16位TestMe+8
位71..64所以"65"指的是地址字节的"第1位"(第二次从右边开始计数)TestMe+8
.
归档时间: |
|
查看次数: |
7281 次 |
最近记录: |