`

嵌入式Linux(三)---常用ARM汇编指令

 
阅读更多

在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初始化,进出中断时的环境保护,恢复等对性能有要求的地方。

ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。
ARM指令使用的基本格式如下:
opcode{cond}{S}Rd〉,〈Rn{,〈operand2}
opcode操作码;指令助记符,如LDRSTR等。
cond可选的条件码;执行条件,如EQNE等。
S可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的条件码。
Rd目标寄存器。
Rn存放第1操作数的寄存器。
operand22个操作数

arm的寻址方式如下:
立即寻址
寄存器寻址
寄存器间接寻址
基址加偏址寻址
堆栈寻址
块拷贝寻址
相对寻址
这里不作详细描述,可以查阅相关文档。

数据处理指令
Load/Store指令
程序状态寄存器与通用寄存器之间的传送指令
转移指令
异常中断指令
协处理器指令


S3C2410S3C2440的数据手册中对各种汇编指令有详细的描述;这里只对较常见的作写介绍。
1、相对跳转指令:bbl
这两条指令的不同之处在于bl指令除了跳转之外,还将返回地址(bl的下一条指令的地址)保存在lr寄存器中。
这两条指令的可跳转范围是当前指令前后32M

bfuna
....
funa:
bfunb
....
funb:
....


2、数据传送指令mov,地址读取伪指令ldr
mov指令可以把一个寄存器的值赋给另外一个寄存器,或者把一个常数赋给寄存器。
movr1,r2
/*上面是r1=r2*/
movr1,#1024
/*r1=1024*/

mov传送的常数必须能用立即数来表示。当不能用立即数表示时,可以用ldr命令来赋值。
ldr是伪命令,不是真实存在的指令,编译器会把它扩展成真正的指令;如果该常数能用立即数来表示,则使用mov指令,否则编译时将该常数保存在某个位置,使用内存读取指令把它读出来。
ldrr1,=1024
/*r1=1024*/


3、内存访问指令ldrstrldmstm
ldr既可以指低至读取伪指令,也可以是内存访问指令。当他的第二个参数前面有'='时标伪指令,否则表内存访问指令。
ldr指令从内存中读取数据到寄存器,str指令把寄存器的指存储到内存中,他们的操作数都是32位的。

ldrr1,[r2,#4]/*将地址为r2+4的内存单元数据读取到r1*/
ldrr1,[r2]/*将地址为r2的内存单元数据读取到r1*/
ldrr1,[r2],#4/*将地址为r2的内存单元数据读取到r1中,然后r2=r2+4*/
strr1,[r2,#4]/*r1的数据保存到地址为r2+4的内存单元中*/
strr1,[r2]/*。。。。*/
strr1,[r2],#4/*r1的数据保存到地址为r2的内存单元,然后r2=r2+4*/

多寄存器传送指令可以用一条指令将16个可见寄存器(R0~R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。与单寄存器存取指令相比,多寄存器数据存取可用的寻址模式更加有限。多寄存器存取指令的汇编格式如下:

LDM/STM{<cond>}<addmode>Rn{!}<registers>


4、加减指令addsub

addr1,r2,#1/*r1=r2+1*/
subr1,r2,#1/*r1=r2-1*/


5、程序状态寄存器的访问指令msr,mrs

ARM指令中有两条指令,用于在状态寄存器和通用寄存器之间传送数据。修改状态寄存器一般是通过读取-修改-写回三个步骤的操作来实现的。这两条指令分别是:
状态寄存器到通用寄存器的传送指令(MRS
通用寄存器到状态寄存器的传送指令(MSR

其汇编格式如下:
MRS{<cond>}RdCPSR|SPSR
其汇编格式如下:
MSR{<cond>}CPSR_f|SPSR_f#<32-bitimmediate>
MSR{<cond>}CPSR_<field>|SPSR_<field>Rm

msrcpsr,r0/*复制r0cpsr*/
mrsr0,cpsr/*复制cpsrr0*/


6、异常中断指令
异常中断指令可以分为一下两种:
软件中断指令(SWI
断点指令(BKPT—仅用于v5T体系)
软件中断指令SWI用于产生SWI异常中断,用来实现在用户模式下对操作系统中特权模式的程序的调用;断点中断指令BKPT主要用于产生软件断点,供调试程序用。


7、其他伪指令

.externmain
.text
.global_start
_start:

'.extern'定义一个外部符号(可以是变量也可以是函数),上面的代码表示表文本文件中引用的main是一个外部函数。

'.text'表示下面的语句都属于代码段

'.global'将本文件中的某个程序标号定义为全局的,如‘_start’就是个全局函数


分享到:
评论

相关推荐

    申延超_嵌入式Linux应用开发完全手册笔记_常用 ARM 汇编指令及 ATPCS 规则

    申延超_嵌入式Linux应用开发完全手册笔记_常用 ARM 汇编指令及 ATPCS 规则

    嵌入式Linux视频教程全套2011新版-国嵌嵌入式培训下载地址

    -ARM系统精讲班-2-1(ARM汇编指令详解).avi -ARM系统精讲班-2-2(ARM伪指令).avi -ARM系统精讲班-2-3((混合编程).avi -ARM系统精讲班-1-8(必修实验).avi -第3天(LED驱动程序设计) -ARM系统精讲班-2-1...

    嵌入式Linux应用开发完全手册.pdf

    《嵌入式Linux应用开发完全手册》全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的...

    嵌入式ARM9-2440实战手册

    实验1 ARM 汇编指令编程实验1 实验2 C 和ARM 汇编混合编程实验8 实验3 C 语言实现LED 控制实验15 实验4 外部中断应用实验 22 实验5 看门狗定时器应用实验 32 实验6 DMA 控制器实验38 实验7 PWM 控制蜂鸣器实验48 ...

    嵌入式ARM9-2440实战手册.pdf

    实验1 ARM 汇编指令编程实验1 实验2 C 和ARM 汇编混合编程实验8 实验3 C 语言实现LED 控制实验15 实验4 外部中断应用实验 22 实验5 看门狗定时器应用实验 32 实验6 DMA 控制器实验38 实验7 PWM 控制蜂鸣器实验...

    嵌入式Linux应用开发完全手册 清晰版PDF 有书签

    设置、Makefile 语法、ARM 汇编指令等),硬件部件的使用及编程(囊括了常见硬件,比如 UART、I2C、 LCD 等),U-Boot、Linux 内核的分析、配置和移植,根文件系统的构造(包括移植 busybox、glibc、制作 映象文件等...

    嵌入式Linux应用开发完全手册PDF.part1

    《嵌入式Linux应用开发完全手册》全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的...

    嵌入式Linux应用开发完全手册.part4

    《嵌入式Linux应用开发完全手册》全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的...

    嵌入式Linux应用开发完全手册

    《嵌入式linux应用开发完全手册》全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的...

    [嵌入式Linux应用开发完全手册].完整版有目录.part1

    本书全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、Makefile语法、ARM...

    (自学笔记)最全嵌入式Linux学习手册.docx

    本书全面介绍了嵌入式linux系统开发过程中,从底层系统支持到上层gui应用的方方面面,内容涵盖linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、makefile语法、arm...

    嵌入式Linux应用开发完全手册.part2

    《嵌入式Linux应用开发完全手册》全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的...

    史上最强的嵌入式底层驱动开发课程 Linux系统开发+Linux高级程序+主板开发+ARM等

    │ ├34 - ARM汇编伪指令3.avi │ ├35 - ARM汇编伪指令4.mp4 │ ├36 - 混合编程1.avi │ ├37 - 混合编程2.mp4 │ ├38 - ARM硬件基础概述1.avi │ ├39 - ARM硬件基础概述2 .mp4 │ ├40 - ARM硬件基础概述3 .mp4...

    [嵌入式Linux应用开发完全手册].完整版有目录.part2

    本书全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、Makefile语法、ARM...

    [嵌入式Linux应用开发完全手册].完整版有目录.part3

    本书全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、Makefile语法、ARM...

    [嵌入式Linux应用开发完全手册].完整版有目录.part4

    本书全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、Makefile语法、ARM...

Global site tag (gtag.js) - Google Analytics