欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    计算机系统结构实验指导.doc

    • 资源ID:66763217       资源大小:639KB        全文页数:71页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机系统结构实验指导.doc

    计算机系统结构 实验指导书前 言计算机系统结构是计算机科学与技术专业的一门骨干课程,课程中讲授的许多内容诸如:指令流水线、向量计算、流水线的相关、并行计算、定向技术等内容比较抽象,同学们在学习中会有些难度。为了使理论教学与实践教学紧密结合,注重学生的智力开发和能力培养,为了帮助大家学好这门课程,我们安排了计算机系统结构实验,希望同学们认真完成实验内容,增进对课程内容的理解,提高自己理论联系实际的能力,提高自己独立思考解决问题的能力。本实验采用了目前在世界上计算机系统结构实验教学过程中广泛采用的WinDLX模拟器,该模拟器把系统结构课程中许多抽象的东西变成实际的、便于同学们理解的内容。本实验中借鉴和引用了其他学校的经验和内容,在此表示感谢。 目 录一 WinDLX简介二 WinDLX寄存器结构及指令集三 WinDLX教程四 实验注意事项及要求五 实验一A 熟悉WinDLX的使用六 实验一B 用WinDLX执行程序求最大公约数七 实验一C 用WinDLX模拟器完成求素数程序八 实验二 结构相关九 实验三 数据相关十 实验四 指令调度十一 实验七 多处理机并行计算一WinDLX 简介1DLX流水线处理器DLX是贯穿本课程的一个流水线处理器实例,许多讨论、模拟结果和例题都是基于DLX的。它不仅体现了当今多种机器(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是一个基于Windows的DLX模拟器,用于模拟DLX流水线的工作过程。你可以灵活、方便地设置参数、控制执行、统计数据等。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除了支持上面提到的一些简单操作之外,还支持其它一些操作。DLX指令中的操作可以分为四种类型,即:Load和Store操作、ALU操作、分支和跳转操作、浮点操作。在分别讨论这四种操作类型之前,请先阅读有关本课程中所采用的一些符号的约定。图 5 为了进一步说明上述约定表示方法的用途,现设R8和R10均为32位寄存器 举例:RegsR1016.31 16 (MemRegsR80)8 # MemRegsR8的含义是:以寄存器R8的内容为地址,取出存储器单元内容,将该内容的第“0”位(最高位)复制为八个“0”作为高八位再并上该存储单元内容,形成十六位数送寄存器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 (Mem40+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 RegsR3SF 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还允许所有这些指令对立即值进行操作,立即值以16位符号扩展形式出现。LHI(Load高位立即值)操作将立即值载入到一个寄存器的高半部分,而该寄存器的低半部分则设置为0。这样就可以通过两条Load指令构造一个32位的常数。正如上面所提到的,R0主要用来合成一些有用的操作。比如,Load一个常数就可以看作是一次简单的立即值加操作,其中一个源操作数是R0;寄存器寄存器间的数据移动也可以看作是一次简单的加,其中一个源操作数是R0。这两个操作可以分别用LI和MOV表示。 在DLX指令集中,还有一些寄存器比较指令(=,<,>,),如果比较结果为真,这些指令就在目标寄存器中填入1(表示真),否则填入0(表示假)。因为这些比较操作指令要对目标寄存器进行“设置”,所以也称它们为设置相等、设置不等、设置小于等指令。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 < RegsR3) RegsR1 1 else RegsR1 0 (3) 分支和跳转操作:在DLX中,对程序流程的控制是通过一些跳转和分支指令来实现的。根据描述目标地址的方法和是否链接可以将跳转操作指令分为四种类型。其中两种类型的跳转指令用带符号位的26位偏移量加上程序计数器的值来确定跳转的目标地址,另外两种类型的跳转指令则指定一个寄存器,由寄存器中的内容决定跳转的目标地址。跳转有两种类型,一种是简单跳转,另一种是跳转并链接(用于过程调用),后者将返回一个地址,即将下一条顺序指令地址(返回地址)保存在寄存器R31中。 DLX中的所有分支指令均是条件分支指令,其源操作数寄存器中包含了一个数值或某个比较结果。分支指令测试该源操作数寄存器中的值是0还是非0,决定分支是否成功。分支目标地址由一个带符号的26位偏移量加上程序计数器的值来确定,分支目的地址指向下一条要执行的指令。表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)-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的浮点比较操作设置浮点状态寄存器中的位,如果比较结果为真,则将该位设置为1;如果比较结果为假,则将该位设置为0。浮点分支指令BFPT和BFTF则测试该寄存器的值来决定分支是否成功。另外,操作MOVF将一个单精度浮点寄存器的内容拷贝至另一个单精度浮点寄存器; MOVD则将一个双精度浮点寄存器的内容拷贝至另一双精度寄存器;MOVFP2I和MOVI2FP操作则是在一个浮点寄存器和通用寄存器之间移动数据,如果要将一个双精度浮点数移入两个通用寄存器则需要两条指令,另外DLX还提供了在32位浮点寄存器中进行整数乘除操作的指令。表4 列出了DLX所有指令及其含义。为了明确哪些指令是最常用的,分别用SPECint92和SPECfp92基准程序集对DLX进行统计,可以分别得到表5 和表6 的指令使用频率测试统计结果。对于测试统计结果中使用频率大于1的指令,以直方图的形式分别表示在图 6和图 7中。 图 6 图 7表4 DLX中的所有指令及其含义指令实例指令名称含 义数据传送LB,LBU,SB载入字节,载入无符号字节,储存字节LH,LHU,SH载入半字,载入无符号半字,储存半字 LW,SW 载入字,储存字LF,LD,SF,SD 载入单精度浮点,载入双精度浮点,储存单精度浮点,储存双精度浮点MOVI2S,MOVS2I将通用寄存器中的内容移入特殊寄存器,将特殊寄存器中的内容移入通用寄存器MOVF,MOVD 将一个单精度/双精度浮点寄存器的内容拷贝到另一个单精度/双精度浮点寄存器 MOVFP2I,MOVI2FP 将32位浮点寄存器中的内容移入整型寄存器,将32位整型寄存器中的内容移入浮点寄存器 算术/逻辑ADD,ADDI,ADDU,ADDUI将32位浮点寄存器中的内容移入整型寄存器,将32位整型寄存器中的内容移入浮点寄存器SUB,SUBI,SUBU,SUBUI带符号加,带符号立即值加,无符号加,无符号立即值加MULT,MULTU,DIV,DIVU 带符号减,带符号立即值减,无符号减,无符号立即值减AND,ANDI带符号乘,无符号乘,带符号除,无符号除 与,和立即值与OR,ORI,XOR,XORI或,和立即值或,异或,和立即值异或 LHI 载入高位立即值 SLL,SRL,SRA,SLLI,SRLI,SRAI包含了立即值(S_I)和变量(S_)的移位操作,移位有:逻辑左移,逻辑右移和算术右移 S_,S_I设置条件,"_"可以是LT,GT,LE,GE,EQ,NE 控 制BEQZ,BNEZ根据指定通用寄存器的内容等于/不等于0分支BFPT,BFPF测试浮点状态寄存器中的比较位为真/假进行分支J,JR跳转,基于寄存器的跳转 JAL,JALR 跳转并链接,基于寄存器的跳转并链接 TRAP转换到操作系统 RFE从异常恢复用户模式 浮 点ADDD,ADDF双精度浮点加,单精度浮点加SUBD,SUBF双精度浮点减,单精度浮点减 MULTD,MULTF双精度浮点乘,单精度浮点乘DIVD,DIVF 双精度浮点除,单精度浮点除CVTF2D,CVTF2I,CVTD2F,CTD2I,CVTI2F,CVTI2D 转换指令,CVTx2y表示从类型x转换到类型y,其中x和y可以是I(整型)、D(双精度浮点)、F(单精度浮点) _D,_F双精度浮点和单精度浮点比较,"_"可以是LT、GT、LE、GE、EQ、NE,根据比较结果设置浮点状态寄存器中的位 表5 基于SPECint92基准程序集的指令使用频率测量统计结果指令compresseqntottEspressogcc(cc1)li整型平均载入19.8%30.6%20.9% 22.8% 31.3%26%存储5.6%0.6%5.1% 14.3% 16.7% 9%加 14.4%8.5%23.8% 14.6%11.1% 14%减1.8%0.3%0.5% 0%乘0.1%0%除 0%比较15.4% 26.5%8.3% 12.4% 5.4%13%载入立即值8.1%1.5% 1.3% 6.8% 2.4% 3%条件分支17.4% 24.0%15.0% 11.5% 14.6% 16%无条件分支1.5%0.9%0.5% 1.3% 1.8% 1%调用0.1% 0.5%0.4% 1.1% 3.1% 1%返回,跳转0.1%0.5%0.5% 1.5% 3.5% 1%移位 6.5%0.3% 7.0% 6.2% 0.7% 4%与 2.1%0.1% 9.4% 1.6% 2.1% 3%或6.0%5.5%4.8% 4.2% 6.2% 5%其它(异或,非)1.0%2.0%0.5%0.1%1%载入浮点数0%储存浮点数0%浮点加 0%浮点减0%浮点乘 0%浮点除0%浮点比较0%浮点寄存器移动0%其它浮点操作0%表6 基于SPECfp92基准程序集的指令使用频率测量统计结果指令doducearhydro2dmdljdp2su2cor整型平均载入1.4% 0.2%0.1% 1.1% 3.6% 1%存储1.3%0.1% 0.1% 1.3% 1%加 13.6%13.6% 10.9% 4.7% 9.7%11%减0.3%0.2%0.7% 0%乘0%除 0%比较3.2% 3.1%1.2% 0.3% 1.3% 2%载入立即值2.2% 0.2% 2.2%0.9% 1%条件分支8.0% 10.1% 11.7%9.3%2.6% 8%无条件分支0.9%0.4% 0.4% 0.1% 0%调用0.5% 1.9% 0.3%1%返回,跳转0.6%1.9% 0.3% 1%移位 2.0%0.2% 2.4% 1.3%2.3% 2%与 0.4%0.1% 0.3% 0%或0.2%0.1% 0.1% 0.1%0%其它(异或,非)0%载入浮点数23.3% 19.8%24.1% 25.9% 21.6% 23%储存浮点数5.7% 11.4% 9.9% 10.0% 9.8%9%浮点加 8.8% 7.3%3.6% 8.5%12.4%8%浮点减3.8% 3.2%7.9% 10.4% 5.9% 6%浮点乘 12.0% 9.6% 9.4% 13.9% 21.6% 13%浮点除2.3%1.6% 0.9% 0.7% 1%浮点比较4.2%6.4%10.4% 9.3% 0.8%6%浮点寄存器移动2.1%1.8%5.2% 0.9%1.9%2%其它浮点操作2.4%8.4%0.2% 0.2%1.2% 2%7. DLX指令add Ex: add r1,r2,r3Rregc Rrega + RregbAll are signed integers.adddEx: addd f4,f4,f6Ddregc Ddrega + DdregbAll are double precision floating point numbers. addfEx: addf f3,f4,f5Ffregc Ffrega + FfregbAll are single precision floating point numbers. addiEx: addi r5,r2,#5Rregb Rrega + imm16All are signed integers. adduEx: addu r2,r3,r4Rregc Rrega + RregbAll are unsigned integers. adduiEx: addui r2,r3,#28Rregb Rrega + uimm16All are unsigned integers. andEx: and r2,r3,r4Rregc Rrega & RregbAll are unsigned integers. Logical 'and' is performed on a bitwise basis. andiEx: andi r3,r4,#5Rregb Rrega & uimm16All are unsigned integers. Logical 'and' is performed on a bitwise basis.beqzEx: beqz r1,labelif (Rrega = 0) PC PC + imm16 + 4bfpfEx: bfpf labelif (fps = 0) PC PC + imm16 + 4fps is the floating point status bit. bfptEx: bfpt labelif (fps = 1) PC PC + imm16 + 4fps is the floating point status bit. bnezEx: bnez r1,labelif (Rrega != 0) PC PC + imm16 + 4cvtd2fEx: cvtd2f f1,f4Ffregc (float) DdregaConverts double precision floating point value to single precision floating point value. cvtd2iEx: cvtd2i f1,f0Ffregc (int) DdregaConverts double precision floating point value to integer. cvtf2dEx: cvtf2d f4,f9Ddregc (double) FfregaConverts single precision float to double. cvtf2iEx: cvtf2i f3,f4Ffregc (int) FfregaConverts single precision float to integer. cvti2dEx: cvti2d f2,f9Ddregc (double) FfregaConverts a signed integer to double precision float. cvti2fEx: cvti2f f2,f5Ffregc (float) FfregaConverts a signed integer to single precision float.divEx: div f2,f2,f3Ffregc Ffrega / FfregbAll are signed integers. divdEx: divd f4,f4,f6Ddregc Ddrega / DdregbAll are double precision floats. divfEx: divf f2,f3,f6Ffregc Ffrega / FfregbAll are single precision floats. divuEx: divu f2,f3,f4Ffregc Ffrega / FfregbAll are unsigned integers. eqdEx: eqd f2,f4if (Ddrega = Ddregb) fps = 1 else fps = 0Both are double precision floats. eqfEx: eqf f3,f5if (Ffrega = Ffregb) fps = 1 else fps = 0Both are single precision floats. gedEx: ged f8,f6if (Ddrega >= Ddregb) 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 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. imm26 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: 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 + 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 address 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 copied 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 computed 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 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 # 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 = 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 FfregaCopies one word from fp register Ffrega to integer register Rregc. m

    注意事项

    本文(计算机系统结构实验指导.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开