arm-Linux汇编语法及它和ADS汇编转换的问题(4)
- UID
- 1029342
- 性别
- 男
|
arm-Linux汇编语法及它和ADS汇编转换的问题(4)
一: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 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-Linux汇编到ADS汇编转换需要注意的问题
最近那些课比较麻烦,好长时间没做ARM了,今天拿出一段nand准备在ADS下搭建调试环境,发现两家的汇编代码有但不兼容,需要修改一下.现在罗列一下我主要修改的地方,其他很多可能没遇到,大家还是自己查一查文档吧。
1 、修改头
如 arm-linux 汇编头:
.text
.global_start
_start:
修改为 ads 版本:
AREA nand1, CODE,READONLY
ENTRY
注意 AREA 和 ENTRY 前面都 有 tab 空格 ,否则编译出错。
2 、修改段标志
去掉 arm-linux 汇编中的 : 号 即可在 ads 中使用。
3 、 ads 需要加上 ENTRY 和 EN D 指令表示程序入口和结束标志
4 、 ADS 中的 C 语言混编
与 arm-linux 汇编不同, ads 下的汇编调用 C 语言的函数时需要指定 IMPORT
切记注意在 IMPORT 前面加 tab 键空格。否则可能出现下面的错误(崩溃啊 ... ):
arm 汇编的条件执行码,这个比较常用,页贴上来供自己参考:
|
|
|
|
|
|