将ARM SDT下的汇编码移植到GCC for ARM编译器时,经常要做如下修改:
1、注释行以“@”或“”代替“;” <wbr><br>2、伪操作符替换: <wbr><br>INCLUDE 替换成 .INCLUDE <wbr><br>TCLK2<wbr> EQU<wbr> PB25 替换成<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> .equ<wbr> TCLK2, PB25 <wbr><br>EXPORT 替换成 .global <wbr><br>IMPORT 替换成 .extern <wbr><br>DCD 替换成 .long <wbr><br>IF :DEF: 替换成<wbr> .IFDEF <wbr><br>ELSE 替换成 .ELSE <wbr><br>ENDIF 替换成 .ENDIF <wbr><br>:OR: 替换成 | <wbr><br>:SHL: 替换成 << <wbr><br><br>END<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 替换成<wbr><wbr><wbr><wbr><wbr> .end <wbr><br>符号定义加":"号 <wbr><br><br>AREA Word, CODE, READONLY --> .text <wbr><br>AREA Block, DATA, READWRITE --> .data <wbr><br>CODE32 --> .arm <wbr><br>CODE16 --> .thumb <wbr><br>LTORG --> .ltorg <wbr><br>% --> .fill <wbr><br><br>3、操作数及运算符号替换 <wbr><br>ldr pc, [pc, #&18]<wbr> 替换成<wbr><wbr> ldr<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
第二部分
如:get option.a => .include "option.a"
TCLK2 EQU PB25 => .equ TCLK2, PB25
SETA ==> .equ
SETL ==> .equ
IMPORT => .extern
GBLL => .global
GBLA => .global
ELSE => .ELSE
ENDIF => .ENDIF
:OR: => |
:SHL: => <<
NOTE:在被include的头文件中,如"option.a"中,不再需要.end,否则会导致主汇编程序结束。
Entry => Entry:
AREA Word, CODE, READONLY ==> .text
AREA Block, DATA, READWRITE ==> .data
CODE32 ==> .arm
CODE16 ==> .thumb
MEND ==> .endm