binutils(arm-linux-as)是否能够用b,bl,blx指定imm偏移量?

时间:2013-07-11 14:47:01

标签: assembly arm

我使用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

任何人都可以给我一些指示......

0 个答案:

没有答案