WinDLX模拟器模拟实验
1 实验目的   
熟悉加深对流水线及RISC处理器的理解。
2 实验环境
WinDLX模拟器可以装入DLX汇编语言程序,然后单步、设置断点或者连续执行该程序。CPU的寄存器、流水线、I/O和存储器都可以使用图形的方式表示出来。模拟器还提供了对流水线操作的统计功能。该模拟器对理解流水线和RISC处理器的特点很有帮助。
3 实验步骤
一.使用WinDLX模拟器,对Fact.s做如下分析:
1 考察增加浮点运算部件对性能的影响。
2 考察增加forward部件对性能的影响。
3 观察转移指令在转移成功和转移不成功时候的流水线开销。
4 实验内容和要求
1. 针对上面的实验内容,记录实验过程,给出分析结果。
2. 给出实验总结:根据实验,总结采用流水线技术会遇到的问题和为解决这些问题所采用的各种技术的作用。同时简单谈谈自己对流水线技术的认识。
5实验程序代码
5.1 Fact.s程序代码:
        .data
Prompt:    .asciiz    "An integer value >1 : "
PrintfFormat:    .asciiz    "Factorial = %g\n\n"
        .align        2
PrintfPar:    .word        PrintfFormat
PrintfValue:    .space        8
        .text
        .global    main
main:
        ;*** Read value from stdin into R1
        addi        r1,r0,Prompt
        jal        InputUnsigned
        ;*** init values
        movi2fp    f10,r1        ;R1 -> D0    D0..Count register
        cvti2d        f0,f10
        addi        r2,r0,1    ;1 -> D2    D2..result
        movi2fp        f11,r2
        cvti2d        f2,f11
        movd        f4,f2        ;1-> D4    D4..Constant 1
        ;*** Break loop if D0 = 1
Loop:        led        f0,f4        ;D0<=1 ?
        bfpt        Finish
        ;*** Multiplication and next loop
        multd        f2,f2,f0
        subd        f0,f0,f4
        j        Loop
Finish:    ;*** write result to stdout
        sd        PrintfValue,f2
        addi        r14,r0,PrintfPar
        trap        5       
        ;*** end
        trap        0
5.2 Input.s程序代码:
.data
        ;*** Data for Read-Trap
ReadBuffer:    .space        80
ReadPar:    .word        0,ReadBuffer,80
        ;*** Data for Printf-Trap
PrintfPar:    .space        4
SaveR2:        .space        4
SaveR3:        .space        4
SaveR4:        .space        4
SaveR5:        .space        4
        .text
        .global        InputUnsigned
InputUnsigned:   
        ;*** save register contents
        sw        SaveR2,r2
        sw        SaveR3,r3
        sw        SaveR4,r4
        sw        SaveR5,r5
        ;*** Prompt
        sw        PrintfPar,r1
        addi        r14,r0,PrintfPar
        trap        5
        ;*** call Trap-3 to read line
        addi        r14,r0,ReadPar
        trap        3
        ;*** determine value
        addi        r2,r0,ReadBuffer
        addi        r1,r0,0
        addi        r4,r0,10    ;Decimal system
Loop:        ;*** reads digits to end of line
        lbu        r3,0(r2)
        seqi        r5,r3,10    ;LF -> Exit
printf怎么加两个条件        bnez        r5,Finish
        subi        r3,r3,48    ;??
        multu        r1,r1,r4    ;Shift decimal
        add        r1,r1,r3
        addi        r2,r2,1    ;increment pointer

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。