首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM的ADS汇编器与GCC汇编器

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 forARM编译器时,经常要做如下修改:
1、注释行以“@”或""代替“;”
2、伪操作符替换:
INCLUDE 替换成 .INCLUDE
TCLK2 EQU PB25 替换成 .equ TCLK2, PB25
EXPORT 替换成 .global
IMPORT 替换成 .extern
DCD 替换成 .long
IF EF: 替换成 .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

继承事业,薪火相传
返回列表