arm gnu汇编宏定义.macro .endm

阅读数:405 评论数:0

跳转到新版页面

分类

硬件/嵌入式

正文

一、概述

1、目前常用的arm汇编环境有以下两种:

(1)arm asm: arm公司的汇编器,适合于windows平台下使用。

(2)gnu arm asm:gnu交叉编译工具链中的汇编器,适合于linux开发平台。

2、交叉编译工具链

对于嵌入式开发来说,因为我们运行代码的平台并不是电脑,而是其他架构的SoC,比如ARM架构的芯片。但是我们开发过程却是在电脑上开发,所以我们需要的事交叉编译工具链。

这些工具都有前缀字段,他们有通用的命名规则:arch - vendor - os - abi ,其中:

arch 表示目标平台的CPU架构,比ARM架构
vendor 这个单词指的是供应商。一般这个字段可以标识工具链由那个芯片厂商制作的,或者这个工具链可以编译哪个厂商的CPU。这个字段基本都是不写、或者写为none,这样就表示可以适用ARM架构的所有CPU。
os 这个字段表示目标平台运行的操作系统。常见的会写linux、none。一般来说none的工具链都是用于编译裸机程序的。写linux则编译的程序是运行与linux系统上,当然这个字段就算写着linux,也是可以编译裸机程序的。
abi  就是Application Binary Interface(应用程序二进制接口)英文的缩写。这个字段常见的有:abi、eabi、gnu、gnueabi、uclibc等等。其中gnu是指使用glic库,eabi是指Embedded Application Binary Interface(即嵌入式应用程序二进制接口)。

二、gnu风格arm汇编语法

1、宏定义

.macro定义一段宏代码,.macro表示代码的开始,.endm表示代码的结束。

.macro   宏名称   参数(多个之间用“,”隔开,也可以不带参数)

 宏的实体部分

.endm

如果宏使用参数,那么在宏体中使用该参数时添加前缀"\",使用.exitm伪指令来退出宏。

.macro SHIFTLEFT a, b

.if \b < 0

MOV \a, \a, ASR #-\b

.exitm

.endif

MOV \a, \a, LSL #\b

.endm

2、定义入口

汇编程序的缺省入口是_start标号,用户也可以在连接脚本文件中用ENTRY标志指明其它入口点

.section .data

         < initialized data here>

.section .bss

         < uninitialized data here>

.section .text

.globl  _start

_start:

         <instruction code goes here>

 

 

 




相关推荐

作用是把pc寄存器和立即数按照一定的规则计算后赋值给寄存器。 &nbsp;

Move to Register from Status Register 用于将程序状态寄存器内容传输到通用寄存器。 &nbsp;

一、AREA 1、语法 AREA 段名&nbsp; 属性1,属性2,...... AREA伪指令用于定义一个代码段或数据段。若段名以数字开头,则该段

stp指令是str的变种指令,p可以理解成pair的意思,可以同时操作两个寄存器。 例如 stp x2

一、armv8概述 ARM架构版本号从1-8,ARMv8架构支持以下两种执行状态: 1、aarch64 (1)提供31个64位通用寄存器(其中x30被用来做链接寄存器LR(函数返回地址)),一个64位

一、概述 1、LSL=Logic Shift Left 2、LSR=Logic Shift Right 3、ASL=Arithmatic Shift

一、概述 Condition execution是根据运行结果更新Conidtion flags,来判断Condition code是否可以执行。 通过给汇编指令

全称Prefetch from memory。 1、PLD = prefetch for load 2、PST = prefetch for store 3、L1表示一级缓存,L2表示二级存,L3表示

Vector Base Address Register,在开启MMU的系统,vbar中写入的是虚拟地址。 armv8定义了vbarel1、vbarel2、vbarel3三个基址寄存器。 当中断产生

当访问零寄存器时,所有写操作都被忽略,所有读操作返回0。因为操作寄存器的速度是最快的,这个寄存的作用是提供0这个值,避免操作内存。 零寄存器当用作源寄存器时读操作的结果为零,当用作目标寄存器时则将结果