arm指令備注

ARM 214瀏覽

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指令集。

七星彩走势图2元网官网