powerpc寄存器学习笔记

合集下载

32位PowerPC构架通用寄存器分析及总结一

32位PowerPC构架通用寄存器分析及总结一

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寄存器学习笔记

powerpc寄存器学习笔记

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。

[计算机]PPC汇编入门指南

[计算机]PPC汇编入门指南

看懂PowerPC汇编,需要如下3方面的知识:1.PowerPC指令集架构即Power ISA,可以从获得,包括寄存器定义,数据模型,寻址方式和指令定义以及指令助记符;2.PowerPC ABI即应用程序二进制接口,即寄存器的使用规范和栈调用结构;3.PowerPC Pseudo-ops,即.text, .align n等汇编语言中常用的伪操作符。

PowerPC ISA分为3个级别即“Book”,分别对应于用户指令集体系结构,虚拟环境体系结构和操作环境体系结构。

其中Book III分化出了服务器版本Book III-S(经典PowerPC架构)和嵌入式版本Book III-E(专门为嵌入式优化的版本)。

1.寄存器定义:PowerPC处理器寄存器分为2大类-专用寄存器和非专用寄存器。

其中,非专用寄存器包括32个通用目的寄存器(GPR),32个浮点寄存器(FPR),条件寄存器(C R),浮点状态和控制寄存器(FPSCR);专用寄存器主要包括连接寄存器(LR),计数寄存器(CTR),机器状态寄存器(MSR)以及时间基准寄存器(TBL/TBU)等等。

PPC4xx系列处理器还有DCR寄存器,需要用专门的指令访问。

这里有两点需要注意:1. PowerPC处理器可以运行于两个级别,即用户模式和特权模式。

用户模式下,仅有GPR,FPR,C R,FPSC R,LR,CTR,XER以及TBL/TBU可以访问。

从Power ISA2.05开始,DCR寄存器也可以在通过用户模式DC R访问指令进行访问。

2.PowerPC处理器没有专用的栈指针寄存器和PC指针寄存器,也就是说硬件不负责维护调用栈。

2.数据模型:PowerPC支持如下数据格式:byte, halfword, word, doubleword,quadword, 同时默认支持big-endian 字节序,即MSB(最高有效字节,例如0x12345678中0x12即MSB)保存在低地址。

32位PowerPC构架通用寄存器分析及总结三

32位PowerPC构架通用寄存器分析及总结三

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寄存器用来支持产生浮点中断的原因。

32位PowerPC常用指令集总结

32位PowerPC常用指令集总结

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)。

PowerPC简介及编程要点

PowerPC简介及编程要点

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等。

powerpc pwm原理 -回复

powerpc pwm原理 -回复

powerpc pwm原理-回复PWM(Pulse Width Modulation)是一种常用的电子控制技术,用于调节电子设备中电气信号的占空比(Duty Cycle)。

在本文中,我们将重点介绍PowerPC PWM的原理及其应用。

第一步:PWM的基本原理PWM技术的基本原理是通过改变电信号的占空比来控制输出的平均功率。

通常,一个PWM信号包含一个固定频率的高电平和低电平,通过调整高电平和低电平的持续时间比例,即占空比,可以改变输出信号的平均功率。

当占空比为50时,输出信号的平均功率为输入信号的一半。

当占空比为100时,输出信号的平均功率为输入信号的完全值。

当占空比为0时,输出信号的平均功率为0。

第二步:PowerPC芯片中的PWM模块PowerPC芯片是一种广泛应用于嵌入式系统和高性能计算的微处理器。

在PowerPC芯片中,PWM模块是一个专门负责产生PWM信号的硬件模块。

该模块通常包含一个或多个PWM通道,每个通道都可以独立进行配置和控制。

每个PWM通道都有一个计数器,用于产生固定频率的PWM 信号。

该计数器可以通过设置PWM频率寄存器的值来调整输出信号的频率。

第三步:PWM的工作原理当PWM模块工作时,首先需要设置PWM频率寄存器的值以确定输出信号的频率。

