64位程序怎么判断指针是否有效_AArch64应用程序级编程模型

根据实现选择,体系结构支持多级执行特权,由从EL0到EL3的不同异常级别表示。EL0对应于最低的特权级别,通常被描述为无特权。应用层程序员模型是在EL0上执行软件的程序员模型。

系统软件决定异常级别,因此决定软件运行的特权级别。当操作系统同时支持EL1和EL0执行时,应用程序通常在EL0上运行。

  • 允许操作系统以唯一的或共享的方式将系统资源分配给应用程序。
  • 从其他进程中提供一定程度的保护,因此有助于保护操作系统免受软件故障的影响。

在EL0之上的任何异常级别执行通常被称为特权执行。

Registers in AArch64 state

R0-R30

31个通用寄存器,从R0到R30。每个寄存器可按以下方式访问:

一个64位通用寄存器,名为x0到x30。

一个32位通用寄存器,名为W0到W30。

v2-b81b31430e9f7b5a9b7b032d5906cba6_b.jpg

X30通用寄存器用作过程调用链接寄存器。

在指令编码中,值0b11111(31)用来表示ZR(零寄存器)。这表示参数接受值0,但不表示ZR是作为物理寄存器实现的。

SP

一个64位专用堆栈指针寄存器。堆栈指针最低有效的32位可以通过寄存器名WSP访问。

在指令中使用SP作为操作数,表示使用当前堆栈指针。

堆栈指针对齐到16字节边界在EL1是可配置的。

PC

保存当前指令地址的64位程序计数器。
软件不能直接写入PC。它只能在分支、异常条目或异常返回上更新。

试图执行未按字对齐的A64指令会产生PC对齐错误

V0-V31

32个SIMD&FP寄存器,从V0到V31。每个寄存器可按以下方式访问:

  • A 128-bit register named Q0 to Q31.
  • A 64-bit register named D0 to D31.
  • A 32-bit register named S0 to S31.
  • A 16-bit register named H0 to H31.
  • An 8-bit register named B0 to B31.
  • A 128-bit vector of elements.
  • A 64-bit vector of elements.

当寄存器名所描述的位的数量不占据整个SIMD&FP寄存器时,它指的是最不重要的位。

v2-282799ee2e790e399adf4cb778e0cbd5_b.jpg

FPCR, FPSR两个SIMD和浮点控制和状态寄存器

Process state, PSTATE

处理状态或PSTATE是处理状态信息的抽象。所有的指令集都提供了操作PSTATE元素的指令。

以下PSTATE信息可通过EL0访问:

状态标志

标志设置指令设置这些。它们是:

N :负状态标志。如果指令的结果是2的带符号整数,则PE将其设为:

1:如果结果是负数。

0:如果结果是正的或零。

Z :零状态标志。

1:如果指令的结果是零。

0:如果指令的结果不是零。

结果为零通常表示比较结果相等。

C:进位状态标志。设置为:

1:如果指令导致一个进位条件,例如一个由加法产生的无符号溢出。

0: otherwise.

V:溢出状态标志。设置为:

1:如果指令导致溢出,例如由加法产生的带符号溢出。

0: otherwise

条件指令测试N、Z、C和V条件标志,并将它们与指令的条件代码组合起来,以确定指令是否必须执行。这样,指令的执行取决于前一个操作的结果。

异常屏蔽位

D:调试异常掩码位。当启用EL0来修改掩码位时,该位是可见的,可以修改。但是,EL0在体系结构上忽略了这一点。

A: SError中断掩码位。

I:IRQ中断掩码位。

F: FIQ中断掩码位。

每一位的值是:

0:异常不被屏蔽。

1:异常被屏蔽。

使用AArch64状态访问EL0取决于SCTLR_EL1.UMA。

在EL0访问PSTATE字段

在使用AArch64状态的EL0上,可以使用特殊用途的寄存器来访问PSTATE字段,可以使用MRS指令直接读取PSTATE字段,并使用MSR (register)指令直接写入PSTATE字段了在PE位于EL0时使用AArch64访问保存AArch64状态的PSTATE字段的专用寄存器。所有其他PSTATE字段在EL0上没有直接读写访问。

v2-8a4ddd7f2bedb0e82fd935e5176ad09b_b.jpg

软件也可以使用MSR (immediate)指令直接写入PSTATE.{D, A, I, F}。可以直接写入PSTATE. {D, A, I, F} 的MSR (immediate)操作数。当PE在EL0使用AArch64状态。

v2-9d4ac7963e97e993e4b01d6c794c0e7b_b.jpg

但是,访问PSTATE.{D, A, I, F}字段在EL0使用AArch64状态取决于SCTLR_EL1.UMA。

