ARM STM32任务切换相关汇编指令介绍

ARM STM32任务切换相关汇编指令介绍

MOV
数据传送指令,将8位立即数或寄存器传送到目标寄存器
举例:MOV R4,#0x07 //R4 = 0x07
MOV R0,R6 //R0 = R6
MOV PC,LR //PC = LR,子程序返回

PUSH/POP
寄存器入栈/出栈指令
举例:PUSH {R4-R6,LR} //保存R4,R5,R6,LR的值到内存的栈中,LR:连接返回寄存器,保留函数返回后,下一条应执行的指令
POP {R4-R6,PC} //出栈,恢复R4,R5,R6,PC = LR

STR
存储数据(字)到指定地址的存储单元,要存储的数据在前
举例:STR R5,[R6,#0] //将R5的数据存储到R6+0存储单元

STRB
存储数据(字节)到指定地址的存储单元,要存储的数据在前,低字节有效,高24位清零
举例:STRB R5,[R6,#0] //将R5的数据的低8位存储到R6+0存储单元

STRH
存储数据(半字)到指定地址的存储单元,要存储的数据在前,低半字有效,高16位清零
举例:STRH R5,[R6,#0] //将R5的数据的低16位存储到R6+0存储单元

LDR
加载指定送至上的数据(字),放入寄存器中,要加载的数据在后
举例:LDR R1,[R0,#24] //将R0+24地址处的数据存储到R1中

LDRB
加载指定送至上的数据(字节),放入寄存器中,要加载的数据在后
举例:LDRB R1,[R0,#24] //将R0+24地址处的数据低8位存储到R1中

LDRH
加载指定送至上的数据(半字),放入寄存器中,要加载的数据在后
举例:LDRH R1,[R0,#24] //将R0+24地址处的数据低16位存储到R1中

LDM
批量加载指令,加载多个寄存器,可以实现在一组寄存器和一块连续的内存单元之间传输数据
举例:LDM R0,{R4-R11} //R0指向的前8个字赋值给R4-R11

STM
批量存储指令,存储多个寄存器,可以实现在一组寄存器和一块连续的内存单元之间传输数据
举例:STM R0,{R4-R11} // R4-R11赋值给R0指向的前8个字

ADD
加法运算
举例:ADD R0,R0,#0x20 //R0 = R0 + 0x20

ORR
异或运算
举例:ORR LR,LR,#0x04 // LR = LR^0x04

SUB
减法运算指令
举例:SUB R0,R2,R1 //R0 = R2-R1
SUB R0,R2,#1 //R0 = R2-1
SUB R0,#250 //R0 = R0-250

SUBS
减法运算指令
举例:SUBS R0,R0,#4 //R0 = R0 - 4,置位CPSR的C标志位

MRS
举例:MRS R0, PSP //读PSP值到R0
MRS R0, PRIMASK //读PRIMASK的值到R0,PRIMASK 用于禁止除NMI和HardFalut外的所有异常和中断

MSR
举例:MSR PSP, R0 //设置PSP = R0
MSR PRIMASK, R0 //恢复PRIMASK的值

CPSID
举例:CPSID I //关总中断

CPSIE
举例:CPSIE I //开总中断

BX
跳转指令
举例:BX LR //跳转到LR地址

SVC
SVC异常服务
举例:SVC 0 //产生SVC异常服务,svc number = 0

TST/ ITE/ MRSEQ/ MRSNE
条件判断
举例:TST LR,#0x04 //LR&0x04
ITE EQ //条件判断,是否等于0
MRSEQ R0,MSP //等于0,则R0 = MSP
MRSNE R0,PSP //不等于0,则R0 = PSP

CBZ
条件跳转
举例:CBZ R0,SVC_HANDLER_0 //如果R0 = 0,跳转到SVC_HANDLER_0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值