我使用 arm-linux-as 来组装一些 arm 指令以获取如下机器代码:
// arm.txt
.code 32
MOV R0, SP
// command line
E:\armgen>arm-linux-as -ahlm -k -mthumb-interwork -march=armv7-a c:\arm.txt
ARM GAS c:\arm.txt page 1
1 .code 32
2 0000 0D00A0E1 MOV R0, SP
对于 B,BL,BLX ...,我可以这样写:
//arm.txt
.code 16
BLX .sub_xxx
.code 32
ADD R0, PC
ADD R0, PC
.sub_xxx: ADD R0, PC
// command line
E:\armgen>arm-linux-as -ahlm -k -mthumb-interwork -march=armv7-a c:\arm.txt
ARM GAS c:\arm.txt page 1
1 .code 16
3 0000 00F004E8 BLX .sub_xxx
5
6 .code 32
8 0004 0F0080E0 ADD R0, PC
10 0008 0F0080E0 ADD R0, PC
12 000c 0F0080E0 .sub_xxx: ADD R0, PC
但是,这个工具会自动通过标签计算跳转指令的偏移量,如果我的跳转偏移量很大,我该怎么办?在 src 和 dst 之间填充这么多指令?我未能像这样测试写偏移量:
.code 16
BLX #0xce0
谁能给我一些指导...