0

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

谁能给我一些指导...

4

0 回答 0