ARM 汇编指令:(四) 位运算指令

一.移位指令

1.LSL 指令

逻辑移指令,实现将寄存器进行左移操作

复制代码
lsl r1, r0, #2 //r1 = r0 * 2^2
mov r1, r0, lsl, #2 //和上一个汇编指令效果一样
add r1, r0, lsl, #2 //r1 = r1 + r0 * 2^2

2.LSR 指令

逻辑移指令,实现将寄存器进行右移操作

复制代码
lsr r1, r0, #2 //r1 = r0 / 2^2
mov r1, r0, lsr, #2 //和上一个汇编指令效果一样
add r1, r0, lsr, #2 //r1 = r1 + r0 / 2^2

二.位运算

1.AND (逻辑与指令)

AND:将操作数1按位操作数2的结果存放在目标寄存器

复制代码
MOV R1, 0x0F   ; //将寄存器R1设置为0x0F,二进制为 00001111
MOV R2, 0x03   ; //将寄存器R2设置为0x03,二进制为 00000011
AND R3, R1, R2 ; //R3 = R1 & R2
//r3结果为0x03,二进制为 00000011

2.ORR (逻辑与指令)

将操作数1按位操作数2的结果存放在目标寄存器

复制代码
MOV R1, 0x0F   ; //将寄存器R1设置为0x0F,二进制为 00001111
MOV R2, 0x03   ; //将寄存器R2设置为0x03,二进制为 00000011
ORR R3, R1, R2 ; //R3 = R1 | R2   
//r3结果为0x0f,二进制为 00001111

3.EOR(逻辑异或指令)

EOR:将操作数1按位异或操作数2的结果存放在目标寄存器

复制代码
MOV R1, 0x0F   ; //将寄存器R1设置为0x0F,二进制为 00001111
MOV R2, 0x03   ; //将寄存器R2设置为0x03,二进制为 00000011
EOR R3, R1, R2 ; //R3 = R1 ^ R2   
//r3结果为0x0c,二进制为 00001100

4.BIC(位清除指令 )

BIC:将操作数1按位操作数2取反的结果存放在目标寄存器(目标寄存器=操作数1 & ~操作数2)

复制代码
MOV R1, 0x0F   ; //将寄存器R1设置为0x0F,二进制为 00001111
MOV R2, 0x03   ; //将寄存器R2设置为0x03,二进制为 00000011
BIC R3, R1, R2 ; //R3 = R1 & ~R2   
//r3结果为0x0c,二进制为 00001100

下一页:ARM 汇编指令:(五)CMP指令

相关推荐
是星辰吖~3 小时前
X86反汇编:内存矩阵与指针之剑(3-1)
汇编
iCxhust19 小时前
如何利用iret修改cs ip
汇编·单片机·嵌入式硬件·微机原理·8088单板机
WHS-_-20221 天前
When RDMA Meets Wireless
arm开发
szxinmai主板定制专家1 天前
基于 ARM+FPGA 数据机床实时工业控制设计--以雕刻机为例
arm开发·人工智能·嵌入式硬件·fpga开发
wandertp1 天前
对信号处理及滤波器的理解---基于robomaster机器人嵌入式控制系统
arm开发·stm32·算法·信号处理
XMAIPC_Robot1 天前
基于RK3588 ARM+FPGA电火花数控机床控制系统设计,兼顾ethercat软硬件实时
linux·arm开发·人工智能·嵌入式硬件·fpga开发
底层开发智库1 天前
C1-Ultra FVP调试并运行Linux kernel全程记录,硬核演示如何解决启动问题
linux·arm开发·内核·嵌入式·arm
XMAIPC_Robot1 天前
基于 ARM+FPGA 数据机床控制系统设计--以雕刻机为例
arm开发·fpga开发
是星辰吖~2 天前
X86反汇编:透视之眼_反编译特训(1-2)
汇编
一抹晴空2 天前
Keil MDK AC6 compiler编译报错,与AC5区别
c语言·arm开发·单片机