计算机系统结构实验指导

上传人:博****1 文档编号:432539105 上传时间:2023-12-19 格式:DOC 页数:71 大小:639KB
返回 下载 相关 举报
计算机系统结构实验指导_第1页
第1页 / 共71页
计算机系统结构实验指导_第2页
第2页 / 共71页
计算机系统结构实验指导_第3页
第3页 / 共71页
计算机系统结构实验指导_第4页
第4页 / 共71页
计算机系统结构实验指导_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《计算机系统结构实验指导》由会员分享,可在线阅读,更多相关《计算机系统结构实验指导(71页珍藏版)》请在金锄头文库上搜索。

1、计算机系统结构 实验指导书前 言计算机系统结构是计算机科学与技术专业的一门骨干课程,课程中讲授的许多内容诸如:指令流水线、向量计算、流水线的相关、并行计算、定向技术等内容比较抽象,同学们在学习中会有些难度。为了使理论教学与实践教学紧密结合,注重学生的智力开发和能力培养,为了帮助大家学好这门课程,我们安排了计算机系统结构实验,希望同学们认真完成实验内容,增进对课程内容的理解,提高自己理论联系实际的能力,提高自己独立思考解决问题的能力。本实验采用了目前在世界上计算机系统结构实验教学过程中广泛采用的WinDLX模拟器,该模拟器把系统结构课程中许多抽象的东西变成实际的、便于同学们理解的内容。本实验中借

2、鉴和引用了其他学校的经验和内容,在此表示感谢。 目 录一 WinDLX简介二 WinDLX寄存器结构及指令集三 WinDLX教程四 实验注意事项及要求五 实验一A 熟悉WinDLX的使用六 实验一B 用WinDLX执行程序求最大公约数七 实验一C 用WinDLX模拟器完成求素数程序八 实验二 结构相关九 实验三 数据相关十 实验四 指令调度十一 实验七 多处理机并行计算一WinDLX 简介1DLX流水线处理器DLX是贯穿本课程的一个流水线处理器实例,许多讨论、模拟结果和例题都是基于DLX的。它不仅体现了当今多种机器(AMD29K、DEC station 3100、HP850、IBM 801、I

3、ntel i860、MIPS M/120A、MIPS M/1000、Motorola 88k、RISC I,SGI4D/60, SPARC station 1、Sun 4/110、Sun 4/260等)指令集结构的共同特点,而且它还将会体现未来一些机器的指令集结构的特点。这些机器的指令集结构设计思想都和DLX指令集结构的设计思想十分相似,它们都强调:具有一个简单的Load/Store指令集;注重指令流水效率;简化指令的译码;高效支持编译器。 2. DLX模拟器-WinDLXWinDLX是一个基于Windows的DLX模拟器,用于模拟DLX流水线的工作过程。你可以灵活、方便地设置参数、控制执行、

4、统计数据等。WinDLX提供了直观的窗口显示。我们将WinDLX模拟器及有关程序已放在实验用计算机上,同学们打开XTJG文件夹通过双击WinDLX图标,启动WinDLX即可。二WinDLX寄存器结构及指令集1. DLX中的寄存器图 1 2. DLX的数据类型图 23. DLX的寻址方式和数据传送图 3 由于DLX支持上述数据类型,所以对通用寄存器而言,相应的存储器访问数据大小有8位、16位和32位;而对浮点寄存器而言,相应的存储器访问数据大小有32位(单精度浮点数)和64位(双精度浮点数)。值得注意的是,DLX的所有存储器访问均需对齐。 4. DLX的指令格式图 45. DLX中的操作DLX除

5、了支持上面提到的一些简单操作之外,还支持其它一些操作。DLX指令中的操作可以分为四种类型,即:Load和Store操作、ALU操作、分支和跳转操作、浮点操作。在分别讨论这四种操作类型之前,请先阅读有关本课程中所采用的一些符号的约定。图 5 为了进一步说明上述约定表示方法的用途,现设R8和R10均为32位寄存器 举例:RegsR1016.31 16 (MemRegsR80)8 # MemRegsR8的含义是:以寄存器R8的内容为地址,取出存储器单元内容,将该内容的第“0”位(最高位)复制为八个“0”作为高八位再并上该存储单元内容,形成十六位数送寄存器R10的1631位。6WinDLX指令综述(1

6、) Load和Store操作: 可以对DLX的所有通用寄存器和浮点寄存器进行Load(载入)和Store(储存)操作,但是对通用寄存器R0的Load操作没有任何效果。表1 给出了载入和储存指令的一些实例。 表1 DLX中Load和Store指令实例指令实例指令名称含 义LW R1 , 30 (R2)载入整型字 RegsR1 32 Mem30+RegsR2LW R1 , 1000 (R0)载入整型字RegsR1 32 Mem1000+0LB R1 , 40 (R3)载入字节RegsR1 32 (Mem40+RegsR30)24 # Mem40+RegsR3LBU R1 , 40 (R3) 载入无

7、符号字节RegsR1 32024 # Mem40+RegsR3 LH R1 , 40 (R3)载入整型半字 RegsR1 32 (Mem40+RegsR30)16# Mem40+RegsR3 # Mem41+RegsR3LF F0 , 50 (R3)载入单精度浮点RegsF0 32 Mem50+RegsR3LD F0 , 50 (R2) 载入双精度浮点RegsF0 # RegsF1 64 Mem50+RegsR2SW 500 (R4) , R3储存整型字Mem500+RegsR4 32 RegsR3SF 40 (R3) , F0 储存单精度浮点 Mem40+RegsR3 32 RegsF0SD

