2011年(10)
分类: 嵌入式
2011-07-07 15:57:35
__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”号替换
三:ARM GCC汇编中常量编译控制
编译定义符 |
说 明 |
语 法 |
例 子 |
.byte |
字节定义 expr(8bit数值) |
.byte expr {, …} |
.byte 25, 0x11, 031, 'A |
.hword |
半字定义expr (16bit数值) |
.hword expr {, …} |
.hword 2, 0xFFE0 |
.short |
作用同.hword |
.short expr {, …} |
.short 257 |
.word |
字长定义expr (32bit数值) |
.word expr {, …} |
.word 144511, 0x11223 |
.int |
作用同.word |
.int expr {, …} |
.int 21 |
.long |
作用同.word |
.long expr {, …} |
.long 1923, 0b10010101 |
.ascii |
定义字符串expr(非零结束符) |
.ascii expr {, …} |
.ascii "Ascii text is here" |
.asciz |
定义字符串expr(以0为结束符) |
.asciz expr {, …} |
.asciz "Zero Terminated Text" |
.string |
作用同 .asciz |
.string expr {, …} |
.string "My Cool String\n" |
.quad |
定义一个大的数expr (向上分成8bit的数存放) |
.quad expr {, …} |
.quad 0xDAFADAFA911 |
.octa |
定义一个大的数expr(向上分成16bit的数存放) |
.octa expr {, …} |
.octa 0xFEDCBA987654321 |
.float |
定义一个32bit IEEE 浮点数expr |
.float expr {, …} |
.float 0f3.14, 0f359.2e11 |
.single |
作用同.float |
.single expr {, …} |
.single 0f12341243.14E2 |
.double |
定义64bit IEEE浮点数expr(浮点数) |
.double expr {, …} |
.double 0f2E1 |
.fill
|
用size长度value填充repeat次。size缺省为1, value缺省为 0. |
.fill repeat {, size} {, value} |
.fill 32, 4, 0xFFFFFFFF
|