接下来,需要设置每个PWM通道的占空比。

这可以通过设置PWM周期寄存器的值来实现。

PWM周期寄存器用于控制高电平的持续时间,可以设置的范围通常是0到PWM频率寄存器的值之间的任意数值。

PWM周期寄存器的值越大,占空比越小,电平宽度就越短。

最后,需要启动PWM模块来开始产生PWM信号。

第四步:PWM的应用PWM技术在许多领域有广泛的应用。

最常见的应用是控制电机的转速和位置。

通过调整PWM信号的占空比,可以控制电机的平均功率,从而控制其转速。

此外,PWM技术还可以用于调光灯、电子制冷器、温控系统等电子设备。

PWM技术还可以用于音频和视频信号的数字模拟转换,以及DC-DC转换器和逆变器等电源管理应用。

第三章 PowerPC处理器原理

第三章 PowerPC处理器原理

PowerPC处理器结构
PowerPC处理器为32位的PowerPC嵌入式环境体系 结构(embedded environment architecture),该结构来源 于PowerPC体系结构。Virtex-II Pro使用PowerPC405D5结 构,Virtex-4使用PowerPC405F6结构。 本章的处理器块(processor blcok)是指连接PPC405 D5或者PPC405F6核,片上存储器逻辑(on-chip memory logic,OCM),辅助处理器单元(Auxiliary Processor Unit,APU),相关逻辑和接口的处理器集合。
PowerPC处理器结构 PowerPC处理器体系结构概述
数据缓存的功能包括: 1)16KB,双向级关联(2-way set associative); 2)奇偶检测和报告(只有Virtex-4); 3)每缓存行8字(32字节); 4)读、写线缓冲区; 5)提供从/到线缓冲行的加载和存储命中; 6)可编程的加载和存储缓存行分配; 7)在缓存行满时的操作数推进(Operand forward)逻 辑; 8)在缓存行满并且刷新时的非阻塞访问。
PowerPC处理器结构 PowerPC处理器体系结构概述
缓存控制器采用了最近使用的LRU的缓存行替换策略 。即缓存行被填充时,最近经常访问的缓存行被保留,而 其它均被替换。 指令缓存的功能包括:16KB,双向级关联(2-way set associative);奇偶检测和报告(只有Virtex-4);每缓存 行8字(32字节);提取行缓冲区;提供了来自提取行缓 冲区的取指命中;下一个顺序行的可编程预取到提取行缓 冲区;非缓存指令的可编程预取:全行(8字)/半行(4 字);提取行满时,非阻塞访问。

PowerPC汇编指令集简析

PowerPC汇编指令集简析

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,并不会清空高位。

汇编学习笔记之寄存器

汇编学习笔记之寄存器

寄存器8086/8088 包括四个16为数据寄存器,两个16为指针寄存器,两个16位变址寄存器,一个16为指令指针,四个16位段寄存器,一个16位标志寄存器,这14个寄存器分为四组通用寄存器:AX BX CX DX 通用寄存器SP 堆栈指针BP 基址指针SI 源地址DI 目的地址SP BP SI DI 也为通用寄存器控制寄存器:IP 指令指针FLAG 标志寄存器段寄存器:CS 代码段寄存器DS 数据段寄存器SS 栈段寄存器ES 附加段寄存器1. 标志寄存器16位的标志寄存器FLAG包含九个标志,分为两组第一组:6个主要受加减运算和逻辑运算结果的影响,成为运算结果标志第二组:3个不受运算结果的影响,称为状态控制标志运算结果标志:1> 进位标志CF (Carry Flag)主要用于反映运算是否产生进位或借位,如果运算结果的最高位(字操作数为第15位,字节操作数为第7位)产生一个进位或借位,则CF被置为1,否则置为0,移位指令把操作数的最高位或最地位移入CF。

在进行多字节数的加减运算时,要使用到该标志。

在比较无符号整数的大小是,要使用到该标志。

