汇编的bt指令

通过学习bt指令,熟悉gdb的使用,和汇编指令的分析方法。

bt指令从你指定的bit位置,把值拷贝到carry flag。那些flags,和各种跳转的指令有关,所以就实现了「判断-跳转」。跟carry flag有关的指令是各种jump指令:

主要是这几个根据条件跳转的指令,都会根据carry flag的值来判断是否跳转。关于flag寄存器的说明:

撰写测试代码:

上面两行bt指令,一个会设置carry flag,一个会清空carry flag。因为对应的eax寄存器的值分别是10。实际编译和运行代码试试看,设置断点并执行:

接下来的两行bt指令,可以看到carry flag拷贝了所指定的bit的值:

eflags寄存器,里面每一个bit保存一个状态,都是有特殊含义的:

因为cflag是eflags积存器的第一位,所以cf的设置或消除就是加减1。cpu就是拿这些状态做各种各样的条件判断。