ARM的ADS汇编器和GCC汇编器

一:ads下的一段汇编程序:

__main 
EXPORT BootReset 
BootReset 
               B resetvec_reqset 
               IMPORT  BootEntry 
               IMPORT  |Image$$RO$$Limit|

         AREA  BOOTROM, CODE, READONLY 
              LDR  r0, =|Image$$RO$$Limit| 
              BEQ  %1 
              ldr  pc, [pc,#-&F20]

转换到gcc下的汇编程序为:

__main 
.global BootReset 
BootReset: 
            B resetvec_reqset 
           .extern  BootEntry 
           .extern  Image_RO_Limit 
#  AREA  BOOTROM, CODE, READONLY 
           LDR  r0, =Image_RO_Limit 
           BEQ  FUNC1 
           ldr  pc, [pc,#-0xF20]

二:将ARM SDT下的汇编码移植到GCC for ARM编译器时,经常要做如下修改:
1、注释行以“@”或""代替“;”
2、伪操作符替换:
INCLUDE 替换成 .INCLUDE
TCLK2 EQU PB25 替换成 .equ TCLK2, PB25
EXPORT 替换成 .global
IMPORT 替换成 .extern
DCD 替换成 .long
IF :DEF: 替换成 .IFDEF
ELSE 替换成 .ELSE
ENDIF 替换成 .ENDIF
:OR: 替换成 |
:SHL: 替换成 <<
END 替换成 .end

符号定义后加":"号
AREA Word, CODE, READONLY --> .text
AREA Block, DATA, READWRITE --> .data
CODE32 --> .arm
CODE16 --> .thumb
LTORG --> .ltorg

3、操作数及运算符号替换
ldr pc, [pc, #&18] 替换成 ldr pc, [pc, #+0x18]
“&”以“+0x”号替换

原文地址:https://www.cnblogs.com/nufangrensheng/p/3651233.html