2> 零标志ZF (Zero Flag)用于反映运算结果是否为0,如果结果为0 ,则置ZF为1,否则置为0.在判断运算结果是否为0时,用到该标志。

3> 符号标志SF(Sign Flag)用于反映运算结果的符号位,SF与运算结果的最高位相同,如果运算结果的最高位为1,则SF 置为1,否则被清0,在8086/8088中,有符号数采用补码的形式表示,所以SF反映运算结果的符号,如果运算结果为正,则SF为正(补码最高位为0),则被置0,运算结果为负,置为14> 溢出标志OF (OverFlow Flag)反映有符号数加减运算是否溢出,如果运算结果超出了8位或16位有福好的数的表示范围,即在字节运算时大于127或小于-128,在字的运算时大于65535或小于–65536,称为溢出溢出时OF =1;未溢出OF =0;5> 奇偶标志PF (Parity Flag)奇偶标志反映运算结果中1 的个数,如果1的个数为偶数,则PF =1 ,否则PF =0利用奇偶标志可以进行奇偶校验检查。

32位PowerPC经常使用指令集总结

32位PowerPC经常使用指令集总结

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)。

PowerPC体系结构学习笔记之内存管理

PowerPC体系结构学习笔记之内存管理

PowerPC体系结构学习笔记之内存管理(1)——E500MMU简介E500采用了两级MMU机制,L1-MMU和L2-MMU,以及一些辅助寄存器和指令来实现虚实地址的转换。

E500与其他PowerPC处理器相比的一个最大不同就是,E500不能禁止虚实地址转换,并且支持两个地址空间,分别是地址空间0与地址空间1。

其实这点有些类似于MIPS,除了直接通过虚拟地址来区分以外,MIPS处理器也没有机制禁止/启用地址翻译。

L1-MMU包含I-L1VSP,D-L1VSP,I-L1TLB4K和D-L1TLB4K。

I-L1VSP和D-L1VSP含有4个条目,采用全相连结构。

I-L1TLB4K和D-L1TLB4K含有64个条目,采用4路组相连结构。

L2-MMU包含TLB0和TLB1。

其中TLB0含有256个条目,采用2路组相连结构。

TLB1含有16个条目,采用全相连结构。

TLB0用来进行页式映射,TLB1用来处理段式映射。

PowerPC体系结构学习笔记之内存管理(2)——E500虚拟地址与MMU结构在E500内核中将MMU分为两级有一下两个作用:L1-MMU的访问速度较快。

这个原理类似于Cache的原理。

L1-MMU采用哈佛结构,也就是程序地址空间与数据地址空间分离,可以提高地址转换的效率。

但是L2-MMU没有采用这种结构。

E500是一个32位的处理器,支持4GB的地址空间。

在内部使用41位的临时虚拟地址,组成如下:40 39 32 31 0AS PID EAAS:来自于MSR寄存器的IS或DS位。

所以,E500可以根据AS位将地址空间分为两种:地址空间0和地址空间1。

但是,Linux并没有使用这个功能。

kernel和用户空间的代码,数据都在地址空间0中,即AS位一直是0。

PID:E500支持3个8位的PI的寄存器来保存进程的PID。

这点于MIPS的ASID作用一样。

但是,Linux并没有使用PID,在TLB中简单的忽略PID的检查,全部设为0。

PowerPC体系结构之ULR和ABI

PowerPC体系结构之ULR和ABI

PowerPC体系结构之ULR和ABIPowerPC 体系结构之ULR 和ABIA. 以下取 Book E 之 ULR 精要ULR (User Level Register) 即⽤户态程序能⽤的寄存器,包括只读的和可读写的。

最常⽤的 ULR 包括以下寄存器:1. GRP (General Purpose Register) 通⽤寄存器,即⽤于定点运算的寄存器,共 32 个2.CR (Condition Register) 指令状态寄存器,其格式如下所⽰:注意:Book E 对寄存器的位编号与通常不同,因其⽀持 PowerPC 64,故其将 64 位寄存器从最⾼位 (MSB) 到最低位 (LSB)编号为 0 ~ 63,32 位寄存器则编号为 32 ~ 63。

