5.3.数据传送类指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
将新地址
Baidu Nhomakorabea
R1+8写入R1
STRD R1, R2, [R3, #8];把R1(低32位)和R2(高32位)表达的双字存储
到地址
R3+8处
STMFD [SP]!, {R0};意思是:把R0保存到堆栈(sp指向的地址)中
7
数据传送类指令
寄存器与特殊功能寄存器间传送数据
特殊功能寄存器到通用寄存器
MRS R0, BASEPRI MRS R0, FAULTMASK MRS R0, PRIMASK MRS R0, MSP MRS R0, PSP
3
数据传送类指令
寄存器与存储器间传送数据
存储器到寄存器传送
LDRx 指令、LDMxy指令 LDRx 指令的x可以是B(byte)、H(half word)、D(Double word) 或者省略(word)
示例 LDRB Rd,[Rn,#offset] LDRH Rd,[Rn,#offset] LDR Rd, [Rn, #offset] LDRD Rd1, Rd2, [Rn, #offset]
;写入R0到PRIMASK
MSR MSP, R0
;写入R0的值到主堆栈指针
MSR PSP, R0
;写入R0的值到进程堆栈
指针
8
数据传送类指令
立即数到寄存器传送数据
MOV R0, #0x12; 立即数0x12传送到R0低16位,高16位清零 MOV R1, #’A’; 字符A的ASCII码传送到R1低16位,高16位清0 MOVW R1, #0x1234; 立即数1234H传送到R1低16位,高16位清0 MOVT R1, #0x5678;立即数5678H传送到R1高16位,低16位不变 将0x12345678送到R1,除了用上面2条指令外,还可以用前面学过的伪指 令 LDR R1, =0x12345678
ARM Cortex-M3 的STM32系列 数据传送类指令
数据传送类指令 数据传送类指令
两个寄存器间传送数据 寄存器与存储器间传送数据 寄存器与特殊功能寄存器间传送数据 把一个立即数加载到寄存器
2
数据传送类指令 两个寄存器间传送数据
MOV 指令、MVN指令 MOV R8, R3; R8 = R3 MVN R8, R3; R8 = -R3(按位取反) MOV PC, LR MOVEQ R0, R1
功能描述 从地址Rn+offset处读取一个字节送到Rd 从地址Rn+offset处读取一个半字送到Rd 从地址Rn+offset处读取一个字送到Rd 从地址Rn+offset处读取一个双字(64位整数)送到Rd1 (低32位)和Rd2(高32位)
4
数据传送类指令
寄存器与存储器间传送数据
存储器到寄存器传送
6
数据传送类指令
寄存器与存储器间传送数据
寄存器到存储器传送
STRB R0,[R1,#8] ;将寄存器R0中的字节数据写入以R1+8为地址的存
储器中。
STRH R0,[R1] ;将寄存器R0中的半字数据写入以R1为地址的存储器中。
STR R0,[R1],#8 ;将R0中的字数据写入以R1为地址的存储器中,并
9
数据传送类指令 问题与思考
如何实现存储器之间的数据传送,也就是把存储器中一个区域的数据块 传送到另一个区域
9
Thanks
感谢
谢谢,精品课件
资料搜集
示例 STRB Rd, [Rn, #offset] STRH Rd, [Rn, #offset] STR Rd, [Rn, #offset] STRD Rd1, Rd2, [Rn, #offset]
功能描述 把Rd中的低字节存储到地址Rn+offset处 把Rd中的低半字存储到地址Rn+offset处 把Rd中的字存储到地址Rn+offset处 把Rd1(低32位)和Rd2(高32位)表达的双字存储到地 址Rn+offset处
地址
R1+R2写入R1
LDRD R1, R2, [R3, #8] ;从地址R3+8处读取一个双字(64位整数)送到R1
(低32位)
和R2(高32位)
LDMFD SP! , {R0, R1, R2};批量操作,从左到右运行,即出栈
5
数据传送类指令
寄存器与存储器间传送数据 寄存器到存储器传送
STRx 指令、STMxy指令
LDRB R0,[R1,#8] ;将存储器地址为R1+8的字节数据读入寄存器R0,并将
R0的高
24位清零。
LDRH R0,[R1,R2] ;将存储器地址为R1+R2的半字数据读入寄存器R0,并将
R0的
高16位清零
LDR R0,[R1,R2] !;将存储器地址为R1+R2的字数据读入寄存器R0,并将新
;读取BASEPRI到R0 ;读取FAULTMASK到R0
;读取PRIMASK到R0 ;读取主堆栈指针到 R0 ;读取进程堆栈指针到 R0
通用寄存器到特殊功能寄存器
MSR BASEPRI, R0
;写入R0到BASEPRI
MSR FAULTMASK, R0 ;写入R0到FAULTMASK
MSR PRIMASK, R0