32位PowerPC构架通用寄存器分析及总结三
- 格式:doc
- 大小:151.50 KB
- 文档页数:6
32位PowerPC构架通用寄存器分析及总结一第一部分 32位 PowerPC构架下寄存器概述32 位PowerPC构架寄存器模型可以分成三个类级别:UISA,VEA,OEA,我们根据这三个级别把PowerPC所使用的所有寄存器分为三类:第一类:用户指令集构架(UISA-User Instruction Set Architecture)下所使用的寄存器;第二类:虚拟环境构架(VEA-Virtual Environment Architecture)下所使用的寄存器;第三类:操作系统环境(OEA-Operating Environment Architecture)下所使用的寄存器;PowerPC指令集构架为所有的算术逻辑运算指令定义了“寄存器到寄存器”格式的指令,这些指令的操作数来自或者来自于寄存器,或者来自于指令中的立即数。
而对于“三寄存器”格式的指令,PowerPC指令集定义其中一个寄存器用来存目的操作数,另外两个寄存器用来存放源操作数。
这样的话,存放源操作数的寄存器还可以被其它指令使用,从而减少了某些操作的指令数目。
并且对于访问寄存器,PowerPC构架定义了明确的load和store访存指令(这是RISC指令集的典型特点)。
备注:寄存器中的保留位允许软件写任何值(其实就是0或者1),但是读出来的值,未必是我们写出来的值。
它的值依赖于具体的执行系统。
接下来,我们分别来介绍这三类寄存器。
第二部分 UISA寄存器集合用户模式下的寄存器可以被所有的用户级软件和特权级软件所使用,它包含以下的寄存器:32个通用寄存器GPRs(General-purpose registers):GPR0-GPR31;32个浮点寄存器FRPs(Floating-point registers):FPR0-FPR31;1个条件寄存器:CR(Condition register);1个XER寄存器;1个LR(Link register)寄存器;1个CTR(Count register)寄存器;1个浮点状态控制寄存器:FPSCR(Floating-point status and control register);备注:不管是单精度数还是双精度数,在浮点寄存器中都是以双精度格式存储。
powerpc寄存器学习笔记今天谈一下E500中的系统级寄存器,也就是在内核态可以访问的寄存器,主要给操作系统用的。
这里主要说的是比较通用的几个寄存器,与中断,Cache和MMU有关的将在后面谈到这些内容的时候涉及到。
首先说一下访问系统级寄存器的指令:mfspr和mtspr。
E500会对各个寄存器进行编址,一般指令形式就是“mtspr 268, r3”或者“mfspr r3, 268”。
MSR(Machine State Register)寄存器。
用于设置CPU核心的状态,初始化CPU时第一个设置的寄存器。
不过这个寄存器不能通过mfspr/mtspr指令对访问,有一对特殊的指令mfmsr/mtmsr。
其中有几个重要的位需要提一下:UCLE(User-mode Cache Lock Enable,第37位)。
为1时程序运行在用户模式也可以锁定Cache行。
SPE(SPE Enable,第38位)。
为1时使能SPE。
WE(Wait State Enable,第45位)。
与HID0寄存器的DOZE,NAP和SLEEP位联合使用可以设置E500进入等待模式。
CE(Critical Enable,第46位),ME(Machine Check Enable,第51位),DE(Debug Interrupt Enable,第54位)。
用于使能和关闭Critical异常,Machine check异常和Debug异常。
EE(External Enable,第48位)。
为1时使能外部中断,为0时屏蔽外部中断。
当处理器进入中断处理时会自动屏蔽该位。
使用方法与MIPS的SR(IE)位很象。
同时E500还提供了wrtee和wrteei 指令对该位进行修改,就像MIPS中的ei与di指令。
PR(第49位)。
为0表示处理器在内核模式,为1表示处理器在用户模式。
IS,DS(第58,59位)。
E500支持两个地址空间——0和1。
PowerPC简介及编程一,PowerPC芯片PowerPC是早期Motorola和IBM联合为Apple的MAC机开发的CPU芯片,商标权同时属于IBM和Motorola,并成为他们的主导成品.IBM主要的PowerPC产品有PowerPC604s(深蓝内部的CPU),PowerPC750,PowerPCG3(1.1GHz).Motorola主要有MC和MPC系列.尽管他们产品不一样,但都采用PowerPC的内核.这些产品大都用在嵌入式系统中.Motorola的MPC860简介MPC860 PowerQUICC (Quad Integrated Communications Controller) 内部集成了微处理器和一些控制领域的常用外围组件, 特别适用于通信产品. 包括器件的适应性, 扩展能力和集成度等. MPC860 PowerQUICC集成了两个处理块.一个处理块是嵌入的PowerPC核, 另一个是通信处理模块( CPM, Communications Processor Module), 通信处理模块支持四个串行通信控制器(SCC, Serial Communication Controller), 实际上它有八个串行通道: 四个SCC,两个串行管理控制器(SMC, Serial Management Channels), 一个串行外围接口电路( SPI, Serial Peripheral Interface ) 和一个I2C( Inter-Integrated Circuit ) 接口. 由于CPM分担了嵌入式PowerPC核的外围工作任务, 这种双处理器体系结构功耗要低于传统的体系结构的处理器.单出口, 嵌入式PowerPC核32比特版本(与PowerPC结构定义完全兼容)32x32位通用寄存器(GPRs, General Purpose Registers)o4K数据Cache和4K指令Cache, 分别带有一个MMU.o存储管理单元(MMU)32-输入翻译后备缓冲器( TLBs )o32位数据,地址线∙存储控制器(八个存储体)o单线存储模块无逢接口,静态随即存取存储器(RAM), EPROM, FLASH MEMORY或DRAM等。
[整理]寄存器详细讲解-------------寄存器32位CPU的寄存器结构寄存器是中央处理器内的组成部分。
寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。
在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。
在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
目录编辑本段寄存器英文名称:Register寄存器寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。
寄存器通常都是以他们可以保存的位元数量来估量,举例来说,一个“8 位元寄存器”或“32 位元寄存器”。
寄存器现在都以寄存器档案的方式来实作,但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出来。
寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。
更适当的是称他们为“架构寄存器”。
例如,x86 指令集定义八个32 位元寄存器的集合,但一个实作x86 指令集的CPU 可以包含比八个更多的寄存器。
寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。
编辑本段分类数据寄存器- 用来储存整数数字(参考以下的浮点寄存器)。
在某些简单/旧的CPU,特别的数据寄存寄存器器是累加器,作为数学计算之用。
地址寄存器- 持有存储器地址,以及用来访问存储器。
在某些简单/旧的CPU里,特别的地址寄存器是索引寄存器(可能出现一个或多个)。
通用目的寄存器(GPRs)- 可以保存数据或地址两者,也就是说他们是结合数据/地址寄存器的功用。
浮点寄存器(FPRs) - 用来储存浮点数字。
常数寄存器- 用来持有只读的数值(例如0、1、圆周率等等)。
向量寄存器- 用来储存由向量处理器运行SIMD(Single Instruction, Multiple Data)指令所得到的数据。
特殊目的寄存器- 储存CPU内部的数据,像是程序计数器(或称为指令指针),堆栈寄存器,以及状态寄存器(或称微处理器状态字组)。
32位PowerPC常用指令集总结第一部分PowerPC 精简指令集计算机(RISC)简介PowerPC 体系结构是一种精减指令集计算机(Reduced Instruction Set Computer,RISC)体系结构,定义了200 多条指令。
PowerPC 之所以是RISC,原因在于大部分指令在一个单一的周期内执行,而且通常只执行一个单一的操作(比如将内存加载到寄存器,或者将寄存器数据存储到内存)。
PowerPC 体系结构分为三个级别(或者说是“book”)。
通过对体系结构以这种方式进行划分,为实现可以选择价格/性能比平衡的复杂性级别留出了空间,同时还保持了实现间的代码兼容性。
Book I. 用户指令集体系结构(Power ISA User Instruction Set Architecture)定义了通用于所有PowerPC 实现的用户指令和寄存器的基本集合。
这些是非特权指令,为大多数程序所用。
Book II. 虚拟环境体系结构(Power ISA Virtual Environment Architecture)定义了常规应用软件要求之外的附加的用户级功能,比如高速缓存管理、原子操作和用户级计时器支持。
虽然这些操作也是非特权的,但是程序通常还是通过操作系统调用来访问这些函数。
Book III. 操作环境体系结构(Power ISA Operating Environment Architecture)定义了操作系统级需要和使用的操作。
其中包括用于内存管理、异常向量处理、特权寄存器访问、特权计时器访问的函数。
Book III 中详细说明了对各种系统服务和功能的直接硬件支持。
由于我目前手上的开发板是基于e600内核,所以我在学习PowerPC指令集的过程中,顺便总结了e600内核常用的指令集,如果大家发现我总结的指令集有错误或者不准确的地方,欢迎留言指出来,O(∩_∩)O~第二部分e600指令集飞思卡尔的e600内核实现了booke内核构架中64位指令集的中的32位指令(即在e600的32位寄存器中,第0位相当于booke中的64寄存器的第32位,第31位相当于booke中64寄存器的第63位),E600内核采用大端编码方式,指令的第0位是MSB(Most Significant Bit)位,第31位是LSB(Least Significant Bit)。
32位汇编入门知识简介:汇编语言是一种低级语言,它直接表达了计算机的指令和数据。
本文将介绍32位汇编语言的入门知识,包括寄存器、指令、堆栈和函数调用等内容。
一、寄存器寄存器是CPU内部用来存储和操作数据的部件,32位汇编语言中常用的寄存器有EAX、EBX、ECX、EDX等。
每个寄存器都有特定的用途,例如EAX通常用于存放函数返回值,EBX通常用于存放基址。
二、指令指令是汇编语言中最基本的单位,它表示一条计算机指令。
常见的指令有MOV、ADD、SUB等。
例如,MOV指令用于将数据从一个地方移动到另一个地方,ADD指令用于进行加法运算。
三、堆栈堆栈是用于存储临时数据的一种数据结构,它具有“先进后出”的特点。
在汇编语言中,堆栈用于保存函数的局部变量、函数参数和返回地址等信息。
例如,PUSH指令用于将数据压入堆栈,POP指令用于将数据从堆栈中弹出。
四、函数调用函数调用是程序中常见的操作,它用于实现代码的模块化。
在汇编语言中,函数调用通常需要进行参数传递和返回值处理。
例如,CALL 指令用于调用函数,RET指令用于从函数返回。
五、例子下面通过一个简单的例子来演示32位汇编语言的使用:```assemblysection .datamsg db 'Hello, World!', 0section .textglobal _start_start:; 输出字符串mov eax, 4mov ebx, 1mov ecx, msgmov edx, 13int 0x80; 退出程序mov eax, 1xor ebx, ebxint 0x80```这是一个输出"Hello, World!"的程序。
首先将字符串存储在.data节中的msg变量中。
然后在.text节中定义了一个入口点_start,通过将相关参数设置到寄存器中,调用系统调用int 0x80来实现输出和退出。
六、总结本文介绍了32位汇编语言的入门知识,包括寄存器、指令、堆栈和函数调用等内容。
PowerPC汇编指令集简析在了解PowerPC汇编指令前,需要先看下编程所用的寄存器模型,PowerPC 系统结构为大多数运算指令都定义了Register-Register的操作,这些操作的源操作数从寄存器取得,或作为嵌入指令操作码中的立即数提供。
这里的e300核可分为用户编程模型和管理员编程模型,该模型有32个GPR、32个FPR、特殊目的寄存器SPR和一些功能寄存器,下图为二者的示意图:上面这些寄存器可能不太好理解,因为名字和Intel汇编不一样,其实,可以这样理解,GPR就相当于EAX/EBX/ECX,而CTR则完全就是ECX的功能,是吧?区别就是没有堆栈而已咯。
CR被分为8段,每段4位,分别代表LT、GT、EQ和SO(小于、大于、等于和溢出);LR用于记录跳转地址;特殊寄存器XER用于记录溢出和进位标志;FPSCR用于记录浮点运算类型和异常等。
再看下指令集,大部分的CPU指令集可分为:数据读写、数值计算、流程控制和设备管理四个部分,由于PowerPC使用RISC,指令字长为32bit,Endian一般是可调的,默认为大端,另外,PowerPC没有栈,所以程序需要自己实现相关操作。
首先为运算和逻辑指令,列举如下:它们与通用寄存器有关,源数据来自GPR 或16 位立即数,目的是GPR 寄存器,操作为32 位,GPR 中存放32 位更新数据。
大多数指令都可以根据字面意思理解其作用,注意还有一个“cntlzw”指令,意为计算字中的第一个0,用于在一个字中找到1时将一个指令中的0的数量找出,它在决定例外寄存器中最高优先服务时有用。
下面是数据读写指令,它们对数据在存储器中核通用寄存器中的传送很有用,若数据小于传送长度(单字,半字或字节),指令会使数据变位为32位,将不同位填0或符号扩展。
指令列举如下:这里需要注意的是上面列举的lbz和lhz两个指令并不完全等同于moval,[ebx]和mov ax,[ebx+10]这两个,因为前面两个是将字节和半字加载到r3时还清空了高位,而后两条指令只是加载数据到eax,并不会清空高位。
32位PowerPC构架通用寄存器分析及总结三4.6SR(Segment Registers)寄存器OEA定义了16个32位的SR寄存器,段寄存器SR可以使用mtsr/mfsr,mtsrin/mfsrin指令进程访问。
随着CR[0]位(我们称之为T位)的值的不同,CR寄存器有两种不同的格式。
当T位为1时格式如下:CR[1]位:系统模式保护位CR[2]位:用户模式保护位CR[3]位:不可执行保护位CR[4:7]位:保留位CR[8:31]位:VSID位,我们在4.5节页面地址映射中已经看到该位段的作用。
当T位为0时格式如下:CR[1]位:系统模式保护位CR[2]位:用户模式保护位CR[3]位:不可执行保护位CR[3:11]位:Bus unit IDCR[12:31]位:Device-specific data for I/O controller备注:这个位段,我现在不清楚,暂时附上datasheet原文,以后再修改O(∩_∩)O~4.7 DAR(Data Address Register)寄存器存放访存指令产生的引发中断的有效地址,比较简单。
格式如下:4.8 SPRG0–SPRG3寄存器提供给操作系统使用,格式如下:SPRG0:操作系统可能会加载一个独立的物理地址到该寄存器中,来标识一个内存区域是第一级的中断句柄专用的。
SPRG2:可以被第一级的中断来保存通用寄存器的内容,该内容可以作为内存中保存其它通用寄存器的基地址。
SPRG2和SPRG3可以在操作系统需要时使用!备注:E600有8个SPRGs寄存器。
4.9 DSISR寄存器用来决定DSI中断的中断源,格式如下:4.10 SRR0(Machine Status Save/Restore Register 0)寄存器当发生中断时,SRR0用来保持中断发生的那一刻MSR的状态,当中断返回结束执行rfi指令时,SRR0用来恢复MSR寄存器的值,它也可以用来保持系统调用之前的那条指令的有效地址,当系统中断结束时会执行rfi指令,汇编SPR0保持的地址赋值给NIA(Next Instruction Address)寄存器(也就是我们通常说的PC寄存器)格式如下:4.11 SRR1(Machine Status Save/Restore Register 1)该寄存器同4.104.12 FPECR(Floating-Point Exception Cause Register)FPECR寄存器用来支持产生浮点中断的原因。
备注:E600没有浮点预算单元,因而也就没有FPECR寄存器4.13 TB(Time Base Facility)寄存器组TB寄存器组提供了一个可以被执行相关的频率驱动的长周期的计数器。
VEA定义用户模式下的程序可以读取TB寄存器的值,而在系统模式下的程序,比如操作系统或者一些系统引导例程可以修改该寄存器。
OEA定义系统模式可以写入值到TB寄存器。
备注:TB寄存器是一种易失性(volatile)资源,可以在系统重启的时候初始化,但是并不能保证在处理器重启的时,一定会初始化该寄存器。
我们可以使用mttbl 和mttbu指令来修改TB寄存器的低32位TBL寄存器和高32位TBU 寄存器。
mttbl ,mttbu和mtspr把TBL和TBU当做普通的32位寄存器来处理,修改一个寄存器的值时不会影响到另一个寄存器。
写入TB寄存器组的指令序列如下:lwz rx,upper #load 64-bit value forlwz ry,lower # TB into rx and ryli rz,0mttbl rz #force TBL to 0mttbu rx #set TBUmttbl ry #set TBL,备注:我们假设后面三条指令执行时,没有中断产生。
同时我们应该下赋值TBL寄存器,这样可以防止进位的产生。
读取TB寄存器组的值可以使用下面的指令序列如下:loop:mftbu rx #load from TBUmftb ry #load from TBLmftbu rz #load from TBUcmpw rz,rx #see if ‘old’ = ‘new’bne loop #loop if carry occurred备注:循环比较也是为了防止进位产生!4.14 DEC(Decrementer Register)寄存器32位的DEC寄存器包含一个32位的递减计数器,它提供了一种机制为可编程的软件延迟提供了递减中断,递减的频率和TB寄存器组一样,也是基于通用的系统实现的时钟频率。
DEC寄存器的格式如下:在MSR[EE]=1情况下,当DEC寄存器的值递减到0时,会引发一个中断操作,下面的任何一个条件程序都会引发一个DEC中断:1:对TB寄存器组的操作和对DEC的操作是一致的,因为他们的计数器的更新基于相同的时钟源;2:从DEC寄存器中取一个值到通用寄存器GPRs中,对DEC寄存器的计数器没有任何影响;3:可用一个GPRs中的值来更新DEC寄存器的值4:当DEC寄存器的第0位从0变到1,就会产生一个递减中断请求;5:DEC寄存器的内容可以被被软件修改,并且DEC寄存器的第0位从0变为1,将会引发DEC中断。
我们可以使用处在系统模式下的mfspr和mtspr指令来读和写DEC寄存器器,这两条指令都有他们的简写形式,例如:mtdec rA解释:把rA寄存器的内容写入DEC寄存器,相当于使用mtspr指令mfdec rA解释:读取DEC寄存器的值到rA寄存器,相当于使用mfdec指令4.15 DABR(Data Address Breakpoint Register)寄存器DABR寄存器控制着数据断点的功能,该功能对PowerPC构架来说是可选的,但是PowerPC 构架推荐执行该功能,但是并不是必须的。
数据断点功能用来探测对双字的读取,对地址的比较使用的是有效地址(EA),并且仅用于取数据,不用于取指令!DABR寄存器的格式如下:DABR[0:28]:数据地址断点DABR[29]:开启断点映射DABR[30]:开启断点写DABR[31]:开启断点读使用条件:该指令仅用于load和store指令,当下面条件都满足是,数据断点探测机制将会开启:1:EA[0:28]= DABR[0:28]2:MSR[DR]=DARB[29]3:如果是store指令时,DABR[30]=1;如果是取指令时DABR[31]=1;4.16 EAR(External Access Register)寄存器32位的EAR寄存器为外部控制操作指定外部设备,为用户模式下的指令和指定外部设备的通信提供了一种机制。
格式如下:EAR[0]:使能位为0禁用该寄存器,当使用eciwx或者ecowx指令时会引发DSI中断位1开始改寄存器,当使用eciwx或者ecowx指令时将会执行指定的外部操作EAR指令可以被mtspr和mfspr读取。
备注一:EAR寄存器指定支持eciwx(External Control In Word Indexed)指令,和ecowx(External Control Out Word Indexed)指令,虽然该指令的使用是系统级的,但是操作系统可以决定哪一个可以使用这两条指令。
需要指出的eciwx和ecowx使用的有效地址EA的转换,以及对ecowx所传输的32bit的字的内容并不是有操作系统决定的,而是有目标外部设备决定的,尽管内存方位模式WIMG 被设置为0b0101(该位表示禁用Cache,CPU不保证由它发起的每一条访问指令都保证内存一致性),这两条指令仍然可以正常执行。
备注二:关于WIMG位所有取指和取数指令都是由WIMG控制的内存和Cache访问控制模式之下:1:写通过模式(Write-Through)W属性W=1:采用写通过模式该模式下处理器在执行store指令时,同时更新Cache和主存中的数据来保证数据的一致性。
W=0:采用写回模式在写回模式(Write-Back)中,当CPU执行store指令时,仅仅更新Cache中的块,而只有Cache中的块被替换时才写入主存中;写回方式可以提供系统性能,尤其是CPU产生store 指令的速度和主存出来store指令的速度一样快或者更快时。
2:禁止Cache模式(Caching-Inhibit)I属性I=1时内存访问将完全使用主存中的地址,完全绕过Cache机制I=0时使用Cache机制3:内存一致模式(Memory-Coherency Required)M属性如果M=1,表示对此数据区的访问需要经过存储一致性处理,该位对于单PowerPC处理器而言没有什么意义。
但是对于SMP结构的系统中,由Memory Coherence引起的Cache共享一致性的问题十分复杂,维护Cache一致性的访问也比较多,比如:Example1:写更新法在写操作完成之后,其数据在其它Cache中无效;Example2:读请求法如果Cache中出现了一个脏拷贝,则需要回写操作在读之前完成上述两种方法都需要硬件支持完成,比如总线监听法保证SMP结构处理器的Cache一致性在SMP结构的处理器中,有些内存区域需要多个处理器共享,此时在使用MMU进行虚实地址映射时将WIMG字段的M位置1,此时当SMP中的一个处理器对该字段进行访问时一定会通知SMP中的其它处理器,实现存储器的共享一致性。
4:保护模式(Guarded)G属性此位为1,表示对相应的存储区域进行保护。
操作系统为每一个块和页设置内存和Cache访问属性,WIMG属性在BATs寄存器和PTE 页表项中各占据了四个bit,具体设置如下:操作系统用mtspr指令来设置BA Ts寄存器中的WIMG位,IBA Ts只设置了WG位,任何试图修改IBATs寄存器中的这两个位都将引发边界没有定义(boundedly-undefined)的结果。
操作系统在建立页表的时候,为每个页表项PTE都设置了WIMG位。
需要注意的是在实模式下的数据访问(MSR[DR]=0),WIMG被设置成0b0011(数据可写回,开启Cache,强制内存一致性,内存被保护);在实模式的指令访问(MSR[IR]=0),WIMG被设置成0b0001(数据可写回,开启Cache,禁止Cache一致性,内存保护)第五部分小结至此,PowerPC构架下所有相关的寄存器我们系统的介绍一下,由于我也是首次接触PowerPC体系结构,对于各个寄存器的功能上的理解肯定有不到位的地方,我会在后面的学习中陆续的修正,也欢迎大家指出其中的不足的地方!O(∩_∩)O~第六部分参考资料[1] Programming Environments Manual for 32-Bit Implementations of the PowerPC Architecture[2] PowerISA_V2.06_PUBLIC[3] e600 PowerPC(TM)Core Reference Manual[4] Computer Organization and Design(The Hardware/Software Interface, Third Edition). David A. Patterson John L.Hennessy。