失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Arm汇编指令集1

Arm汇编指令集1

时间:2020-11-29 09:38:50

相关推荐

Arm汇编指令集1

汇编指令是CPU指令的助记符,经过编译后会生成一串10组成的机器码,可以由CPU读取执行。

汇编伪指令本质上不是伪指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来知道编译过程,经过编译后伪指令最终不会生成机器码。

ARM汇编特点1:

ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中的内容加载入CPU中的通用寄存器中才能被CPU处理。

ldr(load register)指令将内存内容加载到通用寄存器中。

str(storeregister)指令将通用寄存器内容加载到内存中。

ldr/str组合用来实现ARM CPU和内存数据交换

ARM汇编特点2:ARM支持8中寻址方式

寄存器寻址 mov r1,r2

立即寻址mov r0, #0xff0

寄存器移位寻址 mov r0, r1, lsl #3

寄存器间接寻址 ldr r1, [r2]

基址变址寻址 ldr r1,[r2,#4]

多寄存器寻址ldmiar1!,{r2-r7,r12}

堆栈寻址stmfdsp!,{r2-r7,lr}

相对寻址 beq flag

flag:

ARM汇编特点3:指令后缀

同一指令经常附带不同后缀,编程不同的指令。经常使用的后缀有

B(byte)功能不变,操作长度变为8位

H(half word)功能不变,长度变为16位

S(signed)功能不变,操作数变为有符号

如 ldr ldrb ldrh ldrsb ldrsh

S(S标志)功能不变,影响SPSR标志位

如mov和movs movs r0,#0

ARM汇编特点4:条件执行后缀

比如

mov r0, r1 @相当于C语言中的r0 = r1;

moveqr0,r1@如果eq后缀成立,则直接执行movr0r1;如果eq不成立,则本句代码直接作废,相当于没有,类似C语言if(eq){movr0,r1}。

1、条件后缀是否成立,不是取决去本句代码,而是取决于这句代码之前的代码运行的后果。

2、条件后缀决定了本句代码是否被执行,而不会影响上一句和下一句代码是否被执行。

后缀如下:

ARM汇编特点5:多级指令流水线

为增加处理器指令流的速度,ARM使用多级流水线。

取址----解码----执行,这只是简单的三级流水线,像S5PV210是用13级流水线,ARM11为8级。

数据处理指令

数据传输指令:movmvn

mov r0,r1

mov r0,#0xff

mov和mvn用法一样,区别是mov是原封不动地传递,而mvn是按位取反后传递。

算数指令add sub rsb adc sbc rsc

逻辑指令and orr eor bic

比较指令cmpcmntstteq,注意比较指令不用加S(见ARM汇编特点3)就可以影响cpsr中的标志位。

乘法指令mvl mla umull nmlal smull smlal

前导零计数clz

这些指令详解,直接百度搜就能知道。

cpsr访问指令

mrs和msr

mrs用来读psr,msr用来写psr

cpsr和spsr的区别和联系:cpsr是程序状态寄存器,整个SoC中只有一个;而spsr有五个,分别在5中异常模式下,作用是当从普通模式进入异常模式时,用来保存普通模式下的cpsr的,以再返回普通模式时恢复cpsr。

跳转指令b bl bx

b直接跳转(就没打算返回)。

blbranchandlink,跳转前把返回地址放入lr中,以便返回,以便于函数调用。

bx跳转同时切换到ARM模式,一般用于异常处理的跳转。

访存指令:

ldr str ldm stm swp

单个字/半字/字节访问 ldr/str

多字批量访问ldm/stm

swpr1,r2,[r0]@把内存中r0存入r1,再把r2存入r0

ARM汇编中的立即数:

合法立即数与非法立即数

ARM指令都是32位,除了指令标记和操作标记外,本身只能附带很少尾数的立即数。因此立即数有合法与非法之分

合法立即数:经过任意位数的移位后非零部分可以用8位表示的即为合法立即数

软终端指令:swi

软中断用来实现操作系统中系统调用

如果觉得《Arm汇编指令集1》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。