Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14294
  • 博文数量: 10
  • 博客积分: 275
  • 博客等级: 二等列兵
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-04 16:18
文章分类
文章存档

2011年(10)

我的朋友

分类: 嵌入式

2011-07-07 15:57:35

 
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”号替换

 

三: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

 

阅读(597) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~