第三章----指令系统.pptVIP

  • 43
  • 0
  • 约2.66万字
  • 约 98页
  • 2020-06-07 发布于四川
  • 举报
第三章 指令系统 3.1 概述 要给计算机硬件直接下命令,就必须使用机器的语言。机器语言中的“单词”称为指令,其“词汇表”称为指令集。本章将介绍现实中计算机所使用的指令集系统。 通过学习机器指令,你会了解到计算机中的一个重要概念:存储程序(stored-rogram) 着重介绍的是MIPS指令集 ,涉及到MIPS指令的操作数、指令格式及指令类别 一、指令系统的发展 【解答】 add a, b, c # a=b+c sub d, a, e # d = a – e 例3.2 把一个复杂的C语言赋值语句编译成MIPS汇 编指令 f = (g + h) – (i + j); 【解答】 add t0, g, h # 临时变量t0=g + h的和 add t1, i, j # 临时变量t1=i + j的和 最后做减法,把差放在f中: sub f, t0, t1 # f=t0 - t1的值 完成一个类似于加法的操作需要3个操作数:2个数参与运算,1个数存放结果。每条指令刚好包含3个操作数,不多也不少,这是遵循简化硬件的原则,因为操作数的个数不定的硬件实现比个数固定的硬件实现复杂得多。这就是硬件设计要考虑的第一条原则: 设计原则1:简单性来自规则性。(Simplicity favors regularity. ) 3.3 计算机硬件的操作数 cpu的寄存器(register) 中---寄存器操作数 寄存器是建造计算机的基石,因为它们是硬件设计中用到的基本单元,对于程序员也是可见的,但其数量有限。 一、MIPS的寄存器 在MIPS体系结构中,一个寄存器的长度是32位;又称32位为字长。MIPS体系中的数据字、指令字都是32位。 MIPS寄存器汇编符号记为$s0、$s1、 $s2、$s3 …$s7,对应编码为:16、17、… 23; 以及$t0、$t1、 $t2、$t3 …$t7,对应编码为:8、9、… 15。 寄存器和编程语言的变量的一个主要区别是,寄存器数量有限,现在的计算机中一般是32个。MIPS也只有32个寄存器。为什么限于32个寄存器? 原因可以从硬件设计的第二条原则找到: 设计原则2:越小越快。(Smaller is faster. ) 寄存器的数量如果很大,则电信号需要传输的距离更长,因而时钟周期也会变得很长。 例3.3 使用寄存器编译C语言赋值语句 以上例C语言赋值语句为例: f = (g + h) – (i + j); 二、操作数在内存单元中 计算机如何表示和存取数组这样的复杂数据结构呢? 处理器只能在寄存器中保存很少的数据,而内存则可以存放数以百万计的数据单元。因此,数组这样的数据结构存放在内存中。 内存单元用地址编号表示,叫内存地址 ,例: 实际MIPS内存地址:一个字=4字节表示,按字节编址: 三、数据传送指令 : LW与 SW 1、取字指令(Load Word)LW 指令格式: Lw rt, offset(rs) #注释 ① offset为偏移量,是数组首地址到数组中某元素存储位置的字节偏移量,是一个常数。 ② rs是存储数组首地址的寄存器,称为基址寄存器 ③ rt为目的操作数寄存器,存放取自【(rs)+offset】的数据 注意:offset(rt)表示存放数据的内存单元地址,即内存地址。 例3.4 编译有一个操作数在内存中的C语言赋值语句: g = h + A[8]; 设数组A[100] 【解答】 操作数A[8]在内存中,首先得把它转移到寄存器中。它的地址是数组A的基地址加上8*4的和。 假设$s3存放数组A的基地址,g对应$s1寄存器,h对应$s2寄存器。 lw $t0, 32($s3) # 临时寄存器$t0存放A[8]的值 add $s1, $s2, $t0 # g = h + A[8] 数据传送指令中的常量称为偏移量(offset),用来计算地址的寄存器称为基地址寄存器(base register)。 内存有效地址EA=offset(偏移量)+ rs(基地址寄存器) 2、存字指令(Store Word)SW 例3.5 使用取指令和存储指令进行编

文档评论(0)

1亿VIP精品文档

相关文档