ARM(三) ISA介绍之Data Processing Instructions(数据运算指令)

本文介绍了ARM架构的基础知识,包括组成部分、指令集、寄存器文件等,并详细解析了数据处理指令、算术指令、逻辑指令及乘法指令的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前章知识复习

  1. ARM由8个部分组成-ALU,barrel shifter,MAC,address decoder, address register, register file,incrementer and sign extend
  2. ARM具有3个指令集-ARM,Thumb,Jazelle
  3. Register file 包含了37个寄存器,只有17,18个寄存器在同一时间是可访问的—这取决于ARM所在的模式
  4. cpsr存放当前处理器的模式。其中包括3部分,interrupt masks,condition flags and state
  5. Core扩展部分包含了:TCM, Cache,Memory management, Coprocessor
  6. 一种ARM处理器是一种ISA的具体实现

一、Data Processing Instructions

  • 当你在数据处理指令使用’S’前缀的时候,表示结果会update cpsr寄存器
  • Carry是移位出的最后一位
  • Negative是第31位上的值
  • Zero是当结果为0的时候

MOVE instructions

指令格式如下,{}表示可选,之后不再解释

< instruction>{< cond>}{S} Rd, N

MOV  Rd = N
MVN  Rd = ~N

Barrel shifter

ARM处理器具有pre-processing的预处理能力。能够将32bit二进制数在进入ALU前左移或者右移一定的距离。然而一些数据运算指令例如MUL,CLZ,QADD则不支持barrel shifter(桶移位)

例如:MOV r1,r2,LSL #2
指令如下:
LSL,LSR,ASR,ROR,RRX

Arithmetic Instruction

ADC
ADD
RSB Rd=N-Rn
RSC
SBC
SUB Rd=Rn-N
* arithmetic instructions使用了内置(inline)的barrel shifter

Logical Instructions

指令解释使用
ANDbitwise
ORRbitwise
EORexclusive(not including sth) ORRd = Rn^N
BICbit clear(Not AND),在cpsr中非常有用,用于清除位置。例如:BIC r0,r1,r2 会将R2中为1的位在R0中全部清除为0Rd = Rn & ~N

* 逻辑指令的第二个操作数可以和算术指令一样采用barrel shifter处理

Comparison Instruction

  • 比较指令不需要S直接更新CPSR
  • 会遗弃结果
指令解释使用
CMNcompare negatedRn+N
CMPcompareRn-N
TEQexclusive ORRn^N
TSTandRn&N

Multiply Instructions

  • 一个乘法指令的周期数量,在一些实现中取决于Rs的值
指令解释使用
MLA{< cond>}{S} Rd, Rm,Rs,Rn
MUL{< cond>}{S} Rd, Rm,Rs
MLARd=(Rm*Rs)+Rn
MULRd=(Rm*Rs)
instruction{< cond>}{S} RdLo, RdHi,Rm,Rs
SMLAL[High,Low]=[High,Low]+Rm*Rs
SMULL[Hihg.Low]=Rm*Rs
UMLAL同SMLAL
UMULL同SMULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值