操作影响cpsr的条件码的指令(teq等),与影响关系

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 格式如下所SPSRCPSR格式相同)

(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标志位无定义
 
 
 
 
 
 
 
 
 
 
 
在ARM状态下,绝大多数的指令都是有条件执行的;在THUMB状态下,仅有分支指令是条件执行的

(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的关系图:

操作影响cpsr的条件码的指令(teq等),与影响关系_第1张图片

条件码可以加在指令中(上表中的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




你可能感兴趣的:(arm汇编)