嵌入式杂项指令.pptVIP

  • 1
  • 0
  • 约3.21千字
  • 约 12页
  • 2019-10-10 发布于湖北
  • 举报
指令集之杂项指令 组长:XX 组员:XXX 杂项指令介绍 * 周立功单片机 ARM指令集中有四条指令作为杂项指令,实际上这四条指令非常重要。它们如下所示: MSR{cond} psr_fields←Rd/#immed_8r,psr为 CPSR或SPSR 写状态寄存器指令 MSR BKPT immed_16 使ARM处理器进入Debug模式 断点指令 BKPT MRS{cond} Rd←psr,psr为CPSR或SPSR 读状态寄存器指令 MRS SWI{cond} 产生软中断,处理器进入管理模式 软中断指令 SWI 条件码位置 操作 说明 助记符 ARM杂项指令——SWI(软中断指令) SWI指令用来实现在用户模式下的程序调用 管理模式中的代码,从而实现在从户模式变换到管理模式,并且将CPSR保存到管理模式的SPSR中。主要用于用户程序调用操作系统的系统服务,操作系统在SWI异常处理程序中进行相应的系统服务,执行时不影响条件标志位。 SWI{cond} immed_24 SWI指令格式 SWI指令编码 指令执行的条件码 指令传递的参数(24位立即数) ARM杂项指令——SWI(软中断指令) 根据SWI指令传递的参数SWI异常处理程序可以作出相应的处理。SWI指令传递参数有以下两种方法, 指令中的24位立即数指定了用户请求的服务类型,参数通过通用寄存器传递。 MOV R0,#34 ;设置子功能号为34 SWI 12 ;调用12号软中断 指令中的24位立即数被忽略,用户请求的服务类型由寄存器R0的值决定,参数通过其它的通用寄存器传递。 MOV R0,#12 ;调用12号软中断 MOV R1,#34 ;设置子功能号为34 SWI 0 ARM杂项指令——SWI(软中断指令) 在SWI异常中断处理程序中,取立即数的步骤为: 通过对SPSR访问确定是ARM指令还是Thumb指令; 然后取该SWI指令的地址,可通过访问LR寄存器得到; 接着读出该SWI指令,分解出立即数。 SWI_Handler STMFD SP!, {R0-R3, R12, LR} ; 现场保护 MRS R0, SPSR ; 读取SPSR STMFD SP!, {R0} ; 保存SPSR TST R0, #0x20 ; 测试T标志位 LDRNEH R0, [LR,#-2] ; 若是Thumb指令,读取指令码(16位) BICNE R0, R0, #0xFF00 ; 取得Thumb指令的8位立即数 LDREQ R0, [LR,#-4] ; 若是ARM指令,读取指令码(32位) BICEQ R0, R0, #0xFF000000 ; 取得ARM指令的24位立即数 ... LDMFD SP!, {R0-R3, R12, PC}^ ; SWI异常中断返回 ARM杂项指令——MRS(状态寄存器读指令) 在ARM处理器中,只有MRS指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以了解当前处理器的工作状态。读SPSR寄存器可以了解到进入异常前的处理器状态。 MRS{cond} Rd,psr MRS指令格式 指令对应编码 指令执行的条件码 目标寄存器,不能为R15 区别CPSR(为0)和SPSR(为1)寄存器 ARM杂项指令——MRS(状态寄存器读指令) 在ARM处理器中,只有MRS指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以了解当前处理器的工作状态。读SPSR寄存器可以了解到进入异常前的处理器状态。 MRS{cond} Rd,psr MRS指令格式 应用示例: MRS R1,CPSR ; 将CPSR状态寄存器读取,保存到R1中 MRS R2,SPSR ; 将SPSR状态寄存器读取,保存到R2中 ARM杂项指令——MSR(状态寄存器写指令) 在ARM处理器中,只有MSR可对CPSR和SPSR进行写操作。与MRS配合使用,可实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。 MSR{cond} psr_fields,#immed_8r MSR指令格式1 MSR{cond} psr_fields,Rm MSR指令格式2 指令执行的条件码 CPSR或SPSR 指定传送的区域,可以为以下字

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档