嵌入式 Linux C ARM C语言&嵌入式嵌入式linux

ARM System Developer's Guide 学习笔

2020-04-16  本文已影响0人  kekeMemory

数据处理指令(Data Processing Instructions)

数据处理指令操控着寄存器中的数据。

包含:数据移动指令,算术运算指令,逻辑运算指令,比较指令和乘法指令。大多数数据处理指令可以通过桶型移位器处理其中一个操作数。

ARM指令集中最大的一族,这族指令的格式相同。如果在数据处理指令中看到 'S' 后缀,那么它将在cpsr(计算机程序状寄存器)中更新标志位。移动和逻辑指令更新 进位标志位 'C' ,取反标志位 'N' , 零标志位 'Z''C' 的设置来自上一位移出的结果 ; 将'N' 设置在在结果的31bit上;如果结果为零,设置 'Z'

记住,这是一个 load / store架构,这些指令只操作寄存器,而不是内存。

他们在两个操作数上执行特定的操作,并将结果存放到目标寄存器。
第一个操作数总是一个寄存器Rn。
第二个操作数通过barrel shifter送往ALU。

1. 数据移动指令 (MOVE INSTRUCTIONS)

常用数据移动指令 及其 语法

2. 桶型移位器 BARREL SHIFTER

逻辑逐位左移

3. 算数运算指令 (ARITHMETIC INSTRUCTIONS)

SUBS示例,指令执行前
SUBS示例,指令执行后,更新cprs标志位 ZC

4. 使用移位器进行算数运行指令

算数移位示例,16进制中f表示15

5. 逻辑运算指令(Logical Instructions)

常用逻辑运算指令 及其 语法 逻辑 或 指令 执行后 逻辑 位清楚指令即 与非 操作 示例

6. 比较指令(Comparison Instruction)

常见的比较指令 及其 语法

cmp :比较, 适合所有条件 ;
cmn :cmp的扩展,快速判断两个数是否相反数;
teq :判断相等,只能和NE或EQ使用;
tst :位测试, 判断第一操作数,第二操作数为1的那些位是0还是1

CMP指令

7. 乘法指令(Multiply Instructions)

常用乘法指令 及其 语法

其中:长整型指令(SMLAL, UMLAL, SMULL, UMULL)产生64位结果。这个结果很大和32位寄存器不匹配,设置为两个寄存器 RdLo和RdHo,RdLo保存64位结果的低32位,RdHo64位结果的高32位。

MUL指令示例 UMULL无符号长整型乘法指令示例
上一篇 下一篇

猜你喜欢

热点阅读