对PSTATE字段的写操作对PE操作的各个方面都有副作用。所有这些副作用,是有保证的:

  • 对执行流中较早的指令不可见。
  • 对执行流中的后续指令可见。

System registers

系统寄存器为执行控制、状态和一般系统配置提供支持。在EL0中,大多数系统寄存器是不可访问的。

然而,一些系统寄存器可以配置为允许从在EL0执行的软件进行访问。从EL0到系统寄存器的任何访问都禁用了访问权限,这将导致指令表现为未定义。可以从EL0访问的寄存器有:

Cache ID registers

CTR_EL0和DCZID_EL0寄存器为EL0缓存管理支持提供实现参数。

Debug registers

MDCCSR_EL0、DBGDTR_EL0、DBGDTRRX_EL0和DBGDTRTX_EL0寄存器支持调试通信通道。

Performance Monitors registers

Performance Monitors扩展提供计数器和配置寄存器。在EL1或更高的异常级别执行的软件可以将其中一些寄存器配置为可在EL0访问。

Activity Monitors registers

活动监视器扩展提供计数器和配置寄存器。在EL1或更高的异常级别执行的软件可以将这些寄存器配置为可在EL0访问。

Thread ID registers

TPIDR_EL0和TPIDRRO_EL0寄存器是两个具有不同访问权限的线程ID寄存器。

Timer registers

在ARMv8中执行以下操作:

  • 使用CNTFRQ_EL0读取对系统时钟频率的访问。
  • 物理和虚拟计时器计数寄存器,CNTPCT_EL0和CNTVCT_EL0。
  • 物理上计数比较、下计数值和计时器控制寄存器CNTP_CVAL_EL0、CNTP_TVAL_EL0和CNTP_CTL_EL0。
  • 虚拟计数比较、下计数值和计时器控制寄存器CNTV_CVAL_EL0、CNTV_TVAL_EL0和CNTV_CTL_EL0。

软件控制功能和EL0

异常处理

在Arm架构中,异常会导致程序流的更改。异常处理程序的执行从与所采取的异常相关的已定义向量开始,其异常级别高于EL0。

异常包括:

  • Interrupts.
  • Memory system aborts.
  • 试图执行未定义的指令时生成的异常。
  • 系统调用。
  • Secure monitor or Hypervisor traps.
  • Debug exceptions.

异常处理的大多数细节对应用程序级软件是不可见的,

SVC指令导致一个管理器调用异常。这为非特权软件提供了一种对操作系统进行系统调用的机制。

BRK指令生成一个断点指令异常。这提供了一种使用在相同PE上执行的调试器来调试软件的机制,

BRK指令只支持A64指令集。T32和A32指令集中的等效指令是BKPT。

等待中断和事件

发出WFI指令表示在WFI唤醒事件发生之前不需要进一步执行,这允许进入低功率状态。

发出WFE指令表示在WFE唤醒事件发生之前不需要进一步执行,这允许进入低功率状态。

The YIELD instruction

YIELD指令提供了一个提示,说明线程执行的任务的重要性很低,因此它可以YIELD,这种机制可用于提高对称多线程(SMT)或对称多处理(SMP)系统的整体性能。

YIELD指令可能被使用的例子包括位于自旋锁中的线程,或者SMP系统中snoop位的仲裁优先级被修改的地方。YIELD指令允许SMT和SMP系统之间的二进制兼容性。

YIELD指令是一个NOP (无操作)提示指令。

YIELD指令在单线程系统中没有任何作用,但是这类系统的开发人员可以使用该指令来标记将来迁移到多处理器或多线程系统的预期用途。操作系统可以在需要YIELD提示的地方使用YIELD,因为它们知道,如果没有实现上的好处,那么它将被视为NOP。

应用程序级缓存管理

在EL0上,可以使用SCTLR_EL1系统寄存器从更高级别的特权启用少量缓存管理指令。从EL0到禁用访问权限的操作的任何访问都将导致该指令表现为未定义的。

与调试相关的说明

引用BRK指令,BRK指令生成断点指令异常。此外,在AArch64状态和AArch32状态下,HLT指令会导致PE停止执行并进入调试状态。这为使用PE外部的调试器调试软件提供了一种机制

在AArch32状态下,以前版本的体系结构定义了DBG指令,这可以为调试系统提供提示。在ARMv8中,这条指令作为NOP执行。Arm不赞成使用DBG指令。

关于 PSTATE.DIT

Data Independent Timing (DIT) bit.

只有在实现ARMv8.4-DIT时才会实现这个位。

在重置为AArch64状态时,该位设置为0。

