您的位置:首页 > 其它

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

2015-12-16 22:39 696 查看

前章知识复习

ARM由8个部分组成-ALU,barrel shifter,MAC,address decoder, address register, register file,incrementer and sign extend

ARM具有3个指令集-ARM,Thumb,Jazelle

Register file 包含了37个寄存器,只有17,18个寄存器在同一时间是可访问的—这取决于ARM所在的模式

cpsr存放当前处理器的模式。其中包括3部分,interrupt masks,condition flags and state

Core扩展部分包含了:TCM, Cache,Memory management, Coprocessor

一种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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: