我使用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
任何人都可以给我一些指示......