mvo指令的详解
立即数被编码到机器的低12位,如果立即数小于256,则编码到低8位,否则,如果能通过循环左移偶数位变成小于256的数,那么编码时,小于256的数在机器码的低八位,移动的位数除以2编码到低12的高四位
移位指令操作
LSL 对通用寄存器中的内容进行逻辑左移操作
LSR 对通用寄存器中的内容进行逻辑右移操作
ASR 对通用寄存器中的内容进行算数右移操作,左端是正数的话用0补齐,如果是负数的话用1补齐
ROR 对通用寄存器进行循环右移操作,左端的数用右边移出的位来补充
nt main ()
{
int a, b, c,d;
__asm__ __volatile__(
"nopn"
"mov r0,#0x78n" //将0x78放到寄存器r0中
"lsl %[a],r0,#0x4n" //将寄存器r0通过左移四位的操作
"lsr %[b],r0,#0x4n"//将寄存器r0通过右移四位的操作
"asr %[c],r0,#0x8n" //将寄存器r0通过算数左移移四位的操作
"ror %[d],r0,#0x4n" 将寄存器r0通过循环右移四位的操作
"nopn"
:[a]"=&r"(a),输出的变量
[b]"=r&"(b),
[c]"=&r"(c),
[d]"=&r"(d)
: //输入的变量
:"r0"//被更改的资源列表
);
}
算数运算逻辑指令
AND 将两个数进行逻辑与运算,常用于频闭操作数1的某些位
ORR 将两个操作数进行逻辑或运算,常用于设置操作数1的某些位
EOR 将两个操作数进行异或操作,用于反转操作数1的某些位
ADD 将两个数进行算数相加
ADC 与ADD的区别是除了两个操作数相加,还包括CPSR中的C的标志位
SUB 将两个数进行相减操作
int a, b, c,d;
__asm__ __volatile__(
"nopn"
"mov r0,#0x78n" //将0x78放到寄存器r0中
"and %[a],r0,#0x78n"
"orr %[b],r0,#0x4n"
"add %[c],r0,#0x22n"
""
"nopn"
:[a]"=&r"(a),
[b]"=r&"(b),
[c]"=&r"(c),
[d]"=&r"(d)
:
:"r0"
);
}
加载/存储指令
LDR 从储存器中将一个32位的字数据传到目标寄存器中
STR 将源寄存器32位数据传到储存器中
LDR 的伪指令用法
ldr r0 ,=lable//取标号处的地址送入r0
ldr r0 ,lable//取标号处的地址储存的四字节真值
ldr r0 ,=imedi //将任意一个常量立即数,放入r0,无论是否合法
上一篇:ARM汇编之APCS规则
下一篇:ARM开发——nfs引导启动linux
推荐阅读最新更新时间:2024-11-11 11:48
设计资源 培训 开发板 精华推荐
- BB-BONE-RF-01, BeagleBone RF Cape Board 基于 CC1101 RF Transceiver
- XR20M1280L24-0B-EB,基于 XR20M1280IL24 UART 的评估套件
- MIC2042-2YM 单通道、大电流、低电压、受保护配电开关的典型应用
- C8051F800DK、8051 MCU 开发套件旨在用作 C8051F814 微控制器的开发平台
- 使用 Analog Devices 的 LT1317BCS8 的参考设计
- DC112A,LT1328 IrDA 红外接收器评估板
- 基于SPV1050能量收集器和电池充电器的薄膜太阳能智能手表
- MC33074DR2G 交流/直流接地电流监测器的典型应用
- LTC2272IUJ 演示板,16 位,65Msps 串行 ADC,1MHz
- DI-37 - 16.5W DC-DC转换器