嵌入式开发的GNU汇编语法简介

GNU 汇编语法适用于所有的架构,并不是 ARM 独享的,GNU 汇编由一系列的语句组成,每行一条语句,每条语句有三个可选部分,如下:label:instruc

大家好,今天来为大家分享嵌入式开发的GNU汇编语法简介的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

指令是一条指令,它是汇编指令或伪指令。

@符号表示后面是注释,就像C语言中的“/*”和“*/”一样。事实上,我们还可以在GNU汇编文件中使用“/*”和“*/”来注释。

comment是评论内容。例如,以下代码:

add:MOVS R0, #0X12 @SET R0=0X12 上面的代码中,“add:”是标签,“MOVS R0,#0X12”是指令,最后一个“@SET R0=0X12”是注释。

注意! ARM中的指令、伪指令、伪操作、寄存器名等可以全部大写或小写,但大小写不能混合。

用户可以使用.section伪操作来定义一个节。汇编系统预定义了一些节名称:

.text 代表一个代码段。

嵌入式开发的GNU汇编语法简介

.data 初始化数据段。

.bss 未初始化的数据部分。

.rodata 只读数据部分。

当然我们可以使用.section来自己定义一个section。每个部分都以部分名称开头,并以以下部分名称或文件末尾结束,例如:

.section .testsection @定义一个testetcion 部分

汇编器的默认入口标签是_start,但我们也可以在链接描述文件中使用ENTRY来指示其他入口点。以下代码使用_start作为入口标签:

.global _start _start: ldr r0,=0x12 @r0=0x12 上面代码中,global是一个伪操作,表示_start是一个全局标号,类似于C语言中的全局变量。常见的伪操作有:

嵌入式开发的GNU汇编语法简介

.byte 定义单字节数据,例如.byte0x12。

.short 定义双字节数据,例如.byte0x1234。

.long 定义了4 字节数据,例如.long0x12345678。

.equ赋值语句,格式为:equ变量名,表达式,如.equ num,0x12,表示num=0x12。

.align 数据字节对齐,例如:align 4 表示4字节对齐。

.end 表示源文件的结尾。

.global 定义全局符号,格式为:global 符号,如:global _start。

嵌入式开发的GNU汇编语法简介

GNU 汇编中还有其他伪操作,但最常见的是上述几种。如果想详细了解所有伪操作,可以参考《ARM Cortex-A(armV7)编程手册V4.0.pdf》的第57页。

GNU 汇编也支持函数。函数格式如下:

函数名称:

函数体

返回声明

GNU 汇编函数返回语句不是必需的。以下代码是用汇编语言编写的Cortex-A7中断服务函数:

/* 未定义中断*/Undefined_Handler:ldr r0,=Undefined_Handlerbx r0/* SVC 中断*/SVC_Handler:ldr r0,=SVC_Handlerbx r0/* 预取终止中断*/PrefAbort_Handler:ldr r0,=PrefAbort_Handlerbx r0 上述代码中定义了三个汇编函数: Undefined_Handler 、 SVC_Handler和PrefAbort_Handler。以函数Undefined_Handler为例,我们看一下汇编函数组成。 “Undefined_Handler”为函数名,“ldr r0,=Undefine_Handler”为函数体,“bx r0”为函数返回语句,“bx”指令为返回指令。函数返回语句不是必需的。

用户评论

嵌入式开发的GNU汇编语法简介
惦着脚尖摘太阳

这篇博文讲解 GNU 汇编语法很详细啊,上手难度感觉可以接受。正好我最近在学习嵌入式开发,之前一直对汇编语言感到畏惧,现在看到这个帖子有了不少信心!

    有19位网友表示赞同!

嵌入式开发的GNU汇编语法简介
ヅ她的身影若隐若现

Embedded Deveopment 是个很有潜力的领域!学习了GNU 汇编语法之后,可以更深入地理解硬件工作方式。感觉学起来还是挺费劲的,需要时间慢慢积累经验。

    有17位网友表示赞同!

嵌入式开发的GNU汇编语法简介
花花世界总是那么虚伪﹌

看了这篇文章后,终于明白 GNU 汇编语法为什么是这么复杂了…… 我才刚接触嵌入式开发,希望能早日掌握这些知识点!

    有16位网友表示赞同!

嵌入式开发的GNU汇编语法简介
命硬

嵌入式开发真是门技术活儿啊!GNU 的汇编语法确实很特别,跟 C 语言的语法差别很大。希望以后有机会多学习一下。

    有10位网友表示赞同!

嵌入式开发的GNU汇编语法简介
日久见人心

感觉这篇博文太基础了,对有一定编程经验的人来说可能没什么帮助?不过初学者应该可以参考看看!

    有11位网友表示赞同!

嵌入式开发的GNU汇编语法简介
微信名字

我建议作者可以把各个指令的举例更加具体化,这样更容易理解。例如,可以用真实芯片操作的例子来解释每个指令的功能和作用,这样更直观易懂。

    有20位网友表示赞同!

嵌入式开发的GNU汇编语法简介
身影

还是推荐用 GNU 汇编语法进行嵌入式开发呀!它可以帮助你更直观地了解硬件工作原理,这在调试程序时非常有帮助。

    有7位网友表示赞同!

嵌入式开发的GNU汇编语法简介
情如薄纱

对嵌入式开发的入门者来说,学习GNU 汇编语法就像是一座大山。希望能够坚持学习,早日攻克!

    有6位网友表示赞同!

嵌入式开发的GNU汇编语法简介
打个酱油卖个萌

写得真好!这篇博文不仅讲解了 GNU 汇编语法的基础知识,还举了一些例子,很好的帮助我理解了它们的应用场景。

    有11位网友表示赞同!

嵌入式开发的GNU汇编语法简介
限量版女汉子

很感谢作者分享这篇如此有用的文章! 通过学习GNU 汇编语法,可以更好地理解嵌入式开发,掌握其精髓!

    有13位网友表示赞同!

嵌入式开发的GNU汇编语法简介
无望的后半生

这篇文章让我更加了解 GNU 汇编语法在嵌入式开发中的重要性!我要认真学习一下,提高自己的嵌入式开发能力!

    有7位网友表示赞同!

嵌入式开发的GNU汇编语法简介
念旧是个瘾。

我曾经尝试用其他的汇编语言进行嵌入式开发,但GNU 汇编语法还是比较方便使用和理解的!

    有6位网友表示赞同!

嵌入式开发的GNU汇编语法简介
放血

确实,GNU 汇编语法是嵌入式开发中不可或缺的一环。学习它并不难,只要耐心练习,就能掌握它的真谛!

    有8位网友表示赞同!

嵌入式开发的GNU汇编语法简介
温柔腔

感觉这篇文章有点浅了?希望作者能够更加深入一些,例如讲解如何使用 GNU 汇编来编程调试等内容

    有18位网友表示赞同!

嵌入式开发的GNU汇编语法简介
抚涟i

GNU 的汇编语法确实比较复杂,需要时间积累和练习才能熟练掌握!

    有9位网友表示赞同!

嵌入式开发的GNU汇编语法简介
喜欢梅西

嵌入式开发的未来确实充满潜力!学习 GNU 汇编语法是走向未来的重要一步。

    有19位网友表示赞同!

嵌入式开发的GNU汇编语法简介
恰十年

这篇文章很有帮助!之前一直在考虑学习嵌入式开发,现在看到了这个帖子更加想去尝试了。

    有9位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/111116.html

(0)
小su's avatar小su
上一篇 2024年8月30日 下午5:31
下一篇 2024年8月30日 下午5:38

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注