计算机体系结构实验报告——实验二
- 格式:pdf
- 大小:722.96 KB
- 文档页数:12
1计算机体系结构实验报告——实验二1.实验目的:通过本实验,熟练掌握WinDLX模拟器的操作和使用,清楚WinDLX五段流水线在执行具体程序时的流水情况,熟悉DLX指令集结构及其特点。2.实验内容:(1)用WinDLX模拟器执行程序gcm.s。该程序从标准输入读入两个整数,求他们的greatestcommonmeasure,然后将结果写到标准输出。该程序中调用了input.s中的输入子程序。(2).给出两组数6、3和6、1,分别在main+0x8(addr2,r1,r0)、gcm.loop(segr3,r1,r2)和result+0xc(trap0x0)设断点,采用单步和连续混合执行的方法完成程序,注意中间过程和寄存器的变化情况,然后单击主菜单execute/displaydlx-i/0,观察结果。3.实验程序求最大公约数程序:gcm.s;***********WINDLXEx.1:Greatestcommonmeasure*************;------------------------------------------------------------------------;Programbeginsatsymbolmain;requiresmoduleINPUT;Readtwopositiveintegernumbersfromstdin,calculatethegcm;andwritetheresulttostdout;------------------------------------------------------------------------.data;***PromptsforinputPrompt1:.asciiz“FirstNumber:”Prompt2:.asciiz“SecondNumber:“;***Dataforprintf-TrapPrintfFormat:.asciiz“gcM=%d\n\n”.align2
2PrintfPar:.wordPrintfFormatPrintfValue:.space4.text.globalmainmain:;***ReadtwopositiveintegernumbersintoR1andR2addir1,r0,Prompt1jalInputUnsigned;readuns.-integerintoR1addr2,r1,r0;R2<-R1addir1,r0,Prompt2jalInputUnsigned;readuns.-integerintoR1Loop:;***CompareR1andR2seqr3,r1,r2;R1==R2?bnezr3,Resultsgtr3,r1,r2;R1>R2?bnezr3,r1Greaterr2Greater:;***subtractr1fromr2subr2,r2,r1jLoopr1Greater:;***subtractr2fromr1subr1,r1,r2jLoopResult:;***Writetheresult(R1)swPrintfValue,r1addir14,r0,PrintfPartrap5
3;***endtrap0该程序中调用了input.s中的输入子程序。;***********WINDLXEx.1:Readapositiveintegernumber*************;-----------------------------------------------------------------------------;Subprogramcallbysymbol“InputUnsigned”;expecttheaddressofazero-terminatedpromptstringinR1;returnsthereadvalueinR1;changesthecontentsofregistersR1,R13,R14;-----------------------------------------------------------------------------.data;***DataforRead-TrapReadBuffer:.space80ReadPar:.word0,ReadBuffer,80;***DataforPrintf-TrapPrintfPar:.space4SaveR2:.space4SaveR3:.space4SaveR4:.space4SaveR5:.space4.text.globalInputUnsignedInputUnsigned:;***saveregistercontents
4swSaveR2,r2swSaveR3,r3swSaveR4,r4swSaveR5,r5;***PromptswPrintfPar,r1addir14,r0,PrintfPartrap5;***callTrap-3toreadlineaddir14,r0,ReadPartrap3;***determinevalueaddir2,r0,ReadBufferaddir1,r0,0addir4,r0,10;DecimalsystemLoop:;***readsdigitstoendoflinelbur3,0(r2)seqir5,r3,10;LF->Exitbnezr5,Finishsubir3,r3,48;??multur1,r1,r4;Shiftdecimaladdr1,r1,r3addir2,r2,1;incrementpointerjLoopFinish:;***restoreoldregistercontentslwr2,SaveR2lwr3,SaveR3
5lwr4,SaveR4lwr5,SaveR5jrr31;Retur4.实验流程图5、实验步骤及结果首先按照实验要求载入gcm.s和input.s。5.1不设置任何断点运行(1)不采用重新定向技术,输入6、3得到的结果:6(2)采用定向输入6、3,得到的结果7分析:在定向技术存在的情况下Statistics窗口中的各种统计数字:总的周期数(121)和暂停数(Rawstalls:23,Controlstalls:10,Trapstalls:18,Total:21)在定向技术不存在时候,控制暂停和Trap暂停仍然是同样的值,而RAW暂停从23变成了34,总的模拟周期数增加到136。所以使用定向技术可以较明显减少周期暂停,提高系统执行效率。3.2设置断点运行首先分别在
8main+0x8(addr2,r1,r0)gcm.loop(segr3,r1,r2)result+0xc(trap0x0)处设断点。点击F5执行程序,在弹出的I/O窗口中输入第一个数字6。程序运行到第一个断点处。观察寄存器的变化,发现第一个数据已经存入R1中。9再按F5继续执行程序,在弹出的窗口中输入第二个数字3,程序运行到第二个断点处。观察寄存器的变化。第一个数字存入了R2,第二个数字存入R1。再按F5继续执行,开始循环,一直按F5执行下去。R2中值一直减去R1中值,直至二者相等。寄存器变化如下所示:10程序结束。最后结果存储在R2中。实验的结果:11(2)输入6、1寄存器变化:实验的结果:12