计算机组成

3 指令系统体系结构

3.5 MIPS体系结构

MIPS是精简指令系统的代表,采用了与X86相反的设计理念,并引领了精简指令系统的潮流,那就让我们一起来看一看这究竟是怎么一回事。

要探讨MIPS指令系统,就得从它的设计者John Hennessy开始说起。Hennessy 1977年进入斯坦福大学,81年领导了RISC微处理器研究小组,他也被称为RISC的先驱。RISC是精简指令系统计算机的简称。与之相对,之前的计算机上的指令系统就被称为复杂指令系统,X86就是其中的代表。后来,Hennessy 共同创立了MIPS计算机系统公司。90年代,他主要是在斯坦福计算机系担任系主任等职务,2000年起开始担任斯坦福大学的校长。由于他所设计的MIPS体系结构引领了精简指令系统的潮流,后来还获得了IEEE的荣誉奖章,而他所创立的MIPS公司也一度创造了辉煌。

在80年代末上市,后来被收购,然后再一次上市,再一次被收购。现在MIPS处理器已经不再应用在计算机产品中了,但是在广义的计算设备包括数字电视,游戏机,网络设备等领域仍然有广泛的应用,其实MIPS公司商业上的兴衰也是诸多 RISC微处理器公司的命运写照。

第一代的MIPS是32位的, 在1985年推出了对应的处理器,R2000;

90年,R3000处理器对应着第二代的MIPS;

92年,MIPS扩展到了64位;94年,64位的MIPS又进一步升级;

96年的MIPS5并没有对应的处理器;

然后在99年,MIPS指令系统进行了较大的调整,形成了MIPS32;

到了99年,以MIPS5为基础,推出了MIPS64指令系统。

MIPS的设计指导思想非常的简单,从它的名字就可以看出来。MIPS全称的含义是一个流水线不会互锁的微处理器。流水线是现代微处理器为提高性能而采用的一项技术,而流水线中的互锁则是导致流水线性能降低的一个非常重要的因素。从这个名称也可以看出,MIPS的指导思想是希望其指令的设计能让微处理器运行的更快,性能更好。所以它主要的关注点是减少指令的类型,并且降低指令的复杂度,所以在MIPS指令系统当中,指令的总数是很少的。而且每条指令都比较简单。它的主要目的就是希望可以用一个非常简单的CPU来支持这样的指令系统。而CPU越简单就可以运行的更快。假设要编写程序完成同样的任务,用MIPS指令编写,其指令数量是X-86指令的5倍,但是如果MIPS的CPU能够做到比X86 CPU快10倍,那它仍然获得了明显的性能优势。这就是MIPS,同时也是RISC的设计思想。

那MIPS的指令是怎么体现它这样的设计思想的呢?

第一,MIPS固定了指令的长度,都是32个比特,也就说MIPS中的一个WORD。我们要注意这和X86中一个WORD是16位是不同的。固定的指令长度,大大简化了CPU从存储器中取指令的工作。不用像X86 CPU那样需要判断每条指令的长度。

第二,MIPS采用了非常简单的寻址模式。相比于X86提供的复杂多样的寻址模式, 虽然给编程带来了不便,但是大大简化了CPU访问存储器的控制逻辑。

第三,MIPS指令的数量比较少,每条指令的工作也很简单。基本上一条指令只完成一个操作,不像X86的指令,一条指令往往完成丰富的功能,这样可以简化指令的执行过程。不但简化了CPU的控制逻辑,而且可以方便的实现各种让指令并行执行的技术,从而提高CPU的性能。

第四,在MIPS指令系统中只允许LOAD和STORE这两种指令访问存储器,而不支持X86指令中这些让算术指令访问存储器的操作,因为访存是一个相对复杂的工作。

这种限制就可以让运算指令的实现变得非常的简单。但是我们要注意,MIPS的这些特点让直接使用MIPS指令进行编程变得非常的困难,因此,想要有高效率的MIPS程序,必须要有优秀的编译器的支持。我们来看几个MIPS指令的例子。

例如加法指令,它的格式是ADD a, b, c

我们注意,与X86指令不同,MIPS的加法指令是三个操作数 a, b, c ,这三个操作数可以是三个寄存器。除了加法运算,这里还列出了减法,乘法,除法等等。还有逻辑运算,还有左移和右移这样的移位运算。这里我们可以看出MIPS的运算指令格式都非常简洁和统一,而且这些指令的操作数都不可以是存储器操作数。要访问存储器,就必须使用专门的访存指令。

我们来看一个例子,假设A是一个100个字的数组,它的首地址存放在19号寄存器中,MIPS的寄存器编号用$符进行标记。

那如果我们想完成 A[10] = h + A[3] 这样的运算,也就说将一个变量h加上数组A中的第三个元素,并赋给数组A的第十个元素。我们注意,变量h放在18号寄存器中,而我们可以使用8号寄存器用来存放临时数据。那么对应的MIPS指令需要如下几条:

首先要用LOAD指令,将19号寄存器对应的地址加上偏移量12,因为MIPS当中一个字是32位,所以第三个元素与首地址之间的偏移是12。将19号寄存器对应的地址加上偏移量12计算得到的存储器地址中的这个字装入到8号寄存器中,这就相当于将数组A中的第三个元素赋给了一个临时变量。

第二句是一个加法指令,将8号寄存器与18号寄存器相加, 并将结果存放在8号寄存器。这就相当于将数组A的第三个元素与变量h相加,还存在这个临时变量中。

