(转)ARM GNU常用汇编语言介绍
ARM GNU常用汇编语言介绍
原文地址:http://zqwt.012.blog.163.com/blog/static/120446842010445441611/
ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令组成.ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令。
伪操作,是ARM汇编语言程序里的一些特殊的指令助记符,其作用主要是为完成汇编程序做各种准备工作,在源程序运行汇编程序时处理,而在计算机运行期间没有有机器执行.也就是说,这些伪操作只是汇编过程中起作用,一旦汇编结束,伪操作的使命也就随之消失.
宏指令,是一段独立的程序代码,可以插在程序中,它通过伪操作来定义。
宏在被使用之前必须提前定义好,宏之间可以互相调用,也可自己递归调用。
通过直接书写宏名来使用宏.并本具宏指令的格式输入输出参数.
宏定义本身不产生代码,只是在调用它时把宏体插入到原程序中.
宏与C语言中的子函数形参和实参的调用相似,调用宏时通过实际的指令来代替宏体,实现相关的一段代码,但宏的调用与子程序的调用有本质的区别,即宏并不会节省程序的空间,其优点是简化程序代码,提高程序的可读性以及宏内容可以同步改.
伪操作,宏指令一般与编译程序有关,因此ARM汇编语言的伪操作,宏指令在不同的编译环境下有不同的编写形式和规则.
伪指令也是ARM汇编语言程序里的特殊助记符,也不在处理器运行期间由机器执行,他们在汇编时将被合适的机器指令代替成ARM或Thumb指令,从而实现真正的指令操作.
目前常用的ARM编译环境有2种:
ADS/SDT IDE:ARM公司开发,使用了CodeWarrior公司的编译器.
集成了GNU开发工具的IDE开发环境;它由GNU的汇编器as,交叉汇编器gcc和连接器id组成.
ADS编译环境下的ARM伪操作和宏指令,可参考北航出版社的《ARM微控制器基础与实践》(周立功)这里主要讲述ARM GNU常用汇编语言。
4.1 ARM GNU常用汇编伪指令介绍
1. abort
abort: 停止汇编
.align absexpr1,absexpr2:
以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16或32. 第二个表达式值表示填充的值.
2. if...else...endif
.if
.else
.endif: 支持条件预编译
3. include
.include "file": 包含指定的头文件, 可以把一个汇编常量定义放在头文件中.
4. comm
.comm symbol, length:在bss段申请一段命名空间,该段空间的名称叫symbol, 长度为length. Ld连接器在连接会为它留出空间.
5. data
.data subsection: 说明接下来的定义归属于subsection数据段.
6. equ
.equ symbol, expression: 把某一个符号(symbol)定义成某一个值(expression).该指令并不分配空间.
7. global
.global symbol: 定义一个全局符号, 通常是为ld使用.
8. ascii
.ascii "string": 定义一个字符串并为之分配空间.
9. byte
.byte expressions: 定义一个字节, 并为之分配空间.
10. short
.short expressions: 定义一个短整型, 并为之分配空间.
11. int
.int expressions: 定义一个整型,并为之分配空间.
12 long
.long expressions: 定义一个长整型, 并为之分配空间.
13 word
.word expressions: 定义一个字,并为之分配空间, 4bytes.
14. macro/endm
.macro: 定义一段宏代码, .macro表示代码的开始, .endm表示代码的结束.
15. req
name .req register name: 为寄存器定义一个别名.
16. code
.code [16|32]: 指定指令代码产生的长度, 16表示Thumb指令, 32表示ARM指令.
17. ltorg
.ltorg: 表示当前往下的定义在归于当前段,并为之分配空间.
4.2 ARM GNU专有符号
1. @
表示注释从当前位置到行尾的字符.
2. #
注释掉一整行.
3. ;
新行分隔符.
4.3 操作码
1. NOP
nop
空操作, 相当于MOV r0, r0
2. LDR
ldr <register> , = <expression>
相当于PC寄存器或其它寄存器的长转移.
3.ADR
adr <register> <label>
相于PC寄存器或其它寄存器的小范围转移.
4.ADRL
adrl <register> <label>
相于PC寄存器或其寄存器的中范围转移.
5 可执行生成说明
5.1 lds文件说明
5.1.1 主要符号说明
1. OUTPUT_FORMAT(bfdname)
指定输出可执行文件格式.
2. OUTPUT_ARCH(bfdname)
指定输出可执行文件所运行CPU平台
3. ENTRY(symbol)
指定可执行文件的入口段
5.1.2 段定义说明
1. 段定义格式
SECTIONS
{ ...
段名 :
{
内容
}
...
}
(转)ARM GNU常用汇编语言介绍的更多相关文章
- ARM GNU常用汇编语言介绍
ARM GNU常用汇编语言介绍 ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令组成. ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令. 伪操作,是ARM汇编语言程序里的一些特殊 ...
- ARM GNU 常用汇编伪指令介绍
abort .abort: 停止汇编 .align absexpr1, absexpr2: 以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16 或 32. 第 二个表 ...
- 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍
C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...
- Linux操作系统的文件查找工具locate和find命令常用参数介绍
Linux操作系统的文件查找工具locate和find命令常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.非实时查找(数据库查找)locate工具 locate命 ...
- python基础31[常用模块介绍]
python基础31[常用模块介绍] python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的li ...
- html常用标签介绍
常用标签介绍 文本 最常用的标签可能是<font>了,它用于改变字体,字号,文字颜色. 点击查看效果 <font size="6">6</font&g ...
- SharePoint常用目录介绍
SharePoint常用目录介绍 stsadm命令管理程序目录:C:\Program Files\Common Files\Microsoft Shared\web server extensions ...
- Redis常用数据类型介绍、使用场景及其操作命令
Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...
- Notepad++前端开发常用插件介绍 - BorisHuai前端修炼 - 博客频道 - CSDN
Notepad++前端开发常用插件介绍 - BorisHuai前端修炼 - 博客频道 - CSDN.NET http://blog.csdn.net/borishuai/article/details ...
随机推荐
- 发现个很有意思的angularjs +grunt 复习项目
最近作运维工作 docker 接触到一个开源webui dockerui 原项目地址 https://github.com/crosbymichael/dockerui 用angular框架实现,项目 ...
- python3下应用pymysql(第三卷)(数据自增-用于爬虫)
在上卷中我说出两种方法进行数据去重自增,第一种就是在数据库的字段中设置唯一字段,二是在脚本语言中设置重复判断再添加(建议,二者同时使用,真正开发中就会用到) 话不多说先上代码 第一步: 确定那一字段的 ...
- python2下经典爬虫(第一卷)
python2.7的爬虫个人认为比较经典在此我将会用书中的网站http://example.webscraping.com作为案例 爬虫第一步:进行背景调研 了解网站的结构资源在网站的robots.t ...
- WEB前端资源集(二)
在上一篇为大家整理出了一些资源网站,接下来给大家整理了一些开发中常用的工具. 开发工具篇 开发工具集 Sublime Text 3:SublimeText 3是一个代码编辑器,也是HTML和散文先进的 ...
- 用ES6和fetch封装网络请求
导读: fetch: 这个方法是ES2017中新增的特性,这个特性出来后给人一种传统ajax已死的感觉,其实它的作用是替代浏览器原生的XMLHttpRequest异步请求,我们在日常的开发中,基本不会 ...
- Pytorch随机种子
最近在做比赛的时候,遇到了一个最好结果,但是之后无论怎样都复现不出来最好结果了.猜测是不是跟Pytorch中的随机种子有关. 训练过程 在训练过程中,若相同的数据数据集,相同的训练集.测试集划分方式, ...
- 机器CPU load过高问题排查
load average的概念 系统平均负载定义:在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数.如果一个进程满足以下条件则其就会位于运行队列中: 它没有在等待I/O操作 ...
- 《N诺机试指南》(八)日期、字符串、排序问题
1.日期问题: 输入: 例题: 代码: #include <stdio.h> #include <bits/stdc++.h> struct node{ int year, m ...
- 强大的java工作流引擎,可视化开发工作流
我们先来看看什么是工作流? 所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色.分工和条件的不同决定信息传递路由.内容等级等核心解决方案.工作流引擎包括 ...
- Web环境从Apache转Nginx后页面报404错误
问题原因: Apache支持伪静态规则在项目的入口目录有个.htaccess文件,Apache默认识别此文件内容, 但是Nginx不识别.htaccess文件,导致伪静态规则失效,从而无法解析url地 ...