为数据处理指令提供了独立的定时功能

PSTATE。说,CPSR。说字段。

当 PSTATE.DIT为1时:

  • DIT中列出的指令是必须要有的;
    • 与任何寄存器中提供的数据值和NZCV标志的值无关的时序。
    • 对异步异常的响应不会根据其寄存器中提供的值或NZCV标志的值而变化。
  • 所有加载和存储都必须具有对加载或存储的数据的值不敏感的定时。

ARM建议ARMv8.3指针身份验证指令的时间不依赖于指针身份验证中使用的键值,而与PSTATE.DIT无关。

当PSTATE.DIT的值是0,架构没有声明任何指令的时序属性。然而,这些指令很可能具有在许多情况下数据不变的时序。

对应的DIT位被添加到AArch64状态的PSTATE和AArch32状态的CPSR。

当异常从AArch64状态转移到AArch64状态时,PSTATE.DIT将它复制到SPSR_ELx.DIT。

当一个异常从AArch32状态变为AArch64状态时,CPSR.DIT将它复制到SPSR_ELx.DIT。

当一个异常从AArch64状态返回到AArch64状态时,SPSR_ELx.DIT复制到PSTATE.DIT。

当一个异常从AArch64状态返回到AArch32状态时,SPSR_ELx.DIT它被复制到CPSR.DIT。

PSTATE.DIT 它可以在所有异常级别读写。

PSTATE.DIT 进入调试状态时DIT没有改变。

PSTATE.DIT 它不能保证在调试状态下有任何效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

n个小球放入m个盒子中_飞么盒子卫生巾自助售卖机前景

嘿,你有没有经历过,出门在外来大姨妈却没带M巾呢?尴尬丛生的你选择怎么做?现在,有了新选择,这也是今天我们迫不及待想要和你们介绍的新朋友—飞么盒子,由Faimes飞么品牌自主研发出品的卫生巾售卖…

Android代码设置角标,Android上的Badge,快速实现给应用添加角标

应用角标是iOS的一个特点,原生Android并不支持。或许是由于当时iOS的通知栏比较鸡肋(固然如今已经改进了不少),而Android的通知栏功能强大?因此才出现了一方依赖于数字角标,一方坚持强大的通知栏,在平常使用中这两种交…

opencv模糊图像变清晰_opencv-python 4.2图像模糊

图像模糊可以去除噪音。import cv2 import numpy as npimage cv2.imread("dogcat1.jpg") cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE) cv2.imshow("input image", image)#均值模糊 dst cv2.blur(image, (5, 5)) cv2.imshow("…

datatable怎么根据两列分组_公司要IT转型,我该怎么办?用Python进行数据处理

“ 以后数据处理,都用pandas”01 面临问题作为运维人员,每周要统计很多数据,特别是周四写周报的时候,基本要花半天时间。既然已经学了Python,那就试试优化它。以统计不同厂家、不同设备类型告警量为例。需要将多份类似…

C语言非常大的数组,关于最大子数组问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼纯新手,最近想学一下算法,上网看了个教程,看到了一个很经典的返回最大子数组之和的问题,然后我想问一下我用分治法把最大和求出来了,但是要怎么返回子数组本身呢&#xff…

pandas尾部添加一条_Numpy与Pandas

Numpy#导入numpy包 import numpy as np ##from numpy import * #定义数组 #一维数组 anp.array([1,2,3,4]) #二维数组 bnp.array([(1,2,3),(4,5,6)]) #定义数组类型 cnp.array([(1,2),(3,4)],dtypecomplex) #array([[ 1.0.j, 2.0.j],[ 3.0.j, 4.0.j]])#数组的维数 a.shape #(…

easyexcel 在 设置标题_阿里开源(EasyExcel)

阿里开源(EasyExcel)---导出EXCEL - 请叫我猿叔叔的博客 - CSDN博客https://blog.csdn.net/qq_35206261/article/details/88579151一. 简介导出是后台管理系统的常用功能,当数据量特别大的时候会内存溢出和卡顿页面,曾经自己封装过一个导出,P…

android webview 劫持,安卓包风险安全监测提示存在Activity劫持、WebView远程代码执行,请问怎么解决?...

挺着急的,请问这个怎么解决1、Activity劫持用例名称:Activity劫持风险系数:高风险编号:NESUN-2016-82091, CWE-94,风险描述:攻击者劫持目标Activity并制造跟目标Activity界面相似度很高的界面迷惑用户,可能…

python爬虫获取url_Python爬虫如何获取页面内所有URL链接?本文详解

