操作影响cpsr的条件码的指令(teq等),与影响关系
2017-11-20 17:50
288 查看
1. 简介算术逻辑运算指令:(ADD、ADC、SUB、SBC、RSB、RSC、AND、ORR、EOR、BIC)完成常 用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中。
当这些指令后面加了S(如ADDS时),指令同时更新CPSR中的相应条件标志位。
比较指令 (CMP、CMN、TST、TEQ)不保存运算结果,只更新CPSR中相应的条件标志位。
它们总是会影响CPSR条件标志位.
2、CPSR格式及说明:
其中CPSR寄存器中保存程序在当前运行状态时cpu的运行状态, 包括了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。每一种处理器模式下都有一个专用的物理状态寄存器,称为 SPSR (备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用 SPSR 来恢复 CPSR 。由于用户模式和系统模式不是异常中断模式,所以他没有 SPSR 。当用户在用户模式或系统模式访问 SPSR ,将产生不可预知的后果。CPSR 格式如下所示(SPSR和CPSR格式相同)。
(1).条件码标志:N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。条件码标志各位的具体含义如下表所示:
在ARM状态下,绝大多数的指令都是有条件执行的;在THUMB状态下,仅有分支指令是条件执行的
(2).控制位:CPSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器运行于特权模式时,这些位也可以由程序修改。
位模式含义表:
CPSR寄存器控制位设置方法:
其中cpsr_c代表的是这32位中的低8位,也就是控制位
当你看到有些程序里这样写
msr cpsr_c 0xd2 使用0xd2做为值来修改cpsr,但只修改cpsr的控制位。也就是[5:7]位。
APSR(CPSR)与condition的关系图:
条件码可以加在指令中(上表中的Mnemonic extension),做为条件判断执行,类似C语言中的if语句。
例:
b指令加上条件码, BEQ label ( 注意存储在跳转指令中的实际值是相对当前PC 值的一个偏移量,而不是一个绝对地址,它的值 由汇编器来计算(参考寻址方式中的相对寻址)。它是 24 位有符号数,左移两位后有符号扩展 为 32 位,表示的有效偏移为 26 位(前后32MB 的地址空间)。
表示当之前的某条指令导致的条件码z=1是,跳转到label处执行。
只要条件码z不发生改变,就可以一直使用这种条件码,比果这条指令后又跟了几条
bicne r0, r0, #0x1f 表示如z==0, 将r0的[0:4]位清空。
orrne r0, r0, #0x13 表示如z==0, 将r0位或上0x13后的值设到r0
当这些指令后面加了S(如ADDS时),指令同时更新CPSR中的相应条件标志位。
比较指令 (CMP、CMN、TST、TEQ)不保存运算结果,只更新CPSR中相应的条件标志位。
它们总是会影响CPSR条件标志位.
2、CPSR格式及说明:
其中CPSR寄存器中保存程序在当前运行状态时cpu的运行状态, 包括了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。每一种处理器模式下都有一个专用的物理状态寄存器,称为 SPSR (备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用 SPSR 来恢复 CPSR 。由于用户模式和系统模式不是异常中断模式,所以他没有 SPSR 。当用户在用户模式或系统模式访问 SPSR ,将产生不可预知的后果。CPSR 格式如下所示(SPSR和CPSR格式相同)。
(1).条件码标志:N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。条件码标志各位的具体含义如下表所示:
标志位 | 含义 |
N | 当用两个补码表示的带符号数进行运算时,N=1表示运算的结果为负数;N=0表示运算的结果为正数或零 |
Z | Z=1表示运算的结果为零,Z=0表示运算的结果非零。 |
C | 可以有4中方法设置C位: -加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0 -减法运算(包括CMP):当运算时产生了借位时(无符号数溢出),C=0,否则C=1 -对于包含移位操作的非加/减运算指令,C为移出值的最后一位 -对于其它的非加/减运算指令,C的值通常不会改变 |
V | 可以有2种方法设置V的值: -对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出 -对于其它的非加/减运算指令,V的值通常不会改变 |
Q | 在ARM V5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。同样的spsr的bit[27]位也称为q标识位,用于在异常中断发生时保存和恢复CPSR中的Q标识位。在ARM V5以前的版本及ARM V5的非E系列的处理器中,Q标志位无定义 |
(2).控制位:CPSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器运行于特权模式时,这些位也可以由程序修改。
标志位 | 含义 |
I | IRQ中断禁止位。置1时,禁止IRQ中断 |
F | FIQ中断禁止位。置1时,禁止FIQ中断 |
T | 该位反映处理器的运行状态。当该位为1时,程序运行于THUMB状态,否则运行于ARM状态。该信号反映在外部引脚TBIT上。在程序中不得修改CPSR中的TBIT位,否则处理器工作状态不能确定。 |
M4-M0 | 这几位是模式位,这些位决定了处理器的运行模式 |
CPSR寄存器控制位设置方法:
其中cpsr_c代表的是这32位中的低8位,也就是控制位
当你看到有些程序里这样写
msr cpsr_c 0xd2 使用0xd2做为值来修改cpsr,但只修改cpsr的控制位。也就是[5:7]位。
APSR(CPSR)与condition的关系图:
条件码可以加在指令中(上表中的Mnemonic extension),做为条件判断执行,类似C语言中的if语句。
例:
b指令加上条件码, BEQ label ( 注意存储在跳转指令中的实际值是相对当前PC 值的一个偏移量,而不是一个绝对地址,它的值 由汇编器来计算(参考寻址方式中的相对寻址)。它是 24 位有符号数,左移两位后有符号扩展 为 32 位,表示的有效偏移为 26 位(前后32MB 的地址空间)。
表示当之前的某条指令导致的条件码z=1是,跳转到label处执行。
只要条件码z不发生改变,就可以一直使用这种条件码,比果这条指令后又跟了几条
bicne r0, r0, #0x1f 表示如z==0, 将r0的[0:4]位清空。
orrne r0, r0, #0x13 表示如z==0, 将r0位或上0x13后的值设到r0
相关文章推荐
- 影响CPSR状态寄存器的ARM汇编指令--总结
- 一个Spring事务中,前后两次数据库操作的影响关系
- ARM条件码与CPSR标志位的关系——cmp MOVLS与MOVHI 指令
- ARM 条件码 分支指令 比较指令 程序状态寄存器(CPSR)
- HC08传送类指令操作对CCR的影响如何?
- 移位操作对CPSR的影响
- 影响CPSR状态寄存器的ARM汇编指令--总结
- ARM MOV和 LDR指令关系
- 【oracle】truncate 操作对索引的影响
- 线程与working memory, main memory交互 和 JVM的执行指令 的关系
- 取得前一次MySQL操作所影响的记录行数
- 数据库跟丽军学 之二 关系数据库操作语言SQL(Structured Query Language, 结构化查询语言)
- C#中linq学习(Linq查询操作中的类型关系)示例
- git的实际操作指令总结
- 关于汇编语言寄存器和指令操作的整理 2010-05-16 15:22 by Create Chen
- centOS对文件和文件夹的一些操作指令
- 位操作指令小结
- 影响到Spark输出RDD分区的操作函数
- 2、shell指令操作【ubuntu】 - cp指令如何用管道传参数
- Entity Framework -- 添加,删除,修改,关系依附,关系摘除,验证操作