CR 以4位为单位分成 8 个域,每个域能描述 4 种状态。

2.1 CR0 ⽤于存放 RC 位为1 的整数指令执⾏后的状态。

CR[32:35] 依次表⽰⼩于、⼤于、等于和溢出。

当指令执⾏的结果⼩于、⼤于或等于 0 时则置相应的CR[32:34] 的位;CR[35] 的值则直接复制⾃XER 的 SO (Summary Overflow)位。

2.2 CR1⽤于存放 RC 位为 1 的所有浮点指令执⾏后的浮点异常状态。

其内容直接复制于浮点状态与控制寄存器(FPSCR),CR[36:39] 依次对应于浮点异常(FX)、浮点使能异常 (FEX)、浮点⾮法操作异常 (VX) 和浮点溢出异常 (OX)。

RC 位为 1 的指令,其助记符的最后有⼀个 '.' ,如addic./divw./mullw./neg./and./or./xor./nand./nor.2.3对于⽐较指令(整数和浮点),可以通过操作数 BF 指定⽐较结果所存储的CR 域:cmp 3, 0, r3, r4 (cmp BF, L, RA, RB)操作数 L = 0,表⽰此为 32 位⽐较,即只⽐较 r3, r4 的 32 ~ 63 位。

PowerPC体系结构学习笔记之内存管理

PowerPC体系结构学习笔记之内存管理

PowerPC体系结构学习笔记之内存管理(1)——E500MMU简介E500采用了两级MMU机制,L1-MMU和L2-MMU,以及一些辅助寄存器和指令来实现虚实地址的转换。

E500与其他PowerPC处理器相比的一个最大不同就是,E500不能禁止虚实地址转换,并且支持两个地址空间,分别是地址空间0与地址空间1。

其实这点有些类似于MIPS,除了直接通过虚拟地址来区分以外,MIPS处理器也没有机制禁止/启用地址翻译。

L1-MMU包含I-L1VSP,D-L1VSP,I-L1TLB4K和D-L1TLB4K。

I-L1VSP和D-L1VSP含有4个条目,采用全相连结构。

I-L1TLB4K和D-L1TLB4K含有64个条目,采用4路组相连结构。

L2-MMU包含TLB0和TLB1。

其中TLB0含有256个条目,采用2路组相连结构。

TLB1含有16个条目,采用全相连结构。

TLB0用来进行页式映射,TLB1用来处理段式映射。

PowerPC体系结构学习笔记之内存管理(2)——E500虚拟地址与MMU结构在E500内核中将MMU分为两级有一下两个作用:L1-MMU的访问速度较快。

这个原理类似于Cache的原理。

L1-MMU采用哈佛结构,也就是程序地址空间与数据地址空间分离,可以提高地址转换的效率。

但是L2-MMU没有采用这种结构。

E500是一个32位的处理器,支持4GB的地址空间。

在内部使用41位的临时虚拟地址,组成如下:40 39 32 31 0AS PID EAAS:来自于MSR寄存器的IS或DS位。

所以,E500可以根据AS位将地址空间分为两种:地址空间0和地址空间1。

但是,Linux并没有使用这个功能。

kernel和用户空间的代码,数据都在地址空间0中,即AS位一直是0。

PID:E500支持3个8位的PI的寄存器来保存进程的PID。

这点于MIPS的ASID作用一样。

但是,Linux并没有使用PID,在TLB中简单的忽略PID的检查,全部设为0。

汇编学习笔记之 寄存器

汇编学习笔记之 寄存器

寄存器特点寄存器又分为内部寄存器与外部寄存器,所谓内部寄存器,其实也是一些小的存储单元,也能存储数据。

但同存储器相比,寄存器又有自己独有的特点:①寄存器位于CPU内部,数量很少,仅十四个;②寄存器所能存储的数据不一定是8bit,有一些寄存器可以存储16bit 数据,对于386/486处理器中的一些寄存器则能存储32bit数据;③每个内部寄存器都有一个名字,而没有类似存储器的地址编号。

