数据传输指令 通过 MRS/MSR指令,这3个PSR可以单独访问,也可以组合访问。 合一时应使用名字“xPSR”或“PSR”。 MSR< special reg>,< gp reg>;写通用寄存器的值到特殊功能寄存器 MRS< gp reg>,< special reg>;写特殊功能寄存器的值到通用寄存器 PRIMASK, FAULTMASK和 BASEPR这三个寄存器用于控制异常 的使能和除能,只有在特权级下,才允许访问这三个寄存器。 名字功能描述 PRIMASK这是个只有1个位的寄存器。当它置1时,就关掉所有可屏蔽的异常,只剩下NN 和硬faut可以响应。它的缺省值是0,表示没有关中断 FAULTMASK这是个只有1个位的寄存器。当它置1时,只有NM才能响应,所有其它的异常, 包括中断和faut,通通闭嘴。它的缺省值也是0,表示没有关异常。 BASEPRI 这个寄存器最多有9位(由表达优先级的位数决定)。它定义了被屏蔽优先级的阈 值。当它被设成某个值后,所有优先级号大于等于此值的中断都被关(优先级号 越大,优先级越低)。但若被设成0,则不关闭任何中断,0也是缺省值
数据传输指令 通过MRS/MSR指令,这3个PSR可以单独访问,也可以组合访问。 三合一时应使用名字“xPSR”或“PSR”。 MSR <special_reg> , <gp_reg> ;写通用寄存器的值到特殊功能寄存器 MRS <gp_reg>, <special_reg> ;写特殊功能寄存器的值到通用寄存器 PRIMASK,FAULTMASK和BASEPRI这三个寄存器用于控制异常 的使能和除能,只有在特权级下,才允许访问这三个寄存器
数据传输指令 控制寄存器( CONTROL)用于定义特权级别,还用于选 择当前使用哪个堆栈指针。同样,需要在特权级下,才 可以使用 MSR/MRS指令进行访问。 位 功能 CONTROL[1]堆栈指针选择 0=选择主堆栈指针MSP(复位后缺省值) 1=选择进程堆栈指针PSP 在线程或基础级(没有在响应异常一一译注),可以使用PSP。在 handler模式下, 只允许使用MSP,所以此时不得往该位写1。 CONTROL[O]0=特权级的线程模式 1=用户级的线程模式 Handler模式永远都是特权级的
数据传输指令 • 控制寄存器(CONTROL)用于定义特权级别,还用于选 择当前使用哪个堆栈指针。同样,需要在特权级下,才 可以使用MSR/MRS指令进行访问
数据传输指令 LDR伪指令Vs.ADR伪指令 LDR和ADR指令都有能力产生一个地址,但是语法和行为不同。对 于LDR,如果汇编器发现要产生立即数是一个程序地址,它会自动把 LSB置位,而ADR指令则不会修改LSB,例如: LDRR0,= address1;R0≤-0×4000|1 adr Ro address1 : R0<-0x4000 address 1 MOVR0,R1;地址为0X4000 注意:LDR与ADR读取立即数的语法不同
数据传输指令 • LDR伪指令 vs. ADR伪指令 LDR和ADR指令都有能力产生一个地址,但是语法和行为不同。对 于LDR,如果汇编器发现要产生立即数是一个程序地址,它会自动把 LSB置位, 而ADR指令则不会修改LSB,例如: LDR R0, =address1 ;R0 <- 0x4000 | 1 ADR R0, address1 ;R0 <- 0x4000 … address1 MOV R0, R1 ;地址为0x4000 注意:LDR与ADR读取立即数的语法不同
目录 Cortex-M3指令集简介 汇编语言基础 数据传输指令 数据处理指令 条件转移指令 些有用的新指令 子过程 内积计算 卷积计算
目录 • Cortex-M3指令集简介 • 汇编语言基础 • 数据传输指令 • 数据处理指令 • 条件转移指令 • 一些有用的新指令 • 子过程 • 内积计算 • 卷积计算
教据处理指令 APSR中的5个标志位 N:负数标志( Negative) Z:零结果标志(zero) C:进位借位标志(ary V:溢出标志( oVerflow) S:饱和标志( aturation),它不做条件转移的依 据
数据处理指令 APSR 中的5 个标志位 • N: 负数标志(Negative) • Z: 零结果标志(Zero) • C: 进位/借位标志(Carry) • V: 溢出标志(oVerflow) • S: 饱和标志(Saturation),它不做条件转移的依 据