8、 40 (R3) , F0 储存双精度浮点Mem40+RegsR3 32 RegsF0Mem44+RegsR3 32 RegsF1SH 502 (R2) , R31 储存整型半字Mem502+RegsR2 16 RegsR3116.31SB 41 (R3) , R2储存整型字节 Mem41+RegsR3 8 RegsR224.31(2) ALU操作:在DLX中,所有的ALU指令都是寄存器寄存器型指令,其运算包含了简单的算术和逻辑运算,如加、减、AND、OR、XOR和移位。另外,DLX还允许所有这些指令对立即值进行操作,立即值以16位符号扩展形式出现。LHI(Load高位立即值)操作将立即值载入

9、到一个寄存器的高半部分,而该寄存器的低半部分则设置为0。这样就可以通过两条Load指令构造一个32位的常数。正如上面所提到的,R0主要用来合成一些有用的操作。比如,Load一个常数就可以看作是一次简单的立即值加操作,其中一个源操作数是R0;寄存器寄存器间的数据移动也可以看作是一次简单的加,其中一个源操作数是R0。这两个操作可以分别用LI和MOV表示。 在DLX指令集中,还有一些寄存器比较指令(=,),如果比较结果为真,这些指令就在目标寄存器中填入1(表示真),否则填入0(表示假)。因为这些比较操作指令要对目标寄存器进行“设置”,所以也称它们为设置相等、设置不等、设置小于等指令。DLX同样也提供

10、了这些比较指令的立即值形式,表2 给出了ALU操作指令的一些实例。 表2 ALU指令实例指令实例指令名称含 义Add R1 , R2 , R3加RegsR1 RegsR2 + RegsR3 ADDI R1 , R2 , #3和立即值相加RegsR1 RegsR2 + 3LHI R1 , #42 载入高位立即值 RegsR1 42 # 016SLLI R1 , R2 , #5 逻辑左移的立即值形式 RegsR1 RegsR2 5 SLT R1 , R2 , R3 设置小于if (RegsR2 RegsR3) RegsR1 1 else RegsR1 0 (3) 分支和跳转操作:在DLX中,对程序

11、流程的控制是通过一些跳转和分支指令来实现的。根据描述目标地址的方法和是否链接可以将跳转操作指令分为四种类型。其中两种类型的跳转指令用带符号位的26位偏移量加上程序计数器的值来确定跳转的目标地址,另外两种类型的跳转指令则指定一个寄存器,由寄存器中的内容决定跳转的目标地址。跳转有两种类型,一种是简单跳转,另一种是跳转并链接(用于过程调用),后者将返回一个地址,即将下一条顺序指令地址(返回地址)保存在寄存器R31中。 DLX中的所有分支指令均是条件分支指令,其源操作数寄存器中包含了一个数值或某个比较结果。分支指令测试该源操作数寄存器中的值是0还是非0,决定分支是否成功。分支目标地址由一个带符号的26

12、位偏移量加上程序计数器的值来确定,分支目的地址指向下一条要执行的指令。表3 给出了一些典型的分支和跳转指令。 表3 典型的分支和跳转指令 指令实例指令名称含 义J name跳转 PC name;(PC+4)-225) name (PC+4)+225)JAL name跳转并链接RegsR31 PC+4;PC name;(PC+4)-2255) name (PC+4)+225)JALR R2寄存器型跳转并链接RegsR31 PC+4; PC RegsR2;JR R3寄存器型跳转PC RegsR3; BEQZ R4 , name “等于0”分支 if (RegsR4=0) PC name;(PC+4

13、)-215) name (PC+4)+215) BNEZ R4 , name “不等于0”分支 if (RegsR4!=0) PC name;(PC+4)-215) name (PC+4)+215) (4) 浮点操作: 在DLX中,浮点指令的操作数来源于浮点寄存器,同时该浮点指令还指明了相应的操作是单精度浮点操作还是双精度浮点操作。DLX的浮点操作有:加、减、乘、除。后缀D代表双精度浮点操作,而后缀F代表单精度浮点操作(如:ADDD、ADDF、SUBD、SUBF、MULTD、MULTF、DIVD、DIVF)。值得提出的是,DLX的浮点比较操作设置浮点状态寄存器中的位,如果比较结果为真,则将该位

14、设置为1;如果比较结果为假,则将该位设置为0。浮点分支指令BFPT和BFTF则测试该寄存器的值来决定分支是否成功。另外,操作MOVF将一个单精度浮点寄存器的内容拷贝至另一个单精度浮点寄存器; MOVD则将一个双精度浮点寄存器的内容拷贝至另一双精度寄存器;MOVFP2I和MOVI2FP操作则是在一个浮点寄存器和通用寄存器之间移动数据,如果要将一个双精度浮点数移入两个通用寄存器则需要两条指令,另外DLX还提供了在32位浮点寄存器中进行整数乘除操作的指令。表4 列出了DLX所有指令及其含义。为了明确哪些指令是最常用的,分别用SPECint92和SPECfp92基准程序集对DLX进行统计,可以分别得到表5 和表6 的指令使用频率测试统计结果。对于测试统计结果中使用频率大于1的指令,以直方图的形式分

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号