计算系统基础(四)

计算系统基础(四)

一、指令集结构

在上一章,我们讲述了计算机的硬件组成部分:从它最基础的电子元件到整个冯诺依曼体系,C语言可以为我们了解我们认识之中的编程语言是如何对计算机下指令的。但是在C语言与硬件之间还存在一个代沟:机器指令。机器指令可以简单理解为:被赋予了意义的二进制序列。由于计算机的电路结构,机器只可以读懂二进制序列。而c语言必须根据规则被翻译为机器指令,才能够被机器读取并执行。这一段有意义的二进制序列集合,被称作指令集结构(ISA)。

书中概念:指令集结构指明了一台机器上编写软件时所要注意的全部信息。

二、从软件(或C语言)出发…

我们将模拟一个简单的计算机:DLX来进行计算机原理的学习。(因为真实情况下的计算机由于超进化复杂的多!)

总的来说,DLX规定了三种类型的指令:

计算系统基础(四)

操作码[31到26位]:规定了指令的种类和区别,当它为000000时表示指令为R类型;其他情况下为I或R类型。

而根据指令的不同类型,会有如图所示的各种规定,下面解释名词:

  1. SR1/SR2:表示源寄存器,一般用来写入或读取寄存器内数据

  2. DR: 表示目标寄存器,一般用来写入计算后的数据

  3. Imm16:表示十六位的立即数;PC: 表示控制单元的进程,这将放到下一章 基址+偏移量部分讲解

  4. 函数:I类型的内部分类,6位数字与R类型的分类基本相同。如:000001表示加法

下图列出了DLX的一些基本指令,可以自行对照:

计算系统基础(四)

三、从硬件出发…

我们对DLX的存储器进行排列,并标上序号:x00000000, x00000001 …… x40000000 …… xFFFFFFFF。这恰好对应了C语言中的指针,但是要注意的是,C语言对应的存储器是大端存储,而DLX的存储器则是小端存储。用一个例子形象表示两者区别:

0001 0010 | 0011 0100 | 0101 0110 | 0111 1000

在C语言对应的存储器中,表示x78563412。

DLX的存储器中,则表示x12345678。

寄存器在CPU周围,存储临时数据,加快运行速度。对于DLX来说,这样的寄存器有通用型32个,浮点型32个。我们主要讨论通用寄存器,它们以唯一的标识符表示:R0,R1,R2,……R31

注意:我们规定R0中的值一直为0,因为如果不留一个寄存器用来清空寄存(归0操作),就无法重置整个寄存器堆了

四、仍然一头雾水?来个简单的例子

计算系统基础(四)

上图中表示了一条怎么样的指令?

答案是将R0与R1中的值相加,存储到R2中,由于R0恒为0,所以其实这条指令用C语言的思维表示应该是value(R2)=value(R1)。

计算系统基础(四)

上图中,前6位是000001,表示I类型,value(R4)=6,立即数为14,那么表示的是value(R1)=value(R4)+14,即将20写入R1中

五、注意事项

指令集中包含着许多二进制独有的运算,甚至还有指针与引用,解引用的类似操作,一定要对它们有所了解并掌握,才能理解计算机底层运算逻辑,并安全度过期末考试。

猜你喜欢

转载自blog.51cto.com/14930847/2674937