如何获取一个页面内所有URL链接?在Python中可以使用urllib对网页进行爬取,然后利用Beautiful Soup对爬取的页面进行解析,提取出所有的URL。什么是Beautiful Soup? Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索…

iview table增加一行减少一行_PQ入门函数:Table.ReplaceValue

一、基础介绍Table.ReplaceValue函数的官方说明如下:Table.ReplaceValue(table as table, oldValue as any, newValue as any, replacer as function, columnsToSearch as list)该函数实现的功能是将Table中的值替换成新值,语法翻译成汉语大致如下&#…

android so文件崩溃,android 7.0 因为.so文件而崩溃事件解决

菜鸟进场,方圆十里,寸草不生现在基本都在用第三方的分享,但是不知道为什么,脑残的准备自己集成微博的第三方分享,本来一路躺坑都过来了,不过遇到一个奇葩的问题,软件在android N上会崩溃&#x…

gprs模块ftp 远程升级_基于GPRS无线通信技术的冷链监测系统

GPRS(general packet radio service)是通用分组无线业务的简称,该技术建立在GSM网络的基础上,被称为2.5 代移动通信技术,它将无线通信与Internet 紧密结合。基于GPRS的远程数据采集系统是通过中国移动的GPRS无线通信网…

小米登录协议分析_联想前副总裁常程跳槽小米数月后,波澜再起

► 文 观察者网 吕栋今年初,联想集团前副总裁常程离职2天即加盟小米,这一举动是否违反竞业协议,双方当时曾各执一词。最近,由于联想方面在北京提起劳动仲裁,此事也再度引发舆论关注。9月21日,针对“联想与…

html播放rtmp直播流,video.js实现浏览器播放rtmp协议直播流的问题

<!DOCTYPE html><html><head><meta charset"UTF-8"><title>使用video.js实现rtmp流的直播播放</title><!--引入播放器样式--><link href"http://vjs.zencdn.net/5.19/video-js.min.css" rel"stylesheet…

plsql打开sql窗口快捷键_巧用Navicat for MySQL的快捷键

php中文网最新课程每日17点准时技术干货分享巧妙地使用 Navicat for MySQL 快捷键&#xff0c;可以大大提高工作效率&#xff0c;本篇经验将分类介绍Navicat for MySQL快捷键。ctrlq 打开查询窗口ctrl/ 注释sql语句ctrlshift / 解除注释ctrlr 运行查询窗口的sql语句ctrlshiftr …

值从哪里来_Linux used内存到底去哪里了呢?

Linux used内存到底去哪里了呢&#xff1f;阅读文章之前请先思考这么个问题我ps aux看到的RSS内存只有不到30M&#xff0c;但是free看到内存却已经使用了7,8G了&#xff0c;已经开始swap了&#xff0c;请问ps aux的实际物理内存统计是不是漏了哪些内存没算&#xff1f;我有什么…

html文本最小长度,CSS中处理不同长度文本的几种小技巧

CSS中处理不同长度文本的几种小技巧【推荐教程&#xff1a;CSS视频教程 】当我们使用 CSS 构建布局时&#xff0c;考虑长短文本内容很重要&#xff0c;如果能清楚地知道当文本长度变化时需要怎么处理&#xff0c;可以避免很多不必要的问题。在许多情况下&#xff0c;添加或删除…

python将列表中反序输出_python中sorted怎么反序排列

2017-10-30 回答 【python】 sorted函数 我们需要对list、dict进行排序&#xff0c;python提供了两个方法 对给定的list l进行排序&#xff0c; 方法1.用list的成员函数sort进行排序&#xff0c;在本地进行排序&#xff0c;不返回副本 方法2.用built-in函数sorted进行排序&…

matlab 判断鼠标按下_Simulink(其他校验模块)+Matlabgui(鼠标响应事件)+Stateflow汽车运动逻辑状态(二)...

1 SimulinkSimulink-其他校验模块 如下图所示为一些其他的校验模块&#xff0c;分别为声明模块&#xff0c;离散梯度模块&#xff0c;输入分辨率检测模块&#xff1b;声明模块&#xff1a;当输入值非零时检测通过&#xff0c;当输入值中包含有0时&#xff0c;检测模块报错。…

鸿蒙电脑操作系统最新消息,5G专家预测:7年后鸿蒙将成全球第一大操作系统

在公布两年之后&#xff0c;华为的鸿蒙系统历尽千难万险&#xff0c;蓄势待发&#xff0c;即将在6月2日的线上发布会上正式发布。对于鸿蒙的前景&#xff0c;通信行业的 5G 专家项立刚在接受采访中&#xff0c;在谈到对鸿蒙的看法时&#xff0c;他表示他相信 7 年后鸿蒙会成为全…