从0学ARM:MDK和GNU伪指令区别

一口Linux
关注

ARM邪猎文章,请点击以下汇总链接:

《从0学arm合集》

一、MDK和GNU伪指令区别

我们在学习汇编代码的时候经过会看到以下两种风格的代码:

gnu代码开头是:

.global _start
_start:      @汇编入口
ldr sp,=0x41000000
.end         @汇编程序结束

MDK代码开头是:

AREA Example,CODE,READONLY    ;声明代码段Example
ENTRY ;程序入口
Start            
MOV R0,#0    
OVER
END

这两种风格的代码是要使用不同的编译器,我们之前的实例代码都是MDK风格的。

那么多对于我们初学者来说要学习哪种风格呢?答案是肯定的,学习GNU风格的汇编代码,因为做Linux驱动开发必须掌握的linux内核、uboot,而这两个软件就是GNU风格的。

为了大家不要把过多精力浪费在暂时没用的知识上,下面我们只讲GNU风格汇编。

二、GNU汇编书写格式:1. 代码行中的注释符号:

‘@’ 整行注释符号:‘#’ 语句分离符号:
直接操作数前缀: ‘#’ 或 ‘$’

2. 全局标号:

标号只能由a~z,A~Z,0~9,“.”,_等(由点、字母、数字、下划线等组成,除局部标号外,不能以数字开头)字符组成,标号的后面加“:”。

段内标号的地址值在汇编时确定;
段外标号的地址值在连接时确定。
3. 局部标号:

局部标号主要在局部范围内使用而且局部标号可以重复出现。它由两部组成开头是一个0-99直接的数字局部标号 后面加“:”

F:指示编译器只向前搜索,代码行数增加的方向 / 代码的下一句
B:指示编译器只向后搜索,代码行数减小的方向

注意局部标号的跳转,就近原则「举例:」

文件位置
arch/arm/kernel/entry-armv.S

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存