首页 CH04-1 CPU设计-模型机指令系统,软件接口(4.1-4.5)

CH04-1 CPU设计-模型机指令系统,软件接口(4.1-4.5)

举报
开通vip

CH04-1 CPU设计-模型机指令系统,软件接口(4.1-4.5) 1 第四章 中央处理器 (CPU)设计 中央处理器也简称为处理器(或 称为 CPU)是组成计算机系统的核心 部件,是计算机组成原理研究的主要 内容之一。 4.1 计算机组成的层次概念 指令系统 应用软件层次 数据路径与控制层次 数字电路层次 电路及物理实现层次 编译器层次 操作系统层次 图 4.1 计算机系统的层次结构示意图 2 4.2 RISC与 CISC 4.2.1高级语言计算机体系结构 4.2.2 精简指令系统计算机体系结构 1. 精简指令系...

CH04-1 CPU设计-模型机指令系统,软件接口(4.1-4.5)
1 第四章 中央处理器 (CPU)设计 中央处理器也简称为处理器(或 称为 CPU)是组成计算机系统的核心 部件,是计算机组成原理研究的主要 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 之一。 4.1 计算机组成的层次概念 指令系统 应用软件层次 数据路径与控制层次 数字电路层次 电路及物理实现层次 编译器层次 操作系统层次 图 4.1 计算机系统的层次结构示意图 2 4.2 RISC与 CISC 4.2.1高级语言计算机体系结构 4.2.2 精简指令系统计算机体系结构 1. 精简指令系统的依据 通过优化典型的高级语言程序 中最耗费时间的操作,能够更好地支 持高级语言。表征 RISC结构通常体 现如下几点: 首先是使用大量的寄存器 其次,要精心设计流水线。 最后,应采用相对简单的指令系 统。这对于在单一芯片上实现 CPU 是有益的。 2 精简指令系统的特征 3 大多数指令单周期执行、寄存器 到寄存器的操作、只有 Load和 Store 指令可以访问存储器、简单的寻址方 式、简单的指令格式。 4.2.3 复杂指令系统的依据 推动这一趋势的两个基本理由 是: 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 简化编译器和要求改善性 能。 4.3 模型机的指令系统 假设模型机中有 32 个寄存器, 所有的算术逻辑运算都在寄存器中 进行,采用 load/store 结构,即只有 load 和 store 指令可以访问存储器。 模型机指令系统的设计原则是: 4 1. 模型机设计的第一个基本原则: 采用简单的指令系统。指令系统的 简单有利于硬件结构的规整和实 现起来方便,或者说简单性更有利 于形成规律性。 2. 模型机设计的第二个基本原则: 规模适度。例如,模型机采用了 32 个寄存器。尽管可以采用更多 的寄存器,但是,这会增加硬件信 号的传输时间。 3. 模型机设计设计的第三个基本原 则:认真权衡利弊。例如,选择固 定长度的指令格式会与不同的指 令间的要求产生矛盾,这需要从整 体上来考虑,作出合理的折中。 5 4. 模型机设计的第四个基本原则: 加快经常性事件的运行速度。 4.3.1 把模型机的汇编语句翻译成机 器指令 模型机的加法指令: add T0,S1,S2 用十进制表示是 0 17 18 8 0 32 在模型机汇编语言中,寄存器 S0 到 S7相对应的是寄存器 16到 23,寄 存器T0到T7相对应的是寄存器 8到 15。因此,S0表示寄存器 16,S1表 示寄存器 17,S2表示寄存器 18,⋯, T0表示寄存器 8,T1表示寄存器 9, 等等。 6 第一个和最后一个字段(在这条 指令中包含的内容分别是 0和 32)组 合起来告诉模型计算机这条指令执 行的是加法操作。 第二个字段给出了表示寄存器 的数字编号(17=S1),这个编号的寄 存器中的内容是加法指令的第一个 源操作数。 第三个字段给出了存放加法指 令的另一个源操作数的寄存器编号 (18=S2)。 第四个字段中的值表示用来存 放和的寄存器的编号(8=T0)。 第五个字段在这条指令中没有 使用,所以将它设成 0。 7 这样这条指令要实现的是寄存 器 S1中的值加上寄存器 S2中的值, 并把和存放在寄存器 T0中。 相对于十进制,这条指令还可以 用二进制来表示: 000000 10001 10010 01000 00000 100000 6位 5位 5位 5位 5位 6位 为了区别于汇编语言,称这种数 字形式的指令为机器语言,机器语言 的序列则称为机器代码。 4.3.2 模型机的指令格式 Op rs rt rd shamt funct 6位 5位 5位 5位 5位 6位 模型机指令中每一个字段名称 的含义如下: Op:指令的基本操作,称为操作码 rs:第一个源操作数寄存器 8 rt:第二个源操作数寄存器 rd:目标操作数寄存器,它存放的是 指令操作的结果 shamt:暂时不用。 funct:这个字段选择 Op字段中的具 体操作,有时被称为功能字段。 4.3.3 模型机寻址方式 模型机寻址方式如图 4.2所示: 1. 寄存器寻址。其操作数在寄存器 中。 2. 偏移量寻址(在模型机中称为基 址寻址)。其操作数在存储器中, 它的地址是某寄存器和指令中 常数的和。 3. 立即寻址。其操作数是包含在指 9 令本身中的常数。 4. PC相对寻址。其操作数的地址 是 PC和指令中常数的和。 5. 伪直接(pseudodirect)寻址。 其无条件转移地址是由指令中 的低 26 位地址字段和 PC 中的 高位拼接而成。 1.立即寻址(I格式) op rs rt immediate 2.寄存器寻址(R格式) op rs rt rd … funct 寄存器堆 3.基址寻址(I格式) op rs rt Address 寄存器 + 寄存器 4. PC相对寻址(I格式) op rs rt Address PC + 5.伪直接寻址(J格式) op Address PC : 字 内存 字 内存 字半字字节 内存 图 4.2 10 1. 寄存器寻址方式 首先约定如下的符号:用 Rs、 Rt、Rd分别代表 rs、rt、rd字段(见 图 4.2)所代表的寄存器。为了简单 起见,Rs、Rt、Rd 也分别表示寄存 器 Rs、Rt、Rd中的数值。严格地说, 寄存器与寄存器中的值是两个完全 不同的概念,只是在不至于产生误会 的前提之下,我们才不严格区分这两 个概念。 算术运算(如 add)指令采用的 是寄存器寻址方式,它的三个操作数 都在寄存器中。设有以下算术运算指 令: add T0,R1,R2 11 其含义是将寄存器R1和R2中的 值求和,并将其结果存放于寄存器 T0 中。R1、R2、T0 分别对应于指令格 式中的 rs、rt、rd字段所表示的寄存 器(见图 4.2),即 Rs、Rt、Rd。此 时 Rd=Rs+Rt。 寄存器寻址方式对应的指令格 式称为 R类型或是 R格式; 2.基址寻址方式 基址寻址方式的有效地址按下 式计算: EA=Rs+address (4.1) 其中 Adress是指令格式中的低 16位 字段(见图 4.2)的数值。 基址寻址方式对应的指令格式 12 称为 I类型或 I格式。 数据传送指令使用 I 格式。I 格 式的各个字段如下所示: Op rs rt address 6位 5位 5位 16位 load 指令采用基址寻址方式(I 格式)。 把数据从存储器中读到寄存器 中的情况称为读(load)。下面来看一 下 load指令: load T0,32(S3) //T0中存放的是 A[8] 这里,19(对应于寄存器 S3)存 放在 rs字段中,表示编号为 19的寄 存器;8(对应于 T0)存放在 rt字段 中,表示编号为 8的寄存器。并且 32 13 存放在指令的 address字段中。 store 指令采用基址寻址方式(I 格式)。 store 指令的功能是将寄存器 Rt 中的数据传送(写)到存储器当中去, 存储器的地址也由(4.1)式计算。 表 4.1模型机指令译码 指令 格式 Op rs rt rd shamt funct address add R 0 reg reg reg 0 32 n.a. sub R 0 reg reg reg 0 34 n.a. load I 35 reg reg n.a. n.a. n.a. address store I 43 reg reg n.a. n.a. n.a. address 在上面的表 4.1中,“reg”表示寄 存器的名字,在 0 到 31 之间, “address”表示低 16 位(地址), “n.a.”(不使用)表示在本格式中没 有该字段。请注意,add和 sub指令 14 的 Op 字段的值是相等的,硬件使用 funct字段来决定操作的类型:加(32) 或是减(34)。 3. 立即寻址方式 加法指令中,如果有一个操作数 为常数,则称为立即数加法指令,记 为 addi。寄存器 SP加常数 4就可以 写成: addi SP,SP,4 //SP=SP+4 addi 指令的 Op字段的值是 8。 这条指令可译为如下机器码(十 进制): Op rs rt 立即数 8 29 29 4 寄存器 29 对应于 SP 。addi 二 15 进制格式如下: 001000 11101 11101 0000 0000 0000 0100 立即数和常数也经常进行比较。 因为寄存器 ZERO值总为零,可以将 它和零比较。为了和其他值比较,就 必须有一个立即数形式的小于指令。 如比较 S2是否小于 10,可写成: slti T0,S2,10 // 如果S2<10,则T0 = 1 32位常数的处理 指令 lui的执行情况如图 4.3 lui T0,255 // T0为寄存器 8 译为机器语言: 执行完此指令寄存器 T0内容为: 图 4.3 00111 00000 01000 0000 0000 1111 1111 0000 0000 1111 1111 0000 0000 0000 0000 16 指令 lui的功能是将指令中的 16 位立即数传入某寄存器的高 16 位, 再将其低 16位置零。 那么,如何用模型机汇编码实现 将如下的一个 32 位常数装入寄存器 S0? 0000 0000 0011 1101 0000 1001 0000 0000 首先装入高 16 位,化成十进制 为 61,使用 lui指令: lui S0,61 //61(十进制)=0000 0000 0011 1101(二进制) 执行后 S0的内容为: 0000 0000 0011 1101 0000 0000 0000 0000 下一步加上低 16位(十进制为 2304): addi S0,S0,2304 //2304(十进制)=0000 1001 0000 0000 S0的最终值即为所求的结果: 0000 0000 0011 1101 0000 1001 0000 0000 4. PC相对寻址方式 17 bne S0,S1,Exit //如果 S0≠S1, 转向标号为 Exit的语句。 经汇编为如下指令,其中转移地址只 占 16位: 如果程序的转移地址须装入此 16位字段,则意味着所有的程序大小 都不能超过 216,这在现实中是远远不 够的。一种解决 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 是指定一个寄存 器,将它的值与转移地址相加,这样 转移指令的地址计算如下: 程序计数器中的值=某寄存器中的值+转移地址(4.3) 这个和允许程序达到 232,解决了转移 地址大小的问题。 5 16 17 Exit 6位 5位 5位 16位 18 那么现在的问题是使用哪个寄 存器? 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 来自于如何使用条件转 移。条件转移用于循环和 if语句中, 因此它们倾向转向附近的指令。程序 计数器(PC)包含当前指令地址的信 息,当把指令格式中的低 16 位(即 4.3 式的转移地址)看成是二进制补 码时有: -215≤转移地址≤215-1 于是条件转移的范围是以当前的 PC 值为中心,上下的偏移范围大约是 215。由于几乎所有的循环和 if语句的 转移范围都小于 215字,所以(4.3) 式的右边选择寄存器 PC 是理想的。 这种形式的转移寻址称为 PC 相对寻 19 址。 注意模型机 PC中的当前(地址) 值是相对于下一条指令(PC+4)的地 址而不是当前指令的地址。 5.伪直接寻址方式 在条件转移指令中使用 PC 相对 寻址。 对无条件转移指令和转移连接 指令使用 J格式为程序调用提供比较 长的转移地址。 jump 10000 // 转向指令 10000 经汇编为如下格式: 2 10000 6位 26位 此指令中无条件转移操作码值为 2, 20 无条件转移地址为 10000。 4.4 汇编语言概念 翻译器(translator):翻译器是这 样一种程序,它可以把用某种语言编 写的用户程序转换成另一种语言的 程序。 源语言(source language):翻译 器转换之前的程序使用的语言称为 源语言。 目标语言(target language):翻译 器转换之后的语言称为目标语言。 汇编语言与汇编器(assembler): 如果源语言基本上是数字型机器语 言的符号表示,则源语言称为汇编语 言;相应地就把这种源语言的翻译器 21 称为汇编器。 编译器(complier):如果源语言 是 C 语言(或 Java 语言等)这样的 高级语言,而目标语言或者是数字型 机器语言或者是机器语言的符号表 示(即汇编语言),那么这种翻译器 就称为编译器。 在纯粹的汇编语言中,每条语句 都精确地产生一条机器指令。 汇编语言除了具有语句和机器 指令一一对应的特性之外,还有一个 和高级语言不同的特性。汇编语言程 序员可以访问目标计算机的所有指 令,可以利用目标计算机的所有特 性,而高级语言程序员就没有这样的 22 能力。 汇编语言和高级语言的另一个 重要的区别是:汇编语言程序只能运 行在指令系统相同的系列计算机上, 而高级语言程序则可以运行在各种 不同的计算机上。对许多应用来说, 这种软件的可移植性相当重要。 4.5 指令系统—软件的接口 在这一节里,将考虑将高级语言 —C语言的源程序转换成模型机的汇 编语言程序,看看模型机的汇编语言 程序究竟要完成哪些基本的操作,这 将有助于加深理解中央处理器的硬 件设计部分。 23 4.5.1 C 语言赋值语句编译为模型机 汇编语言程序 1. 计算机硬件的操作 模型机的算术逻辑运算由 R 型 指令实现,因此,R型指令是模型机 的处理器硬件应该能够执行的基本 指令之一。模型机的汇编语言符号表 达如下: add a1,a2,a3 它表示把 a2和 a3两个变量相加,它 们的和存放在变量 a1中。 2. 将两个 C 赋值语句编译成模型机 汇编指令 设 C程序的代码段中包含了 a1, a2,a3,a4,a5五个变量: 24 a1 = a2 + a3 ; a4 = a1 – a5 ; 上面两条简单的 C 赋值语句可 以直接翻译成模型机的汇编语言指 令: add a1,a2,a3 sub a4,a1,a5 可见,为了实现高级语言的赋值 语句,加减法运算是模型机的处理器 硬件应该能够完成的基本操作。 表 4.2模型机汇编语言 类型 指令 例子 含义 注释 add add a1,a2,a3 a1 = a2 + a3 总是三个操作数 算术逻 辑运算 类型(R 型) sub sub a1,a2,a3 a1 = a2 - a3 总是三个 操作数 3. 将一个复杂的 C 赋值语句编译成 25 模型机指令 这个稍微复杂的 C 赋值语句包 含了 f,g,h,i,j五个变量: f = ( g - h ) – ( i + j ); C编译器必须把这个赋值语句分成几 个模型机的汇编指令,结果如下: sub t0,g,h // 中间变量 t0中存放 g,h的差 add t1,i,j // 中间变量 t1中存放 i,j的和 sub f,t0,t1 // f等于 t0减 t1,也就是(g-h)- (i+j) 4. 用寄存器编译 C的赋值语句 在模型机中,习惯是大写字母表 示寄存器。因此从现在起用 S0,S1,⋯ 来表示寄存器,它分别对应于 C语言 中的相关变量,并在模型机中将 C语 言源程序编译成模型机的相应的指 令时需要用到的临时(中间)寄存器 26 用 T0,T1,⋯来表示。 将程序的变量同寄存器联系起 来是编译器的工作。例如: f = ( g + h ) – ( i + j ); 设编译器将变量 f,g,h,i,j 分别放在寄存器 S0,S1,S2,S3, S4中。那么经过编译后的模型机汇编 语言代码如下: add T0,S1,S2 //寄存器 T0中存放 g,h的和 add T1,S3,S4 //寄存器 T1中存放 i,j的和 sub S0,T0,T1 // f等于 T0减 T1,也就是((g+h)- (i+j)) 5. 当一个操作数在存储器中时编译 一个赋值语句 现在编译下面的 C赋值语句: g = h + A[8]; 假设 A是一个包含 100个字的数组, 27 并且在这之前编译器已经将变量 g和 h 存放在寄存器 S1和 S2中,又假设 数组的首地址(或称为基地址)在寄 存器 S3中,则结果是: load T0,32(S3) // 中间寄存器T0中的值是A[8] add S1,S2,T0 // g = h + A[8] 可见,为了实现高级语言(C语 言)的数组的运算,load指令是模型 机的处理器硬件应该能够执行的基 本的指令之一。 在模型机中,字必须总是从 4的 倍数的地址开始。这种要求称为地址 对齐限制,这种限制在很多 RISC计 算机结构中都具有。 在大端计算机中,字节(Byte)0, 28 1,2,3 在存储器中将产生如下的字 存储结果: 字节序号 0 1 2 3 而在小端计算机中,字存储结果如 下: 字节序号 3 2 1 0 6. 用 load和 store指令进行编译 假设变量 h存放在寄存器 S2中, 并且数组 A 的基地址存放在寄存器 S3 中。考虑下面的 C 语句的模型机 汇编代码 A[12]=h+A[8]; 对应的模型机汇编代码是: load T0,32(S3) //中间寄存器 T0中存放 A[8]的值 29 add T0,S2,T0 //中间寄存器 T0中存放 h+A[8]的值 store T0,48(S3) //把 h+A[8]的值存放在 A[12]中 store 指令的形式同 load 指令的 形式是非常相似的。 7. 用数组下标变量索引进行编译 这里考虑的是一个具有下标变 量的数组: g=h+A[i]; 假设 A数组中有 100个元素,并 且基地址在寄存器 S3 中,编译器把 变量 g,h,i分别存放在 S1,S2,S4 中。这段 C 语句的模型机汇编代码 是: add T1,S4,S4 //中间寄存器 T1中的值是 2i add T1,T1,T1 //中间寄存器 T1中的值是 4i add T1,T1,S3 //中间寄存器 T1中存放了 A[i]的地址 load T0,0(T1) //中间寄存器 T0=A[i] 30 add S1,S2,T0 // g=h+A[i] 表 4.3(a)模型机操作数 名称 例子 注释 32个寄存器 S0,S1,…… T0,T1,…… 数据快速定位。在模型机中,数据必须存放在 寄存器中才能进行算术逻辑运算。 230存储字 Memory[0], Memory[4],… Memory[4294967292] 在模型机中只有数据传送指令才能存取。模型 机使用字节编址,所以连续的字相差 4个字节。 存储器中有像数组这样的数据结构,有溢出寄 存器。 表 4.3(b)模型机汇编语言 类型 指令 例子 含义 注释 add add S1,S2,S3 S1=S2+S3 三操作数,数据在寄存器中 算 术 运算 sub sub S1,S2,S3 S1=S2-S3 三操作数,数据在寄存器中 load load S1,100(S2) S1=Memory[S2+100] 数据从存储器传送到寄存器 数 据 传送 store store S1,100(S2) Memory[S2+100]=S1 数据从寄存器传送到存储器 4.5.2把模型机的汇编语言翻译成机 器语言(自学) 4.5.3 把 C 语言的条件转移语句编译 成模型机的汇编语言程序 第一条指令是: beq register1,register2,L1 31 第二条指令是: bne register1,register2,L1 1. 把 if语句编译成条件分支 在下面的 C代码中,f,g,h,i, j是变量: if (i= =j) goto L1; f=g+h; L1: f=f-i; 假设 f 到 j 这五个变量分别存放在寄 存器 S0到 S4中,那么该程序编译后 的代码是: beq S3,S4,L1 //如果 i等于 j,跳到标号 L1处 add S0,S1,S2 //f=g+h L1: sub S0,S0,S3 //f=f-i,这条指令总是被执行 2. 把 if-then-else 语句编译成条件转 移语句 32 仍旧使用前面变量和寄存器,编 译下面的 if语句: if (i= =j) f=g+h; else f=g-h; 编译成汇编语言就是: bne S3,S4,Else //如果 i不等于 j,那么执行 Else 标号的指令 add S0,S1,S2 //f=g+h(跳过如果 i不等于 j这种情况) jump Exit //跳到 Exit处 Else: sub S0,S1,S2 //f=g-h(跳过如果 i=j这种情况) Exit: 可见,为了实现高级语言(C语 言)的分支转移指令,beq,bne 和 jump 指令是模型机的处理器硬件应 该能够实现的基本的指令。 4.5.4 把 C 语言的循环语句编译成模 型机的汇编语言程序 1. 用下标变量的数组编译循环语句 下面是 C语言的一个循环语句: 33 Loop: g=g+A[i]; i=i+j; if(i!=h) goto Loop; 假设数组 A有 100个元素,并且 变量 g,h,i,j 分别存放在寄存器 S1,S2,S3,S4 中。再假设该数组 的基地址存放在寄存器 S5 中。那么 这条循环语句的模型机汇编代码是: Loop: add T1,S3,S3 //中间寄存器 T1=2*i add T1,T1,T1 //中间寄存器 T1=4*i add T1,T1,S5 //T1中存放 A[i]的地址 load T0,0(T1) //中间寄存器 T0=A[i] add S1,S1,T0 //g=g+A[i] add S3,S3,S4 //i=i+j bne S3,S2,Loop //如果 i不等于 h,返到 Loop 2. 编译一个 while循环语句 下面是一个典型的循环语句: 34 while (save[i] = = k) i = i+j; 假设变量 i,j,k存放在寄存器 S3, S4,S5 中,并且数组 save 的基地址 存放在寄存器 S6 中。那么这条循环 语句的模型机汇编语言程序是: Loop: add T1,S3,S3 //中间寄存器 T1=2*i add T1,T1,T1 //中间寄存器 T1=4*i add T1,T1,S6 //T1中存放 save[i]的地址 load T0,0(T1) //中间寄存器 T0=save[i] bne T0,S5,Exit //如果 save[i] ≠k,跳出循环 add S3,S3,S4 //i=i+j jump Loop //跳回到 Loop处 Exit: 3. 编译一个小于比较指令 在模型机中称为小于(比较)指 令,记为 slt(set on less than)。例如: slt T0,S3,S4 35 这条指令是指如果寄存器 S3 中的值 要比寄存器 S4 中的值要小时,寄存 器 T0的值为 1,否则为 0。 模型机编译器使用 slt,beq,bne 指令以及通过读取值总为 0的寄存器 ZERO来建立所有相关的条件:相等、 不等、小于、小于等于、大于、大于 等于。 如果变量 a(在寄存器 S0中)比 变量 b(在寄存器 S1中)小,如果该 条件成立,那么则转移到标号为 Less 的分支的编译代码是: slt T0,S0,S1 //如果 S0
本文档为【CH04-1 CPU设计-模型机指令系统,软件接口(4.1-4.5)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_316916
暂无简介~
格式:pdf
大小:85KB
软件:PDF阅读器
页数:40
分类:其他高等教育
上传时间:2010-11-27
浏览量:22