刘帅嵌入式系统-当前程序状态寄存器(cpsr)

2023-12-09 17:18

本文主要是介绍刘帅嵌入式系统-当前程序状态寄存器(cpsr),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CPSR的格式如下图。SPSR格式与CPSR格式相同。

 

1、条件标志位

N(Negative)、Z(Zero)、C(Carry)及V(oVerflow)统称为条件标志位。大部分的ARM指令可以根据CPSR中的这些条件标志位选择性地执行。各条件标志位的具体含义如下。

N:当两个补码表示的有符号整数运算时,N=1表示运算的结果为负数;N=0表示结果为整数或零。

Z:Z=1表示运算结果为零;Z=0表示运算结果不为零。对于CMP指令,Z=1表示进行比较的两个数大小相等。

C:下面介绍4种情况C的设置方法。

--在加法指令中(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号数运算发生上溢出;其他情况下C=0。

--在剑法指令中(包括比较指令CMP),当运算中发生借位,则C=0,表示无符号数运算发生下溢出;其他情况下C=1。

--对于包含移位操作的非加/减发运算指令,C中包含最后一次被溢出的位的数值。

--对于其他非加/减法运算指令,C位的值通常不变。

V:对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。通常其他的指令不影响V位,具体可参考各指令的说明。

2、CPSR中的控制位

CPSR的低8位I、F、T及M[4:0]统称为控制位。当异常发生时,这些位发生变化,在特权级的处理器模式下,软件可以修改这些控制位。

1)中断禁止位

-- I=1时,禁止IRQ中断。

-- F=1时,禁止FIQ中断。

2)T控制位

T控制位用于控制指令执行的状态,级说明本指令时ARM指令,还是Thumb指令。但对于不同版本的ARM处理器,T控制位的含义不同。

对于ARMv3和ATMv4的非T系列版本的处理器,没有ARM状态和Thumb状态切换,固T=0。

对于ARMv4以及更高的版本的T系列处理器,T含义如下:

-T=0表示执行ARM指令。

-T=1表示执行Thumb指令。

对于ARMv5以及更高的、版本的非T系列的ARM处理器,T含义如下:

-T=0表示执行ARM指令。

-T=1表示强制下一条执行的指令产生未定义指令中断。

3)M控制位,可参考上图所示。

3、CPSR中的其他位

CPSR中的其他位用于将来ARM版本的扩展。应用软件不要操作这些位,以免与ARM将来版本的扩展冲突。

这篇关于刘帅嵌入式系统-当前程序状态寄存器(cpsr)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/474496

相关文章

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

ubuntu20.0.4系统中安装Anaconda的超详细图文教程

《ubuntu20.0.4系统中安装Anaconda的超详细图文教程》:本文主要介绍了在Ubuntu系统中如何下载和安装Anaconda,提供了两种方法,详细内容请阅读本文,希望能对你有所帮助... 本文介绍了在Ubuntu系统中如何下载和安装Anaconda。提供了两种方法,包括通过网页手动下载和使用wg

ubuntu系统使用官方操作命令升级Dify指南

《ubuntu系统使用官方操作命令升级Dify指南》Dify支持自动化执行、日志记录和结果管理,适用于数据处理、模型训练和部署等场景,今天我们就来看看ubuntu系统中使用官方操作命令升级Dify的方... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

防止SpringBoot程序崩溃的几种方式汇总

《防止SpringBoot程序崩溃的几种方式汇总》本文总结了8种防止SpringBoot程序崩溃的方法,包括全局异常处理、try-catch、断路器、资源限制、监控、优雅停机、健康检查和数据库连接池配... 目录1. 全局异常处理2. 使用 try-catch 捕获异常3. 使用断路器4. 设置最大内存和线