开发者学堂课程【高校精品课-大连理工大学-计算机组织与结构: E906的编程模型】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/3/detail/16050
E906的编程模型
内容简介
一、工作模式及寄存器视图
二、数据格式
三、字节序
一、工作模式及寄存器视图
E906有两种工作模式,一种是用户模式,一种是机器模式。
用户模式下能够访问的资源较少,机器模式可以访问所有的资源。虚线左侧是用户模式可以看到的寄存器。机器模式实际上是可以看到虚线左侧右侧所有寄存器。在这些寄存器中,有的是实线框,有的是虚线框,实线框是RISC-V标准的寄存器。虚线框的是 E906对 RISC-V 做的拓展。
在用户模式下有通用寄存器、浮点寄存器、浮点控制寄存器、浮点拓展状态寄存器、用户模式性能监测寄存器,有性能监测模块,有对应的寄存器,还有定点运算溢出饱和状态寄存器,这个是用户模式可以看到的。
除此之外在机器模式下还可以看到信息寄存器、异常配置寄存器、异常处理寄存器、Click 寄存器,这主要是处理中断的,还有内存保护寄存器,还有 E906的一些扩展寄存器以及机器模式下的性能检测寄存器,这个就是它的两种工作模式和寄存器视图。
二、数据格式
左侧是高位,右侧是低位,它支持单字节有符号数,整个寄存器的长度是32位,从 bit0到 bit31 32位,单字节数据只有8位,有符号只有七位是数据本身,bie7是符号,由于他是有符号数,从第八位到第31位取决于第七位,若第七位是符号那么后面就是0,若若第七位是负数那后面就是1,这是单字节的有符号数。单字节的无符号数的最低八位每一位都是数值没有符号,它的高24位全写作零,这个就是单字节的无符号数。半字有符号数是从 bit0直到bit15实际上是数,包括15位的数值和一位的符号,它的高16倍就和 bit15保持一致。如果是半字无符号数,就是第16位全部是数,高16位全部是零。
字有符号数就是第31位是数值本身,第31位也就是 bit31是符号,如果是字类型的无符号数,整体32倍,全都是数值部分,这是整数的数据格式。
浮点型数据
-E906浮点单元遵从 RISC-V 标准,兼容 IEEE750-2008浮点协议,支持点精度和双精度运算
-当 E906硬件配置了双精度浮点类型时,单精度数据只使用64位浮点寄存器的低32位,高32位必须全部是1
对于单精度浮点数来说他的两个字分别是从第0位到第31位以及第32位到第63位,从第0位到第22位是他的小数部分,从23到30是他的指数部分,第31位是他的数符,32到63位必须保证是1。
对于双精度浮点数来说,完整的64位都是用来表示这个数本身的,从零到31也就32位,再加上另一个字的32到51,整个都表示它的小数部分,高位字从52到62是它的指数部分,第63位是他的数的符号。
三、字节序
字节序是数据的高低位和内存的高低位之间的对应关系。E906只支持小端模式,小端模式就是数据的低位保存在地址的低位,数据的高位保存在地址的高位。
在地址 A 处有一个字,它是32位机,所以一个字就是32位,32位就是四个字节,这四个字节就保存在1234这四个位置,并且他的数的第一位 Byte0保存在地址的第一位,然后数的最高位 Byte3保存在地址的最高位,这就是一个典型的小端存储模式。对于半字也是一样,半字是16位的,低字节保持数的低位,高字节保持数的高位,对于一个字节来说只有八位,那就放到整个地址的最低部分。