第三条指令是将8号寄存器中的数,也就是运算的结果存到以19号寄存器为首地址,偏移量为40的内存单元,这就是数组A的第十个元素的位置。

那我们用这三条MIPS指令就完成了这个功能。

而这张表列出了MIPS的所有的通用寄存器,总共有32个,每个都是32位。相比于X86的寄存器,MIPS的通用寄存器是非常规整的。这32个寄存器的编号从0一直到31,那我们可以用$符加上编号进行指示。同时每个寄存器还有一个符号的名称,并且约定了一些特定的用途,例如8号到15号寄存器,又被称为t0到t7的寄存器,用来保存临时的变量。而1号寄存器,它的名称是 at,专门留给汇编器使用。

在编写汇编程序时,我们可以用数字,也可以用名称,来表示这些寄存器。例如 lw 这两条指令所表达的含义以及对应的二进制编码都是一样的。add 这两条指令也是如此。如果我们直接用MIPS指令进行汇编语言的编程,从t0到t7,s0到s7,这些寄存器都是我们经常使用的。MIPS 的体系结构简明扼要,需要说明的就是这些。

我们已经了解了MIPS的设计理念,那这样的理念究竟是如何实现的呢?在下一节我们将一起来探究MIPS的指令。

3.5 MIPS体系结构的更多相关文章

  1. 【原创】MIPS浅议之——中断系统之我见

    最近,准确的说应该是最近两个月的时间,我都在研究MIPS的异常与中断.或者可以说,最近这两个月,我才真正了解中断系统的整个结构和处理流程以及为什么要这样做?这段时间我最大的体会就是以前我们在“计算机组 ...

  2. 系统调用和中断处理的异同(以Linux MIPS为例)

    在Linux下写一个驱动时候遇到的读操作性能问题,让我想一窥系统调用的处理流程,以查出问题的root cause.很多书把它和中断处理放在一起讲,但是又没有哪本书说清楚了,看来只有代码才能说明一切.以 ...

  3. ARM, X86和MIPS

    ARM ARM架构,过去称作高级精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),是一个32位精简指令集reduced instructio ...

  4. MIPS学习笔记(一)

    写在前面 本文是根据"MIPS Assembly Language Programming CS50 Discussion and Project Book. Daniel J. Ellar ...

  5. iot漏洞mips汇编基础

    1 基础概念 MIPS(Microprocessor without Interlocked Piped Stages architecture),是一种采取精简指令集(RISC)的处理架构,由MIP ...

  6. linux arch目录下处理器体系架构介绍

    alpha 处理器Alpha 处理器最早由美国DEC 公司设计制造,在Compaq (康柏)公司收购DEC 之后,Alpha 处理器继续得到发展,并且应用于许多高档的Compaq 服务器上,HP (惠 ...

  7. 知道创宇研发技能表v3.1

    by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关于知道创宇 知行合一 | 守正出奇 知道创宇是一家黑客 ...

  8. 嵌入式Linux驱动学习之路(二)u-boot体验

    u-boot工程简介 现在的u-boot支持PowerPC.ARM.X86.MIPS体系结构的上百种开发板,已经称为功能最多.灵活性最强,并且开发最积极的开源Bootloader.目前由DENX的Wo ...

  9. U-Boot编译过程解析

    解压u-boot-2010.03.tar.bz2就可以得到全部U-Boot源程序.在顶层目录下有29个子目录,分别存放和管理不同的源程序.这些目录中所要存放的文件有其规则,可以分为3类. ● 与处理器 ...

随机推荐

  1. LibSVM源码剖析(java版)

    之前学习了SVM的原理(见http://www.cnblogs.com/bentuwuying/p/6444249.html),以及SMO算法的理论基础(见http://www.cnblogs.com ...

  2. SQL查询日历

    这东西给自己留着用. 经常会用到一些查询需要做全月统计,但有些时候的统计需要将未发生日期也显示出来,因此会需要一个固定的日期表,(T6的自定义查询估计也是需要的,至少以前是这样) 下面写两种方法来获取 ...

  3. 线程等待——CountDownLatch使用

    告警性能优化过程中,遇到如下问题:1. 在数据库计算几十万个实体的KPI值的方差:2. 计算结果进行表格化处理. 这里KPI包含多个Counter的数据库函数运算(比如Decode,AVG等函数),方 ...

  4. centos 安装 jdk8和comcat8

    1.去官网下载Linux版本的jdk8 2.进入ags,把tar.gz的压缩包拷贝到用户下指定目录java,然后解压 mkdir /home/ags/java tar -zxv -f jdk-8u11 ...

  5. SQL 报表 --简易进销系统

    模型图: -- ============================================ -- Author: lifu -- Create Date: 2017-06-18 -- D ...

  6. 计算概论(A)/基础编程练习2(8题)/2:计算书费

    #include<stdio.h> int main() { // 声明与初始化 ; // k组测试数据的总费用 double s[k]; // 单价表 double price[]= { ...

  7. Python面试题之装饰器漫谈

    讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切. 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,让它 ...

  8. Tomcat分windows版和linux版

    Tomcat分windows版和linux版 官方下载链接:http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.37/bin/ windows下载e ...

  9. 03: Django Model数据库操作

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  10. 第八篇:支持向量机 (SVM)分类器原理分析与基本应用

    前言 支持向量机,也即SVM,号称分类算法,甚至机器学习界老大哥.其理论优美,发展相对完善,是非常受到推崇的算法. 本文将讲解的SVM基于一种最流行的实现 - 序列最小优化,也即SMO. 另外还将讲解 ...