8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。

(1)通用寄存器有8个, 又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及变址寄存器(4个).顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对计算机的运行造成很大的影响。

数据寄存器分为:AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.BH&BL=BX(base):基址寄存器,常用于地址索引;CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.DH&DL=DX(data):数据寄存器,常用于数据传递。

他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。

这2组8位寄存器可以分别寻址,并单独使用。

High low另一组是指针寄存器和变址寄存器,包括:SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。

32位PowerPC常用指令集总结材料

32位PowerPC常用指令集总结材料

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位PowerPC构架通用寄存器分析及总结二

32位PowerPC构架通用寄存器分析及总结二

32位PowerPC构架通用寄存器分析及总结二第四部分操作系统环境(OEA-Operating Environment Architecture)寄存器寄存器集OEA寄存器集包含四类寄存器:1:配置寄存器(Configuration Registers)MSR寄存器:定义处理器的状态,它可以被mtmsr, sc, rfi指令修改;可以被mfmsr读取;PVR寄存处:定义寄存器模型的版本和处理器的版本2:内存管理寄存器(Memory Management Registers)BA T寄存器:OEA定义了四组BA T指令寄存器(IBAT0U-IBAT3U和IBAT0L-IBAT3L),也定义了四组BAT数据寄存器(DBA T0U-DBAT3U和DBAT0U-DBAT3U)SDR1寄存器:该寄存器定义了用于虚拟地址转换为物理地址所需要的页表基地址SR寄存器:OEA定义了16个32位的SR寄存器(SR0-SR15)3:中断处理寄存器(Interrupt Handing Register)DAR(Data Address Register)寄存器:在DSI(Data Storage Interrupt)和对齐中断发生之后,DAR寄存器被设置成异常指令产生的有效地址;SPRG0-SPG3寄存器:提供给操作系统使用DSISR寄存器:定义产生DSI(Data Storage Interrupt)和对齐中断的原因SPR0(Machine status save/restore register 0)寄存器:在中断中用来保存MSR寄存器,当rfi指令执行时,用来恢复MSR寄存器SPR1(Machine status save/restore register 1)寄存器:在中断中用来保存MSR寄存器,当rfi指令执行时,用来恢复MSR寄存器4:多功能寄存器(Miscellaneous Registers)TB(time base)寄存器:具体参考第三部分VEADEC寄存器:这是一个32位的递减计数器EAR(External Access Register)寄存器:用于访问外部设备DABR(Data address breakpoint register):用来控制数据地址断点功能PIR(Processor identification register):在多处理器的芯片上用来标识一个核,例如在MPC8641d芯片上有两个E600的core,就用PIR来定位其中的core。

PowerPC常用指令

PowerPC常用指令

