ARM汇编是指计算机ARM操作指令系统。在ARM中有两种方式可以实现程序的跳转:一种是跳转指令;另一种是直接向PC寄存器中写入目标地址值。
ARM汇编可以分为数据处理指令,数据加载指令和存储指令,分支指令,程序状态寄存器处理指令,协处理器指令和异常产生指令六大类。
arm汇编跟汇编、C语言的区别
不一样,汇编主要是要了解CPU指令及用法。
我们常说的是PC机的x86汇编,指令是x86的复杂指令集。
arm汇编是arm的精简指令集,比x86容易学,程序格式倒是和x86汇编差不多。你下载一份arm的手册就可以了解了。
C语言ARM的和x86的差不多,除了对硬件寄存器操作不同,其它语法和流程都一样。
回答补充:
arm汇编程序每一行是指定arm core执行一条指令,每条指令都是硬件相关。
如
LDR R3, #1 用LDR指令将数值1放入R3寄存器准备参与运算
C语言与arm指令无关,只与逻辑运算有关,指定硬件地址的操作才与硬件相关;如果用arm编译器来编译,每行可能编译出1到多条arm指令。
如
i++ //变量 i 递增1
等效于
LDR R3,#1 用LDR指令将数值1放入R3寄存器准备参与运算
ADD R2, R2, R3 用ADD指令将R2、R3寄存器里的数值相加后放回R2寄存器
以上等效汇编的R2、R3寄存器只是为了举例,C语言不像汇编,不需要由程序员指定用哪个寄存器参与运算,编译器编译时会根据程序结构自动判断选择。
强调mcuos有错,“c语言被编译器编译的时候会最终解释为汇编语言的”,无论是c语言还是汇编语言,编译器编译后的结果是机器执行码,很多人因为汇编语言比较难懂及指令相关,所以以为它就是机器语言,其实它仍是人类设计的编写程序的语言,仍需要编译器编译成机器码才能执行,它只是比C语言更接近硬件而已。
经常听说AT&T汇编、Intel汇编,还能听到ARM汇编,这个ARM汇编与前两个有什么关联?
AT&T汇编和Intel汇编,是两种不同汇编语言格式,与具体CPU关系不大,只是Intel汇编格式基本只用在自家的x86系列CPU上,而AT&T汇编格式在多种CPU上都可以使用(x86,power,VAX等等)。
两者的区别主要是CPU指令、寄存器、立即数、寻址方式等方面的表示方法不同,如果只习惯一种,那么看另一种那是相当的费劲,经常想错。网上有很多这两种格式的介绍,你搜索一下“ATT Intel 汇编格式”就很清楚了。
ARM汇编只有一种格式,就是ARM公司定义的汇编表示方法,只用在ARM系列CPU上,由于只有一种汇编格式,所以格式问题就是隐含的,一般不用提起,那么普通意义上的“ARM汇编”,就是指ARM的汇编语言了。
ARM汇编:多寄存器指令LOAD/STORE指令(LDM/STM )
LDM/STM分为两组:
看一下助记符的具体含义:
LDM/STM :
M 应该是多(Multi)的意思, LD / ST 分别对应load和store,那么 LDM/STM 应该可以理解为多寄存器的load/store操作指令。
IA 、 IB 、 DA 、 DB 、 FA 、 FD 、 EA 、 ED 的含义可以参考下面的说明:
作用:
将[R4]和[R4+4]分别存入R0和R1寄存器。
A / D 是标识堆栈增长的方向。
A 表示正增长(低地址往高地址增长)。
D 表示负增长(高地址往低地址增长)。
F / E 是标识是指向栈顶还是栈底。
在ARM中, STMFD SP! 就等同于 PUSH , LDMFD SP! 就等同于 POP 。
例如,
作用:
将lr,r3,r2,r1,r0按顺序入栈,SP = SP - 4*5
ARM汇编语言由哪些指令组成?它们之间的区别是什么?
机器指令能被处理器直接执行,而汇编指令、伪指令和宏指令不能。机器指令包括ARM指令集和Thumb指令集 。
伪指令是在源程序汇编期间,由汇编编译器处理。其作用是为汇编程序完成准备工作。
宏指令在程序中用于调用宏,宏是一段独立的程序代码;在程序汇编时,对宏调用进行展开,用宏体代替宏指令。