第3章ARM指令集(2016年2月22日)精选.ppt

共129页 * (3)交换指令SWP应用 SWP R1,R1,[R0] SWPB R1,R2,[R0] I2C_SEM EQU 0I2C_SEM_WAIT MOV R0,#0 LDR R0,=I2C_SEM SWP R1,R1,[R0] CMP R1,#0 BEQ I2C_SEM_WAIT 共129页 * 作业 1、ARM指令分为几类?分别是什么? 2、ARM指令有几种寻址方式?分别是什么? 程序状态寄存器常用的两个域为:条件标志位域 和 控制位域。 共129页 * * 在ARM V5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。在其他版本的处理器中,Q标志位无定义。 共129页 * * MSR指令的格式为: MSR{cond} CPSR_fields,operand2 MSR{cond} SPSR_fields,operand2 MSR 指令可以把 operand2 的内容传送到程序状态寄存器的特定域中。其中 operand2 可以为通用寄存器或立即数,fields 用于指定程序状态寄存器中需要操作的位域,为 f、s、x、c。 共129页 * * MSR CPSR,R0 ;传送R0的内容到CPSR MSR SPSR,R0 ;传送R0的内容到SPSR MSR CPSR_c,R0 ;传送R0的内容到CPSR,但仅仅修改CPSR中的控制位域 MSR CPSR_CFXS,R0 ;传送R0的内容到CPSR,修改所有域 C、F、X、S 大小写都可以,顺序也可任意。 共129页 * 3.3.5 加载/存储指令 包括字数据加载指令 LDR 、字节数据加载指令 LDRB 、半字数据加载指令 LDRH ;字数据存储指令 STR 、字节数据存储指令 STRB 、半字数据存储指令 STRH。 (1)LDR指令 字加载指令 LDR 的格式为: LDR{cond} Rd, address_mode LDR指令的功能是把存储在存储器中的一个32位字数据传送到目的操作数Rd。 共129页 * * 例:已知(R0)=0(R1)=0并已知在存储器中首地址为 0的区域中存放了数据0在首地址为 0的区域存放了数据 0试写出执行了指令 LDR R0,[R1,#4] 后 R0 和 R1 中的数据。 (R0)= 0(R1)= 0共129页 * * 例:条件如上题,试写出执行了指令 LDR R0,[R1,#4]!后的 R0 和 R1 中的数据。 (R0)=0(R1)=0例:条件如上题,试写出执行了指令 LDR R0,[R1],#4 后 R0 和 R1 中的数据。 (R0)=0(R1)=0共129页 * LDR R1,[R0,#0X12] ;将R0+12地址处的数据读出,保存到R1中(R0的值不变) LDR R1,[R0,R2,LSL #02] ;将R0+R*4地址处的数据读出,保存到R1中(R0、R2的值不变) LDR Rd,label ;label为程序标号, label必须是当前指令-4~4KB范围内 共129页 * * (2)LDRB指令 字节加载指令 LDRB 的格式为: LDR{cond}B Rd, address_mode LDRB 指令的功能是从存储器中将一个 8 位的字节数据传输到 Rd,同时将寄存器的 高24位 清零。 LDRB R0,[R1,#8] ;R0←((R1)+8),并将R0的高24位清零。 共129页 * * (3)LDRH指令 半字加载指令 LDRH 的格式为: LDR{cond}H Rd, address_mode LDRH 指令的功能是把存储器中的 16 位半字数据传送到 Rd,同时将寄存器的 高16位 清零。 LDRH R0,[R1,#8] ;R0←((R1)+8),并将 R0的高16位清零 共129页 * * 字存储指令 STR 的格式如下: STR Rd, address_mode (4)STR指令 STR 指令的功能是把一个 32 位源操作数传送到存储器中。 STR R0,[R1,#8] ; (R0)→((R1)+8) 共129页 * * ①变量访问 NumCount e

文档评论(0)

1亿VIP精品文档

相关文档