您现在的位置: 主页 > 嵌入式处理器 > ARM > ARM指令集--数据处理指令
本文所属标签:
#arm#   #arm芯片#   #arm指令#   #arm指令系统#   #ARM汇编指令#   
为本文创立个标签吧:

ARM指令集--数据处理指令

来源:网络整理 网络用户发布,如有版权联系网管删除 2018-08-12 

ARM汇编指令集

ARM汇编文件的组成

指令:编译完成后作为一条指令(机器码)存储在内存单元中,CPU执行时能够完成处理的操作

伪操作:知道编译器进行编译,编译完成后不生成指令,也不占用内存空间。

ARM汇编指令类型

数据处理指令

Load/Store指令:CPU与内存数据之间的操作指令

数据处理指令语法

<操作{<cond>}{S}> <Rd>, <Rn>, <Operand2>

<操作码> <目标寄存器Rd> <第一操作寄存器Rn> <第二操作数Operand2>

;第一个位置必须是寄存器,第二操作数可以是寄存器,也可以是立即数

数据传送指令 MOV

mov r1, #0x1 ;r1 = 0x1 0x1 是立即数

mov r2, r1 ;r2 = r1

mvn r3, r2 ;r3 = ~r2

mov r1, 0xffffff00 ;0xffffff00 不是立即数,只是编译器在编译阶段对其进行了替换

mvn r1, 0x000000ff ;替换的指令

;一条数据传送指令 mov reg, #n mov reg占用 bit[31:12],bit[11:0]留给立即数使用,因此立即数自包含2^12个

;一个立即数由 bits[8:0]循环右移 2 * bits[11:9]得到。(一个八位的数循环右移偶数次得到)

;立即数的本质是包含于指令中的数,占用指令本身的空间

加法指令 ADD

;加法指令执行时,若没有进位 CPSR 'C' 位置 0

mov r0, #1 mov r1, #1 add r2, r1, r0 ;r2 = r1 + r0 add r2, r1, #2 ;r2 = r1 + 2

数据操作对CPSR的影响

;默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位。

mov r1, #0mov r2, #-1

adds r3, r1, r2

带进位的加法指令 ADC

;两个64位数相加,第一个64位的低32位放在 r0,高位放到 r1,第二个64位数的低32位放在 r2 高32位放在 r3

;编写代码实现两个64位数的和,结果的低32位放在 r4 高32位放在 r5

mov r0, #0xfffffffe ;第一个数的低32位

mov r1, #1 ;第一个数的高32位

mov r2, #0x5 ;第二个数的低32位

mov r3, #1 ;第二个数的高32位

adds r4, r0, r2

adc r5, r1, r3 ; adc运算的实质是 r5 = r1 + r3 + 'C' 'C'位 CPSR 进位标志

减法指令 SUB

;减法指令执行时,没有借位时 CPSR 'C' 位置 1

mov r0, #5 mov r1, #3 sub r2, r0, r1 ;r2 = r0 - r1

带借位的减法指令 SBC

mov r0, #1 ;第一个数的低32位

mov r1, #3 ;第一个数的高32位

mov r2, #3 ;第二个数的低32位

mov r3, #1 ;第二个输的高32位

subs r4, r0, r2

sbc r5, r1, r3

逆向减法指令 RSB

mov r0, #3

rsb r1, r0, #5 ;r1 = 5 - r0

乘法指令 MUL

;为了提高效率,任何乘法指令不可以使用立即数

mov r1, #5

mov r2, r0, r1 ;r2 = r0 * r1

乘--累加指令 MLA

mla r3 ,r0, r1, r2 ;r3 = (r0 * r1) + r2

逻辑与指令 AND

mov r0, #0xf0

mov r1, #0x0f

and r2, r0, r1 ;r2 = r0 & r1

逻辑或指令 ORR

orr r2, r0, r1 ;r2 = r0 | r1

逻辑异或运算指令 EOR

eor r2, r0, r1 ;r2 = r0 ^ r1

位清零指令 BIC

mov r0, #0xff

bic r0, r0, #0xf ;第二个操作数的每一位为 1 就把第一个操作数对应的位清零

比较指令 CMP

;实质是一条减法指令

;没有目标register,用来比较两个数是否相等,结果放到 CPSR 的 'Z' 位判断

mov r0, #2

mov r1, #1

cmp r0, r1

位测试指令 TST

;实质是与运算 常用于用来测试某一位或某几位是 0 还是 1,结果通过 CPSR 的 'Z' 位判断

tst r0, #0x3

相等测试指令 TEQ

;实质是异或运算,测试两个数是否相等,两个数相等时异或结果位 0,通过 CPSR 的 'Z' 位判断

teq r0, r1

移位指令 LSL、LSR、ASR、ROR

;需要与mov配合,不能够单独使用

mov r1, r0, lsl #4 ;将 r0 逻辑左移 4 位放入 r1 中

;LSL 逻辑左移:高位移出,低位补零

;LSR 逻辑右移:低位移出,高位补零

;ASR 算是右移:低位移出,高位补符号位

;ROR 循环右移:低位移出,高位补低位移出位



              查看评论 回复



嵌入式交流网主页 > 嵌入式处理器 > ARM > ARM指令集--数据处理指令
 指令 高位 低位

"ARM指令集--数据处理指令"的相关文章

网站地图

围观()