【自己动手写CPU】处理器与MIPS

计算机的简单模型:

计算机的简单组成模型:

计算机的组成有三大部分:处理器,输入输出,存储器。处理器从存储器中获取指令,然后按照指令执行一定的操作,输入/输出用来提供运算数据、显示运算结果。
存储器中存储的是指令,指令就是一条运算命令,处理器按照命令执行即可。处理器内部具有译码功能,用来解释接收到的0,1编码表示的运算类型。

计算机的简单使用模型

使用编译程序将高级语言编写的程序翻译成汇编指令,然后使用汇编程序将其翻译成01编码
在这里插入图片描述

架构与指令集

指令集架构(ISA),ISA同来描述编程时用到的抽象机器,从软件角度,ISA包括一套指令集和一些寄存器。与ISA对应的概念是微架构,后者是前者的一个实现,比如英特尔很多处理器都是遵循x86的ISA,但每一款处理器都有自己的微架构,ISA是设计规范,微架构是具体实现,同样的ISA,不同的微架构,不同的性能。

CISC与RISC区别

CISC是复杂指令计算机,RISC是精简指令计算机
CISC每条指令对应的0,1编码长度不一,RISC每条指令对应的0,1编码长度固定。

几种主要ISA

x86,ARM,SPARC,POWER,MIPS,除了x86是CISC ISA外,其他都是RISC ISA。

MIPS32指令集架构简介

数据类型

  • 位(b):长度1bit
  • 字节(byte):长度8bit
  • 半字(half word):长度16bit
  • 字(word):长度32bit
  • 双字(double word):长度64bit
    此外还有32位单精度浮点数,64位双精度浮点数

寄存器

寄存器的存取可以在一个时钟周期内完成,简化了寻址方式。MIPS32中除了加载/存储指令外,都是使用寄存器或立即数作为操作数的,MIPS32中寄存器分为2类:通用寄存器和特殊寄存器。

通用寄存器

MIPS32架构定义了32个寄存器,在硬件上没有强制指定寄存器的使用规则,但是在实际使用中,这些寄存器的用法都遵循一系列规定。

约定用法:
在这里插入图片描述

特殊寄存器

MIPS32中架构中定义的特殊寄存器有3个:

  • PC(程序计数器)
  • HI(乘除结果高位寄存器)
  • LO(乘除结果低位寄存器)
    乘法运算时,HI和LO保存乘法运算结果,HI存储高32位,LO存储低32位
    除法运算时,HI和LO保存除法运算的结果,其中HI存储余数,LO存储商

字节次序

数据在存储器中,按照字节存放。处理器是按照字节访问存储器汇总的指令和数据。
想要读出一个字,有两种结果

  • {men[n],men[n+1],men[n+2],men[n+3]} 大端模式MSB
  • {men[n+3],men[n+2],men[n+1],men[n]} 小端模式LSB
    大端模式下,数据高位保存在存储器低位中,数据的低位保存在存储器高位中。本书中,处理器采用大端模式。

指令格式

MIPS32架构中所有指令都是32位。有3种指令格式。
op是指令码,func是功能码
在这里插入图片描述(1)R类型:由op,func结合指定,rs,rt是源寄存器编号,rd是目的寄存器编号,如目的寄存器是$3,对应rd编号00011。MIPS32架构中只有32个通用寄存器,使用5位编码就可以全部表示。因此,rs,rt,rd宽度都是5位。sa只在移位指令中使用,用来指定移位位数。
(2)I类型:具体操作由op指定,指令低16位是立即数,运算时要扩展到32位,然后作为其中一个源操作数参与运算。
(3)J类型:具体操作由op指定,一般是跳转指令,低26位是字地址,用于跳转的目的地址。

指令集

MIPS32架构中定义的指令可以分为以下几类:

逻辑操作指令:

8条指令:and,andi,or,ori,xor,xori,nor,lui。实现逻辑与,或,异或,或非等运算。

移位操作指令:

6条指令:sll,sllv,sra,srav,srl,srlv。实现逻辑左移,右移,算术右移等运算。

移动操作指令:

6条指令:movn,movz,mfhi,mthi,mflo,mtlo。用于通用寄存器之间数据移动,以及通用寄存器与HI,LO寄存器之间的数据移动。

算术操作指令:

21条指令ad,addi,addiu,addu,sub,subu,clo,clz,slt,slti,slyiu,sltu,mhl,mult,multu,madd,maddu,msub,msubu,div,divu。实现加法,减法,比较,乘法,乘累加,除法等运算。

转移指令:

14条指令:jr,jalr,j,jal,b,bal,beq,bgez,bgezal,bgtz,blez,bltz,bltzal,bne。其中有无条件转移,条件转移,用于程序转移到另一个地方执行。

加载存储指令:

14条指令:lb,lbu,lh,lhu,ll,lw,lwl,lwr,sb,sc,sh,sw,swl,swr。l开始的都是加载指令,以s开始的都是存储指令,这些指令用于从存储器中获取数据,或者向存储器中保存数据。

协处理器访问指令:

2条指令:mtc0,mfc0。用于读取协处理器CP0中某个寄存器的值,或将数据保存到协处理器CP0中的某一个寄存器。

异常相关指令:

14条指令,其中有12条自陷指令。包括teq,tge,tgeu,tlt,tltu,tne,teqi,tgei,tgeiu,tlti,tltiu,tnei。
此外有系统调用指令syscall,异常返回指令eret

其余指令:

4条指令:nop,ssnop,sync,pref。nop是空指令,ssnop是一种特殊类型的空指令。sync指令用于保证加载、存储操作的顺序,pref指令用于缓存预取。

寻址方式

MIPS32架构寻址模式有寄存器寻址、立即数寻址、寄存器相对寻址、PC相对寻址4种。
(1):寄存器相对寻址
此种寻址模式是主要加载/存储指令使用,将一个16位的立即数做符号扩展,然后与指定通用寄存器的值的相加,从而得到一个有效地址。
在这里插入图片描述

(2):PC相对寻址
此种寻址模式主要是转移指令使用,在转移指令中有一个16位的立即数,将其左移两位并作符号扩展,然后与程序计数寄存器PC的值相加,从而获取有效地址。
在这里插入图片描述

协处理器CP0

协处理器一词通常来表示处理器的一个可选部件,负责处理指令集的某个扩展,拥有与处理器相独立的寄存器。MIPS32架构提供最多4个协处理器,分别是CP0,CP1,CP2,CP3。
CP0用作系统控制,CP1,CP3用于浮点处理单元,CP2被保留用于特定实现。除CP0外的协处理器都是可选的。

异常

处理器运行中,会从存储器汇中依次取出指令,然后执行,但一些事件会打断正常的程序执行流程,这些事情中有中断,陷阱,系统调用等,统称为异常
异常发生后,处理器会转移到一个事先定义好的地址,该地址有异常处理流程,在其中进行异常处理。该地址被称为异常处理例程入口地址
异常处理完成后,使用异常返回指令eret,返回到异常发生前的状态继续执行。

累了。。。
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值