如何将ARM SDT的汇编代码移植到GCC环境中

问题:如何将ARM SDT环境下的汇编代码移植到GCC编译环境中?


回答:将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
--> .fill

3、操作数及运算符号替换
ldr pc, [pc, #&18] 替换成 ldr pc, [pc, # 0x18]
“&”以“ 0x”号替换
 
 

问题:请解释下面的一小段汇编语言程序:
__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]
 
回答:上面是ARM公司编译器支持的汇编语言,移植成gcc支持的汇编语言为:
__main
.global BootReset /* 定义全局符号 BootReset */
BootReset:
B resetvec reqset /* 跳转到resetvec */
.extern BootEntry /* 定义引用的外部符号(函数)*/
.extern Image_RO_Limit /* Image_RO_Limit 为外部符号,一般定义 */
/* 在连接定位文件中, 表示ROM区大小 */
# AREA BOOTROM, CODE, READONLY
LDR r0, =Image_RO_Limit /* 将Image_RO_Limit值存储到R0*/
BEQ FUNC1 /* 如果等于则跳转到符号FUNC1 */
ldr pc, [pc,#-0xF20] /* 将PC-0xF20的值存储到PC */ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值