arm指令备注

ARM 206浏览

arm指令备注

因为arm指令和thumb指令是2字节或者4字节对齐的,一般是16位的thumb指令和32位的arm指令。

如何区别arm指令和thumb指令?

/* 使用Arm指令集的情况 */  
if (addr % 4 == 0) {  
    ......  
}   
/* 使用Thumb指令集的情况 */  
else {  
    ......  
}  
这是因为Arm与Thumb之间的状态切换是通过专用的转移交换指令BX来实现。BX指令以通用寄存器(R0~R15)为操作数,
通过拷贝Rn到PC实现绝对跳转。BX利用Rn寄存器中目的地址值的最后一位判断跳转后的状态,如果为“1”表示跳转到Thumb指令集的函数中,如果为“0”表示跳转到Arm指令集的函数中。而Arm指令集的每条指令是32位,即4个字节,也就是说Arm指令的地址肯定是4的倍数,最后两位必定为“00”。
所以,直接就可以将从符号表中获得的调用地址模4,看是否为0来判断要修改的函数是用Arm指令集还是Thumb指令集。