《计算机系统结构实验指导书.doc》由会员分享,可在线阅读,更多相关《计算机系统结构实验指导书.doc(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机系统结构 实验指导书殷晓峰 编 著山东大学计算机科学与技术学院2004年3月前 言计算机系统结构是计算机科学与技术专业的一门骨干课程,课程中讲授的许多内容诸如:指令流水线、向量计算、流水线的相关、并行计算、定向技术等内容比较抽象,同学们在学习中会有些难度。为了使理论教学与实践教学紧密结合,注重学生的智力开发和能力培养,为了帮助大家学好这门课程,我们安排了计算机系统结构实验,希望同学们认真完成实验内容,增进对课程内容的理解,提高自己理论联系实际的能力,提高自己独立思考解决问题的能力。本实验采用了目前在世界上计算机系统结构实验教学过程中广泛采用的WinDLX模拟器,该模拟器把系统结构课程中许
2、多抽象的东西变成实际的、便于同学们理解的内容。本实验中借鉴和引用了其他学校的经验和内容,在此表示感谢。 山东大学计算机科学与技术学院 殷晓峰 20043目 录一 WinDLX简介二 WinDLX寄存器结构及指令集三 WinDLX教程四 实验注意事项及要求五 实验一 熟悉WinDLX的使用六 实验二 用WinDLX执行程序求最大公约数七 实验三 用WinDLX模拟器完成求素数程序八 实验四 结构相关九 实验五 数据相关十 实验六 指令调度十一 实验七 多处理机并行计算一WinDLX 简介1DLX流水线处理器DLX是贯穿本课程的一个流水线处理器实例,许多讨论、模拟结果和例题都是基于DLX的。它不仅
3、体现了当今多种机器(AMD29K、DEC station 3100、HP850、IBM 801、Intel 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是一个基于W
4、indows的DLX模拟器,用于模拟DLX流水线的工作过程。你可以灵活、方便地设置参数、控制执行、统计数据等。WinDLX提供了直观的窗口显示。我们将WinDLX模拟器及有关程序已放在实验用计算机上,同学们打开XTJG文件夹通过双击WinDLX图标,启动WinDLX即可。二WinDLX寄存器结构及指令集1. DLX中的寄存器图 1 2. DLX的数据类型图 23. DLX的寻址方式和数据传送图 3 由于DLX支持上述数据类型,所以对通用寄存器而言,相应的存储器访问数据大小有8位、16位和32位;而对浮点寄存器而言,相应的存储器访问数据大小有32位(单精度浮点数)和64位(双精度浮点数)。值得注
5、意的是,DLX的所有存储器访问均需对齐。 4. DLX的指令格式图 45. DLX中的操作DLX除了支持上面提到的一些简单操作之外,还支持其它一些操作。DLX指令中的操作可以分为四种类型,即:Load和Store操作、ALU操作、分支和跳转操作、浮点操作。在分别讨论这四种操作类型之前,请先阅读有关本课程中所采用的一些符号的约定。图 5 为了进一步说明上述约定表示方法的用途,现设R8和R10均为32位寄存器 举例:RegsR1016.31 16 (MemRegsR80)8 # MemRegsR8的含义是:以寄存器R8的内容为地址,取出存储器单元内容,将该内容的第“0”位(最高位)复制为八个“0”
6、作为高八位再并上该存储单元内容,形成十六位数送寄存器R10的1631位。6WinDLX指令综述(1) 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 (Me
7、m40+RegsR30)24 # Mem40+RegsR3LBU R1 , 40 (R3) 载入无符号字节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 RegsR
8、3SF 40 (R3) , F0 储存单精度浮点 Mem40+RegsR3 32 RegsF0SD 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还允许所有这些
9、指令对立即值进行操作,立即值以16位符号扩展形式出现。LHI(Load高位立即值)操作将立即值载入到一个寄存器的高半部分,而该寄存器的低半部分则设置为0。这样就可以通过两条Load指令构造一个32位的常数。正如上面所提到的,R0主要用来合成一些有用的操作。比如,Load一个常数就可以看作是一次简单的立即值加操作,其中一个源操作数是R0;寄存器寄存器间的数据移动也可以看作是一次简单的加,其中一个源操作数是R0。这两个操作可以分别用LI和MOV表示。 在DLX指令集中,还有一些寄存器比较指令(=,),如果比较结果为真,这些指令就在目标寄存器中填入1(表示真),否则填入0(表示假)。因为这些比较操作
10、指令要对目标寄存器进行“设置”,所以也称它们为设置相等、设置不等、设置小于等指令。DLX同样也提供了这些比较指令的立即值形式,表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 = D
11、dregb) fps = 1 else fps = 0Both are double precision floats. gefEx: gef f3,f6if (Ffrega = Ffregb) fps = 1 else fps = 0Both are single precision floats. gtdEx: gtd f8,f6if (Ddrega Ddregb) fps = 1 else fps = 0Both are double precision floats. gtfEx: gtf f3,f6if (Ffrega Ffregb) fps = 1 else fps = 0Both
12、 are single precision floats. jEx: j labelPC PC + imm26 + 4Unconditionally jumps relative to the PC of the next instruction. imm26 is a 26-bit signed integer. jalEx: jal labelR31 PC + 8; PC PC + imm26 + 4Saves a return address in register 31 and jumps relative to the PC of the next instruction. imm2
13、6 is a 26-bit signed integer. jalrEx: jalr r2R31 PC + 8; PC RregaSaves a return address in register 31 and does an absolute jump to the target address contained in Rrega. jrEx: jr r3PC RregaRrega is treated as an unsigned integer. Does an absolute jump to the target address contained in Rrega.lbEx:
14、lb r1,40-4(r2)Rregb (sign extended) Mimm16 + RregaOne byte of data is read from the effective address computed by adding signed integer imm16 and signed integer Rrega. The byte from memory is then sign extended to 32-bits and stored in register Rregb. lbuEx: lbu r2,label-786+4(r3)Rregb 024 # Mimm16
15、+ RregaOne byte of data is read from the effective address computed by adding signed integer imm16 and signed integer Rrega. The byte from memory is then zero extended to 32 bits and stored in register Rregb. ldEx: ld f2,240(r1)Ddregb 64 Mimm16 + RregaTwo words of data are read from the effective ad
16、dress computed by adding signed integer imm16 and unsigned integer Rrega and stored in double register Ddregb. This is equivalent to two lf instructions: Ffregb Mimm16 + Rrega Ffreg(b+1) Mimm16 + Rrega + 4where Ffreg(b+1) is the next fp register after Ffregb in sequence, and all values are simply co
17、pied and not converted.)ledEx: led f8,f6if (Ddrega = Ddregb) fps = 1 else fps = 0Both are double precision floats. lefEx: lef f3,f6if (Ffrega = Ffregb) fps = 1 else fps = 0Both are single precision floats. lfEx: lf f6,76(r4)Ffregb Mimm16 + RregaOne word of data is read from the effective address com
18、puted by adding signed integer imm16 and signed integer Rrega and stored in fp register Ffregb. lhEx: lh r1,32(r3)Rregb (sign extended) Mimm16 + RregaTwo bytes of data are read from the effective address computed by adding signed integer imm16 and signed integer Rrega. The address must be half-word
19、aligned. The half-word from memory is then sign extended to 32 bits and stored in register Rregb. lhiEx: lhi r3,#-40Rregb imm16 # 016Loads the 16 bit immediate value imm16 into the most significant half of an integer register and clears the least significant half. lhuEx: lhu r2,-40+4(r3)Rregb 016 #
20、Mimm16 + RregaTwo bytes of data are read from the effective address computed by adding signed integer imm16 and signed integer Rrega. The address must be half-word aligned. The half-word from memory is then zero extended to 32 bits and stored in register Rregb. ltdEx: ltd f8,f6if (Ddrega Ddregb) fps
21、 = 1 else fps = 0Both are double precision floats. ltfEx: ltf f3,f6if (Ffrega Ffregb) fps = 1 else fps = 0Both are single precision floats. lwEx: lw r19,label+63(r8)Rregb Mimm16 + RregaOne word is read from the effective address computed by adding signed integer imm16 and unsigned integer Rrega and is stored in Rregb.movdEx: movd f2,f4Ddregc DdregaCopies two words from double register Ddrega to double register Ddregc. movfEx: movf f1,f2Ffregc FfregaCopies one word from fp register Ffrega to fp register Ffregc. movfp2iEx: movfp2i r3,f0Rregc FfregaC
限制150内