ARM汇编指令集-1

指令和伪指令

  • (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行。
  • (汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。

两种不同风格的ARM指令

  • ARM官方的ARM汇编风格:指令一般用大写、Windows中IDE开发环境(如ADS、MDK等)常用。如: LDR R0, [R1]
  • GNU风格的ARM汇编:指令一般用小写字母、linux中常用。如:ldr r0, [r1]

ARM汇编五大特点

1.ARM汇编特点1:LDR/STR架构
  • ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理。
  • ldr(load register)指令将内存内容加载入通用寄存器。
  • str(store register)指令将寄存器内容存入内存空间中。
  • ldr/str组合用来实现 ARM CPU和内存数据交换
ARM汇编特点2:8种寻址方式

寻址 根据指令中给出的地址信息来寻找物理地址

纯寄存器寻址

  • 寄存器寻址 mov r1, r2 r2的值赋值给r1
  • 立即寻址 mov r0, #0xFF00 将0xFF00赋值给r0
  • 寄存器移位寻址 mov r0, r1, lsl #3 lsl左移3位 等于 r0 = r1* 8

内存寻址

  • 寄存器间接寻址 ldr r1, [r2] r2指向的内存值赋值给r1
  • 基址变址寻址 ldr r1, [r2, #4] r2指向的地址再加16位指向的内存的值赋值给r1
  • 多寄存器寻址 ldmia r1!, {r2-r7, r12} 加载 寻址多个寄存器 r1的内存八个值放到后面的8个寄存器中
  • 堆栈寻址 stmfd sp!, {r2-r7, lr} 特别的 去栈里面取多个值放入寄存器
    特别的
    相对寻址 beq flag 在汇编编程中使用flag标记地址 跳转到
ARM汇编特点3:指令后缀
  • 同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:
    • B(byte)功能不变,操作长度变为8位 默认32位
    • H(half word)功能不变,长度变为16位 默认32位
    • S(signed)功能不变,操作数变为有符号
      如 ldr ldrb ldrh ldrsb ldrsh
    • S(S标志)功能不变,影响CPSR标志位
      如 mov变movs movs r0, #0
ARM汇编特点4:条件执行后缀

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VjkM3Nj2-1635679016587)(en-resource://database/955:1)]

例子

后缀->指上一个执行结果中标志位Z的值

mov r0,r1 @相当于c语言的r0=r1;
moveq r0,r1 @如果eq后缀成立 则直接执行 mov r0, r1;eq不成立则这句代码作废。相当于c语言的if(eq){r0=r1;}

ARM汇编特点5:多级指令流水线
  • 为增加处理器指令流的速度,ARM使用多级流水线.,下图为3级流水线工作原理示意图。(S5PV210使用13级流水线,ARM11为8级)

允许多个操作同时处理,而非顺序执行。

一个简单的3级流水线示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z3cK9gIX-1635679016590)(en-resource://database/956:1)]

  • PC指向正被取指的指令,而非正在执行的指令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值