计算机系统结构》电子教案(课2).ppt_第1页
计算机系统结构》电子教案(课2).ppt_第2页
计算机系统结构》电子教案(课2).ppt_第3页
计算机系统结构》电子教案(课2).ppt_第4页
计算机系统结构》电子教案(课2).ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2014.2.17,计算机系统结构,1,第2章 指令系统的设计,本章主要内容 (1) 指令操作码的优化(不讲) (2) RISC技术简介 (3) MIPS指令集 (4) MIPS模拟器(补充),2014.2.17,计算机系统结构,2,2.4.2 RISC技术简介(P44),名词:RISCReduced Instruction Set Computing,精简指令集计算机 (1)RISC产生的背景:20%与80%规律 (2)RISC设计的基本原则: 只设置最常用的简单指令,凡遇复杂操作均用多条简单指令实现; 指令长度固定,操作码与操作数长度都尽量统一; 基本指令的启动时间间隔降低到1个时钟周期; 访问主存只有load和store指令,用变址寻址; 尽量采用硬连逻辑对指令译码; 为了加快执行速度,在编译过程中对目标代码结构进行优化; (3)RISC性能优势的原因 采用RISC技术的主要动机是使各条指令的执行时序尽可能一致,CPU在执行时间上可以把它们安排得更紧凑,就像许多大小相近的箱子容易被堆放得更密集一样。这样机器内的各种资源可以充分利用,单位时间内能执行更多的指令,速度更快。 这方面的具体内容,在第3章讲流水线时会详细介绍。,2014.2.17,计算机系统结构,3,2.4.2 RISC技术的发展,20世纪70年代初,IBM研究中心的John Cocke证明,计算机中约20%的指令承担了80%的工作,1974年,他提出RISC的概念。 在RISC的早期研究中,加州大学伯克利分校(UC Berkeley)和斯坦福大学(Stanford)提出了许多有创见的新思想。伯克利率先在1982年完成了RISC I型32位芯片的设计,斯坦福大学则在John Hennessy(现任校长)带领下于1983年完成了第一个采用RISC理念的商用MIPS微处理器。 1984年Hennessy等人创建了MIPS计算机公司,1998年改名为MIPS技术公司(美普思科技公司,MIPS Technologies Inc),目前是美国最著名的芯片设计公司之一。MIPS技术公司本身不生产微处理器,它只设计高性能工业级的32位和64位CPU的结构体系,并且向其它半导体公司提供使用其内核(IP)的授权,用于生产基于MIPS而又各具特色的微处理器。1999年MIPS技术公司发布了MIPS32和MIPS64架构标准。 MIPS的通用微处理器主要用于构建高性能工作站、服务器和超级计算机系统,其嵌入式产品在1999年以前全球销量第一,目前也仅次于ARM。,2014.2.17,计算机系统结构,4,MIPS处理器,MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。 MIPS具有强大的应用基础,能在MIPS上运行的操作系统,包括Linux、WindRiver、WinCE、GNU、和Monta Vista等;支持14种编译器,包括MIPS、SDE、Green Hills、GNU和WindRiver等;支持15种调试器,包括GNU、Green Hills、WindRiver、ASHLING和FS2等;支持18种仿真工具,包括Mentor Graphics、Synopsys、CoWare和Candence等。 中国科学院计算所的龙芯1和2都采用64位MIPS指令架构。中国龙芯已与MIPS公司合作,购买其指令系统授权,以便批量生产与出口。,2014.2.17,计算机系统结构,5,2.6.1 MIPS的寄存器(P47),32个64位通用寄存器(GPRs),也称为整数寄存器 名称是R0,R1,R31(也可写为$0,$1,$31) R0的值永远是0,可用作源寄存器,也可作为无用结果的目的寄存器; R31用于存放跳转并链接类指令的返回地址。 32个64位浮点数寄存器(FPRs) F0,F1,F31 用来存放32个单精度浮点数(32位),也可以用来存放32个双精度浮点数(64位)。 存储单精度浮点数(32位)时,只用到FPR的一半,其另一半没用。 特殊功能寄存器 PC(program counter,程序计数寄存器) HI(整数乘除结果高位寄存器,除法余数) LO(整数乘除结果低位寄存器,除法的商) 它们可以与通用寄存器交换数据。 浮点状态寄存器:用来保存有关浮点操作结果的信息。,2014.2.17,计算机系统结构,6,MIPS的寄存器别名(程序员习惯用法),MIPS编译器支持一些专业程序员对32个通用寄存器GPR(GENERAL PURPOSE REGISTER)约定的习惯性用法(非强制的): REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $2-$3 $v0-$v1 函数调用返回值(values for results and expression evaluation) $4-$7 $a0-$a3 函数调用参数(arguments) $8-$15 $t0-$t7 暂时的(或随便用的) $16-$23 $s0-$s7 保存的(或如果用,需要SAVE/RESTORE的)(saved) $24-$25 $t8-$t9 暂时的(或随便用的) $26-$27 $k0-$k1 由操作系统的异常或中断处理程序使用 $28 $gp 全局指针(Global Pointer) $29 $sp 堆栈指针(Stack Pointer) $30 $fp 帧指针(Frame Pointer) (BNN:fp is stale acutally, and can be simply used as $t8) $31 $ra 返回地址(return address),2014.2.17,计算机系统结构,7,2.6.2 MIPS的数据表示,整数 字节(8位) 半字(16位) 字(32位) 双字(64位) 浮点数 单精度浮点数(32位) 双精度浮点数(64位) 字节、半字或者字在装入64位寄存器时,用零扩展或者用符号位扩展来填充该寄存器的剩余部分。装入以后,对它们将按照64位整数的方式进行运算。,2014.2.17,计算机系统结构,8,2.6.3 MIPS的数据寻址方式(P47),立即数寻址与偏移量寻址; 立即数字段和偏移量字段都是16位的。 寄存器间接寻址是通过把0作为偏移量来实现的; 16位绝对寻址是通过把R0(其值永远为0)作为基址寄存器来完成的; MIPS的存储器按字节寻址,地址为64位; 所有存储器访问必须是边界对齐的,即访问地址必须是该数据长度(字节 数)的整倍数,又叫整数边界原则; MIPS的存储器按字节编制; 所有数据字、指令字从最高有效位开始依次标记为bit 0、1、2 ; MIPS处理器的存储顺序,可以设置为“小端字节表示顺序”( Littile- Endian,低位字节放在低地址)或者“大端字节表示顺序”(Big-Endian, 高位字节放在低地址,以便适合网络数据包内顺序)。在下文使用的 MIPS64模拟器中采用“小端字节表示顺序”。,2014.2.17,计算机系统结构,9,2.6.4 MIPS指令格式(P48),MIPS32和MIPS64体系结构定义了兼容的32位和64位处理机指令 使用条件编译或宏汇编指令能写出可同时在MIPS32和MIPS64上运行的程序 寻址方式编码到操作码中 所有的指令都是32位的 操作码占6位 3种指令格式(3种格式中,同名字段的位置固定不变),2014.2.17,计算机系统结构,10,2.6.4 MIPS指令格式I类指令,包括所有的load和store指令,立即数指令,分支指令,寄存器跳转指令,寄存器链接跳转指令。 立即数字段为16位,用于提供立即数或偏移量。 load指令 访存有效地址:Regsrsimmediate 从存储器取来的数据放入寄存器rt store指令 访存有效地址:Regsrsimmediate 要存入存储器的数据放在寄存器rt中 立即数指令 Regsrt Regsrs op immediate 分支指令 转移目标地址:Regsrsimmediate,rt无用 寄存器跳转、寄存器跳转并链接 转移目标地址为Regsrs,2014.2.17,计算机系统结构,11,2.6.4 MIPS指令格式R类指令,包括ALU指令,专用寄存器读/写指令,move指令等。 ALU指令 Regsrd Regsrs funct Regsrt funct为具体的运算操作编码,2014.2.17,计算机系统结构,12,2.6.4 MIPS指令格式J类指令,包括跳转指令,跳转并链接指令,自陷指令,异常返回指令。 在这类指令中,指令字的低26位是偏移量,它与PC值相加形成跳转的地址。,2014.2.17,计算机系统结构,13,2.6.5 MIPS的操作(P49),MIPS指令可以分为四大类 load和store ALU操作 分支与跳转 浮点操作 符号的意义 xny:从y传送n位到x x,yz:把z传送到x和y 下标:表示字段中具体的位; 对于指令和数据,按从最高位到最低位(即从左到右)的顺序依次进行编号,最高位为第0位,次高位为第1位,依此类推。 下标可以是一个数字,也可以是一个范围。 例如:RegsR40:寄存器R4的符号位 RegsR456-63:R4的最低字节,2014.2.17,计算机系统结构,14,2.6.5 MIPS的操作(续),Mem:表示主存; 按字节寻址,可以传输任意个字节。 上标:用于表示对字段进行复制的次数。 例如:032表示一个32位长的全0字段 符号#:用于两个字段的拼接,并且可以出现在数据传送的任何一边。 举例:R8、R6是64位的寄存器,下式 RegsR832-63 32(Mem RegsR60)24 # Mem RegsR6 表示的意义是:以R6的内容作为地址访问内存,得到的字节按符号位扩展为32位后存入R8的低32位,R8的高32位(即RegsR80-31)不变。,2014.2.17,计算机系统结构,15,load和store指令,2014.2.17,计算机系统结构,16,ALU指令,寄存器寄存器型(RR型)指令或立即数型 算术和逻辑操作:加、减、与、或、异或和移位等 R0的值永远是0,它可以用来合成一些常用的操作。 例如:DADDIU R1,R0,#100 给寄存器R1装入常数100 DADD R1,R0,R2 把寄存器R2中的数据传送到寄存器R1,2014.2.17,计算机系统结构,17,2.6.6 MIPS的控制指令(P50),由一组跳转和一组分支指令来实现控制流的改变 典型的MIPS控制指令,2014.2.17,计算机系统结构,18,跳转指令,根据跳转指令确定目标地址的方式不同以及跳转时是否链接,可以把跳转指令分成4种。 确定目标地址的方式 把指令中的26位偏移量左移2位(因为指令字长都是4个字节)后,替换程序计数器的低28位; 间接跳转:由指令中指定的一个寄存器来给出转移目标地址。 跳转的两种类型 简单跳转:把目标地址送入程序计数器。 跳转并链接:把目标地址送入程序计数器,把返回地址(即顺序下一条指令的地址)放入寄存器R31。,2014.2.17,计算机系统结构,19,分支指令(条件转移),分支条件由指令确定 例如:测试某个寄存器的值是否为零 提供一组比较指令,用于比较两个寄存器的值。 例如:“置小于”指令 有的分支指令可以直接判断寄存器内容是否为负,或者比较两个寄存器是否相等。 分支的目标地址 由16位带符号偏移量左移两位后和PC相加的结果来决定 一条浮点条件分支指令:通过测试浮点状态寄存器来决定是否进行分支。,2014.2.17,计算机系统结构,20,2.6.7 MIPS的浮点操作(P51),由操作码指出操作数是单精度(SP)或双精度(DP) 后缀S:表示操作数是单精度浮点数 后缀D:表示是双精度浮点数 浮点操作 包括加、减、乘、除,分别有单精度和双精度指令。 浮点数比较指令 根据比较结果设置浮点状态寄存器中的某一位,以便于后面的分支指令BC1T(若真则分支)或BC1F(若假则分支)测试该位,以决定是否进行分支。,2014.2.17,计算机系统结构,21,注意浮点数的存储格式只有64位双精度这一种,没有32位单精度数。,MIPS64伪指令,2014.2.17,计算机系统结构,22,MIPS64指令集1,2014.2.17,计算机系统结构,23,MIPS64指令集2,2014.2.17,计算机系统结构,24,MIPS64指令集3,2014.2.17,计算机系统结构,25,MIPS64指令集4,2014.2.17,计算机系统结构,26,MIPS64指令集5,2014.2.17,计算机系统结构,27,MIPS64指令集6,2014.2.17,计算机系统结构,28,MIPS64模拟器介绍1,2014.2.17,计算机系统结构,29,MIPS64模拟器介绍2,2014.2.17,计算机系统结构,30,MIPS64模拟器介绍3,2014.2.17,计算机系统结构,31,MIPS64模拟器的存储器映射I/O地址与命令,CONTROL: .word32 0x10000 ;控制寄存器(映射地址) DATA: .word32 0x10008 ;数据寄存器(映射地址) Set CONTROL = 1, 将DATA作为无符号整型数输出 Set CONTROL = 2, 将DATA作为有符号整型数输出 Set CONTROL = 3, 将DATA作为浮点数输出 Set CONTROL = 4, 将DATA作为输出字串的首地址 Set CONTROL = 5, 将DATA+5 作为x坐标,DATA+4作为y坐标,DATA作为RGB彩色值输出 Set CONTROL = 6, 清除终端屏幕 Set CONTROL = 7, 清除图形屏幕 Set CONTROL = 8, 从键盘读DATA(整型数或浮点数) Set CONTROL = 9, 从DATA读1字节,无字符回显,数据地址,0x00000,程序存储器,程序起点,lwu r24,DATA(r0),lwu r25,CONTROL(r0),指令地址,0x00000,数据存储器,常规数据区,0x10000,0x10008,sd r9,0(r24),sd r2,0(r25),控制寄存器,数据寄存器,仿真非智能终端,2014.2.17,计算机系统结构,32,MIPS64模拟器演示实验1 整数加法,文件名:sum.s .data A: .word 10 B: .word 8 C: .word 0 .text main: ld r4,A(r0) ;r4(A) ld r5,B(r0) ;r5(B) dadd r3,r4,r5 ;r3r4+r5 sd r3,C(r0) ;Cr3 halt,2014.2.17,计算机系统结构,33,MIPS64模拟器演示实验2 阶乘1,文件名:factorial.s ; ; 阶乘示例 ; 返回值放r10 ; .data number: .word 10 ;此数未用,可能想作为输入值的上限 title: .asciiz “factorial program n= “ ;提示字符串 CONTROL: .word32 0x10000 DATA: .word32 0x10008 .text lwu r21,CONTROL(r0) ;r21指向CONTROL单元(端口) lwu r22,DATA(r0) ;r22指向DATA单元(端口),2014.2.17,计算机系统结构,34,MIPS64模拟器演示实验2 阶乘2,daddi r24,r0,4 ;输出ascii字串(提示信息) daddi r1,r0,title sd r1,(r22) sd r24,(r21) daddi r24,r0,8 ;从键盘读输入值到r1(整型量) sd r24,(r21) ld r1,(r22) start: daddi r29,r0,0x80 ;r29指向堆栈区起点(十进制值=128) jal factorial ;调阶乘子程序,返回值在r10(整型量) daddi r24,r0,1 ;输出r10的结果 sd r10,(r22) sd r24,(r21) halt ;停机,2014.2.17,计算机系统结构,35,MIPS64模拟器演示实验2 阶乘3,; ;阶乘子程序,入口参数在r1,返回值在r10 ; factorial: slti r10,r1,2 ;如果r12(即r1=1)则r101,否则r100 bnez r10,out ;如果r10=1则子程序返回 sd r31,(r29) ;子程序返回地址压进堆栈 daddi r29,r29,8 ;堆栈指针+8 sd r1,(r29) ;r1当前值压进堆栈 daddi r29,r29,8 ;堆栈指针+8 daddi r1,r1,-1 ;r1r11 jal factorial ;递归调用,将乘数序列依次入栈(n,3,2),2014.2.17,计算机系统结构,36,MIPS64模拟器演示实验2 阶乘4,dadd r4,r0,r10 ;递归出口(首次r10=1),r4r10 daddi r29,r29,-8 ;堆栈指针8 ld r3,(r29) ;出栈:r3栈顶单元 dmulu r3,r3,r4 ;r3r3r4 dadd r10,r0,r3 ;r10乘积r3 daddi r29,r29,-8 ;堆栈指针8 ld r31,0(r29) ;r31返回地址 out: jr r31 ;子程序返回到r31所指的地址,2014.2.17,计算机系统结构,37,MIPS64模拟器演示实验3 存储器映射输出,文件名:output.s .data A: .word 10 B: .word 8 C: .word 0 CR: .word32 0x10000 DR: .word32 0x10008 .text main: ld r4,A(r0) ;r4(A) ld r5,B(r0) ;r5(B) dadd r3,r4,r5 ;r3r4+r5 sd r3,C(r0) ;Cr3 lwu r1,CR(r0) ;r1指向Control寄存器 lwu r2,DR(r0) ;r2指向Data寄存器 daddi r10,r0,1 ;准备命令1(将DATA作为无符号整型数输出) sd r3,(r2) ;Data寄存器r3 sd r10,(r1) ;Control寄存器1 halt,2014.2.17,计算机系统结构,38,MIPS64模拟器演示实验4存储器映射输入/输出,数据地址,0x00000,程序存储器,程序起点,lwu r24,DATA(r0),lwu r25,CONTROL(r0),指令地址,0x00000,数据存储器,常规数据区,0x10000,0x10008,sd r9,0(r24),sd r2,0(r25),控制寄存器,数据寄存器,仿真非智能终端,文件名:testio.s 向虚拟终端输出字符串(命令4)、画线、画彩色点(命令5)。 CONTROL: .word32 0x10000 DATA: .word32 0x10008 .text lwu $t8,DATA($zero) ; $t8 = address of DATA register lwu $t9,CONTROL($zero) ; $t9 = address of CONTROL register daddi $v0,$zero,1 ; set for unsigned integer output ld $t1,int($zero) sd $t1,0($t8) ; write integer to DATA register sd $v0,0($t9) ; write to CONTROL register and make it happen daddi $v0,$zero,2 ; set for signed integer output ld $t1,int($zero) sd $t1,0($t8) ; write integer to DATA register sd $v0,0($t9) ; write to CONTROL register and make it happen,2014.2.17,计算机系统结构,39,习题2.14(补充,MIPS64指令系统练习),人工模拟以下MIPS程序的单条指令运行方式,在表中用16进制编码记录每一步产生的结果(不得借助模拟软件)。 .data n: .word 3 x: .double 0.5 .text LD R1, n(R0) L.D F0, x(R0) DADDI R2, R0, 1 ; R2 1 MTC1 R2, F11 ; F11 1 CVT.D.L F2, F11 ; F2 1 loop: MUL.D F2, F2, F0 ; F2 F2*F0 DADDI R1, R1, -1 ; decrement R1 by 1 BNEZ R1, loop ; if R10 continue HALT ; 此条不填表 提示:MIPS浮点数的格式是IEEE754,2014.2.17,计算机系统结构,40,习题2.14(补充)续,2014.2.17,计算机系统结构,41,实验1:WinMIPS64模拟器练习,实验要求:用MIPS64指令编写一个尽可能短小的程序,将事先存放在数据区的4字节字符串(例如“3901”)转换为一个4位BCD整数,赋给R9。在WinMIPS64模拟器调试通过。 实验报告: (1) 程序清单; (2) 运行结果(每轮循

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论