查看文章PowerPC常用指令2009年05月14日星期四 22:20 指令缩写-------------------------st = storeld = loadr = rightl = left 或者 logicalw = wordu = updatem = movef = from 或者 fieldt = to 或者 thani = Immediateh = half wordz = zerob = branchn = andcmp = comparesub = subtractclr = clearcr = condition registerlr = link registerctr = couter registerstwu = STore Word witch Updatestwu r1, <-frame_size>(r1)--------------------------------在GDB/IDA汇编中通常写成stwu %sp, -0×20(%sp)意思是,先将SP放入到(SP-20)这个内存地址然后SP = SP - 20;从特殊寄存器取值的扩展助记符-------------------------mflr = Move From Link Registermflr rt 等同于 mfspr rt,8将连接寄存器的值放到RT一般是mflr %r0存值到特殊寄存器的扩展助记符-------------------------mtctr = Move To Counter Registermtctr rs 等同 mtspr 9,rs将RS的值放入到计数寄存器mtcrf = Move to Condition Register Fields mtcrf FXM, RS按照掩码FXM,复制Rs的内容到CRFXM是8位,控制 RS的32位(8组,共32位)复制过去,也就是说 FXM的1位,可以控制Rs的4位一位掩码控制一组CR条件寄存器扩展助记符-------------------------crclr = Control Register CLeaRcrclr bx 等同于 crxor bx, bx, bx 作用是将条件寄存器相应的位清零例如crclr so 等同于 crxor 3, 3, 3 将CR0的SO位(第3位)清零crclr 4*cr3+eq 等同于 crxor 14, 14, 14 将CR3的EQ位清零比较指令-------------------------cmpli = Compare Logical Immediatecmplwi bf, ra, ui 等同于 cmpli bf, 0, ra, uiCompare Logical Word Immediate所谓逻辑比较,就是同无符号整数比较存储指令-------------------------sth = Store Half 并且是存储高位 (16-31位)载入指令-------------------------lhz = Load Half and Zero 载入半字并将高16位清零lwzx = Load Word and Zero Indexed 意思是 lwzx RT, RA, RB (Ra+Rb就是地址)跳转-------------------------bccl = bctrl (有别名的助记符)Branch Conditional to Count Register条件跳转到计数寄存器指定的地址逻辑操作-------------------------ori 或者 oril = OR Immediate 同16位立即数进行或操作循环掩码操作循环左移然后进行掩码操作是PowerPC指令集的精华,包含了一组非常强大的指令集移位指令-------------------------slwi = Shift left immediate 左移几位(位数用立即数表示)rotlwi = Rotate left immediate 循环左移抽取-------------------------extrwi = Extract and right justify immediate例如 extrwi RX, RY, 1, 0等同于 rlwinm RX, RY, 1, 31, 31rlwinm or rlinm (Rotate Left Word Immediate Then AND with Mask)清除-------------------------clrlwi = Clear left immediate怪异清除clrlslwi = Clear (Left Word) and Shift Left clrlslwi %r0, %r0, 24,8 等同于rlwinm RA, RS, 24-8, 31-24 =rlwinm Ra, Rs, 16, 7rlwinm RA, RS, SH, MB, ME将R0向左循环移动掩码是 [8, 15]影响CR的运算-------------------------如果Overflow Exception(OE)设置1,那么结果影响定点异常寄存器的Summary Overflow(SO)和 Overflow(OV),助记符是后面加o, addo如果Record(Rc)设置1,那么结果影响Less Than(LT) zero, Greater Than (GT) zero, Equal To (EQ) zero,和Summary Overflow (SO)等条件寄存器CR助记符是后面加”点” add.算术运算-------------------------注意方向subf = Subtract From 注意,被减数是后面的那个寄存器计数器循环在扩展助记符中,计数寄存器的语义可以通过在b后面立即添加dz或 dnz来指定。

PowerPC_PPC培训教材

PowerPC_PPC培训教材

PPC培训教材编写:校核:二〇〇七年四月十一日目录第1章PPC体系结构 (1)1.1.MPC8247基本模块 (1)1.2.数据怎样流动? (2)1.3.P OWER PC核的主要部件 (3)第2章EPPC 编程 (4)2.1.编程模式介绍 (4)2.2.用户态编程模式 (5)2.3.监控态编程模式 (6)2.4.数据和指令(1/2) (7)2.5.数据和指令(2/2) (8)2.6.指令总结 (9)2.7.指令总结 (10)2.8.指令总结 (11)2.9.什么是“EIEIO”指令 (12)2.10.什么是EIEIO指令 (13)2.11.指令总结 (14)2.12.什么是执行同步? (14)2.13.什么是同步指令? (15)2.14.什么是同步指令? (16)2.15.指令总结 (16)2.16.什么是“ISYNC”指令。

(17)2.17.指令总结 (18)2.18.指令总结 (18)2.19.指令总结 (19)2.20.解释条件代码(1/2) (20)2.21.解释条件代码(2/2) (21)2.22.使用和记录运算信息 (22)2.23.使用和记录运算信息 (23)2.24.转移类型和选址 (24)2.25.转移操作 (25)2.26.条件转移指令 (26)2.27.条件转移指令----举例 (27)2.28.控制程序流程练习 (28)2.29.控制程序流程练习 (29)2.30.写子程序和I/O处理 (29)第3章HDLC协议 (31)3.1.HDLC帧格式 (31)3.2.HDLC点到点。

(32)3.3.HDLC多点。

(33)3.4.HDLC控制器怎样发送数据。

(34)3.5.基本HDLC接收工作。

(35).HDLC总线配置。

(36)3.7.HDLC总线配置。

(36)3.8.HDLC总线发送工作。

(37)3.9.HDLC定义参数RAM (38)3.10.HDLC定义参数RAM。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IS,DS(第58,59位)。E500支持两个地址空间——0和1。IS为0表示当前程序使用指令空间0,为1表示当前程序使用指令空间1;DS为0表示当前程序使用数据空间0,为1表示当前程序使用数据空间1。
PVR(Processor Version Register)寄存器。存放当前处理器使用的PowerPC内核的版本号。
SVR(System Version Register)寄存器。存放当前处理器的版本号。
HID0(Hardware Implementation-Dependent Register 0)寄存器。这个寄存器中有几个位与时钟有关需要说一下:
EMCP位为1时使能MCP#引脚。
DOZE,NAP与SLEEP位与功耗管理有关。
EE(External Enable,第48位)。为1时使能外部中断,为0时屏蔽外部中断。当处理器进入中断处理时会自动屏蔽该位。使用方法与MIPS的SR(IE)位很象。同时E500还提供了wrtee和wrteei指令对该位进行修改,就像MIPS中的ei与di指令。
PR(第49位)。为0表示处理器在内核模式,为1表示处理器在用户模式。
通用SPR寄存器组。这组寄存器包括SPRG0-SPRG7与USPRG0,除USPRG0以外其余寄存器在用户模式下只读。对于SPRG0-7,用户模式下只能读SPRG3-7。注意SPRG3-7有两个地址,一个用于一个用于读操作,一个用于写操作。例如,SPRG4的读地址是260,写地址是276。这组寄存器主要用于操作系统的特殊操作,比如SPRG3用来保存进程的thread_struct地址。这个使用在缺页处理中,方便查找页表。由于在上下文切换时,将mm->pgd赋给了thread.pgdir,所以可以通过SPRG3直接找到页表的基地址,可以加快查表速度。MIPS利用pgd_current全局变量,保存当前进程的页表基地址,以加快查表速度,因为MIPS并没有一个寄存器保存thread_struct的地址。这里要注意,每个进程的页表基地址其实都是保存各自在mm->pgd中的,这些只是为了加快查表速度。
今天谈一下E500中的系统级寄存器,也就是在内核态可以访问的寄存器,主要给操作系统用的。这里主要说的是比较通用的几个寄存器,与中断,Cache和MMU有关的将在后面谈到这些内容的时候涉及到。
首先说一下访问系统级寄存器的指令:mfspr和mtspr。E500会对各个寄存器进行编址,一般指令形式就是“mtspr 268, r3”或者“mfspr r3, 268”。
TBEN位使能TB(Time Base)寄存器和DEC(Decrementer)寄存器,这两个寄存器可以记录处理器运行时间。DEC寄存器经常用于操作系统的时钟中断。
SEL_TBCLK位用于选择使用处理器的系统时钟还是外部RTC时钟。
HID1(Hardware Implementation-Dependent Register 1)寄存器。PLL_CFG字段用于记录系统时钟(CCB Clock)于E500内核时钟的比率。
对于其他系统级寄存器,请参考E500的手册。
MSR(Machine State Register)寄存器。用于设置CPU核心的状态,初始化CPU时第一个设置的寄存器。不过这个寄存器不能通过mfspr/mtspr指令对访问,有一对特殊的指令mfmsr/mtmsr。其中有几个重要的位需要提一下:
UCLE(User-mode Cache Lock Enable,第37位)。为1时程序运行在用)。为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异常。
相关文档
最新文档