实验一熟悉WinDLX的使用.docx
- 文档编号:6213875
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:226KB
实验一熟悉WinDLX的使用.docx
《实验一熟悉WinDLX的使用.docx》由会员分享,可在线阅读,更多相关《实验一熟悉WinDLX的使用.docx(12页珍藏版)》请在冰豆网上搜索。
实验一熟悉WinDLX的使用
HUNANUNIVERSITY
实验一熟悉WinDLX的使用
学生班级:
计科2班
学生姓名:
***
一.实验目的:
通过本实验,熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点。
二.实验内容:
(一)WinDLX的安装:
1.WinDLX是一个基于Windows的模拟器,能够演示DLX流水线是如何工作的。
WinDLX包含windlx.exe和windlx.hlp文件。
同时,还需要一些扩展名为.s的汇编代码文件。
按以下步骤在Windows下安装WinDLX:
1WinDLX创建目录,例如D:
\WINDLX
2解压WinDLX软件包或拷贝所有的WinDLX文件(至少包含windlx.exe,windlx.hlp)到这个WinDLX目录。
2.启动和配置WinDLX:
双击WinDLX图标,将出现一个带有六个图标的主窗口,双击这些图标会弹出子
窗口.
为了初始化模拟器,点击File菜单中的Resetall菜单项,弹出一个“Reset
DLX”对话框。
然后点击窗口中的“确认”按钮即可。
(二)程序介绍
1.求阶乘程序fact.s
这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。
2.程序gcm.s
gcm.s程序从标准输入读入两个整数,求他们的greatestcommonmeasure,然后将结果写到标准输出。
3.求素数程序prim.s
prim.s程序计算若干个整数的素数。
三、实验程序
1.求阶乘程序Fact.s:
;------------------------------------------------------------------------
;Programbeginatsymbolmain
;requiresmoduleINPUT
;readanumberfromstdinandcalculatethefactorial(type:
double)
;theresultiswrittentostdout
;--------------------------------------------------------------------------
.data
Prompt:
.asciiz"Anintegervalue>1:
"
PrintfFormat:
.asciiz"Factorial=%g\n\n"
.align2
PrintfPar:
.wordPrintfFormat
PrintfValue:
.space8
.text
.globalmain
main:
;***ReadvaluefromstdinintoR1
addir1,r0,Prompt
jalInputUnsigned
;***initvalues
movi2fpf10,r1;R1->D0D0..Countregister
cvti2df0,f10
addir2,r0,1;1->D2D2..result
movi2fpf11,r2
cvti2df2,f11
movdf4,f2;1->D4D4..Constant1
;***BreakloopifD0=1
Loop:
ledf0,f4;D0<=1?
bfptFinish
;***Multiplicationandnextloop
multdf2,f2,f0
subdf0,f0,f4
jLoop
Finish:
;***writeresulttostdout
sdPrintfValue,f2
addir14,r0,PrintfPar
trap5
;***end
trap0
2.输入子程序Input.s
;-------------------------------------------------------------------
;Subprogramcallbysymbol"InputUnsigned"
;expecttheaddressofazero-terminatedpromptstringinR1
;returnsthereadvalueinR1
;changesthecontentsofregistersR1,R13,R14
;-----------------------------------------------------------------------------
.data
;***DataforRead-Trap
ReadBuffer:
.space80
ReadPar:
.word0,ReadBuffer,80
;***DataforPrintf-Trap
PrintfPar:
.space4
SaveR2:
.space4
SaveR3:
.space4
SaveR4:
.space4
SaveR5:
.space4
.text
.globalInputUnsigned
InputUnsigned:
;***saveregistercontents
swSaveR2,r2
swSaveR3,r3
swSaveR4,r4
swSaveR5,r5
;***Prompt
swPrintfPar,r1
addir14,r0,PrintfPar
trap5
;***callTrap-3toreadline
addir14,r0,ReadPar
trap3
;***determinevalue
addir2,r0,ReadBuffer
addir1,r0,0
addir4,r0,10;Decimalsystem
Loop:
;***readsdigitstoendofline
lbur3,0(r2)
seqir5,r3,10;LF->Exit
bnezr5,Finish
subir3,r3,48;?
?
multur1,r1,r4;Shiftdecimal
addr1,r1,r3
addir2,r2,1;incrementpointer
jLoop
Finish:
;***restoreoldregistercontents
lwr2,SaveR2
lwr3,SaveR3
lwr4,SaveR4
lwr5,SaveR5
jrr31;Retur
3.求最大公约数程序:
gcm.s
;------------------------------------------------------------------------
;Programbeginsatsymbolmain
;requiresmoduleINPUT
;Readtwopositiveintegernumbersfromstdin,calculatethegcm
;andwritetheresulttostdout
;------------------------------------------------------------------------
.data
;***Promptsforinput
Prompt1:
.asciiz"FirstNumber:
"
Prompt2:
.asciiz"SecondNumber:
"
;***Dataforprintf-Trap
PrintfFormat:
.asciiz"gcM=%d\n\n"
.align2
PrintfPar:
.wordPrintfFormat
PrintfValue:
.space4
.text
.globalmain
main:
;***ReadtwopositiveintegernumbersintoR1andR2
addir1,r0,Prompt1
jalInputUnsigned;readuns.-integerintoR1
addr2,r1,r0;R2<-R1
addir1,r0,Prompt2
jalInputUnsigned;readuns.-integerintoR1
Loop:
;***CompareR1andR2
seqr3,r1,r2;R1==R2?
bnezr3,Result
sgtr3,r1,r2;R1>R2?
bnezr3,r1Greater
r2Greater:
;***subtractr1fromr2
subr2,r2,r1
jLoop
r1Greater:
;***subtractr2fromr1
subr1,r1,r2
jLoop
Result:
;***Writetheresult(R1)
swPrintfValue,r1
addir14,r0,PrintfPar
trap5
;***end
trap0
4.求素数程序prim.s:
;-------------------------------------------------------------------
;Programbeginsatsymbolmain
;generatesatablewiththefirst'Count'primenumbersfrom'Table'
;-------------------------------------------------------------------
.data
;***sizeoftable
.globalCount
Count:
.word10
.globalTable
Table:
.spaceCount*4
.text
.globalmain
main:
;***Initialization
addir1,r0,0;IndexinTable
addir2,r0,2;Currentvalue
;***Determine,ifR2canbedividedbyavalueintable
NextValue:
addir3,r0,0;HelpindexinTable
Loop:
seqr4,r1,r3;EndofTable?
bnezr4,IsPrim;R2isaprimenumber
lwr5,Table(R3)
divur6,r2,r5
multur7,r6,r5
subur8,r2,r7
beqzr8,IsNoPrim
addir3,r3,4
jLoop
IsPrim:
;***WritevalueintoTableandincrementindex
swTable(r1),r2
addir1,r1,4
;***'Count'reached?
lwr9,Count
srlir10,r1,2
sger11,r10,r9
bnezr11,Finish
IsNoPrim:
;***Checknextvalue
addir2,r2,1;incrementR2
jNextValue
Finish:
;***end
trap0
四.窗口介绍
第一次打开WINDLX模拟器,我们可以看到如下六个小窗口。
1Register窗口
Register窗口显示寄存器中的内容。
为此,双击主窗口中的Register图标。
Register窗口会显示各个寄存器中的内容。
看一下R1到R5的值。
按F5使模拟继续运行到下一个断点处,有些值将发生改变。
2Code窗口
该窗口代表存储器内容的三栏信息,从左到右依次为:
地址(符号或数字)、命令的十六进制机器代码和汇编命令。
点击主窗口中的Execution开始模拟。
在出现的下拉式菜单中,点击SingleCycle或按F7键。
这时,窗口中带有地址“$TEXT”的第一行变成黄色。
按下F7键,模拟就向前执行一步,第一行的颜色变成橘黄色,下一行变成黄色.。
这些不同颜色指明命令处于流水线的哪一段。
3Pipeline窗口
Pipeline窗口显示DLX处理器的内部结构。
窗口中用图表形式显示了DLX的五段流水线。
你应尽可能地扩大此窗口,以便处于不同流水段的指令都能够在图表中显示。
4ClockCycleDiagram窗口
该窗口使所有子窗口图标化,然后打开ClockCycleDiagram窗口。
它显示流水线的时空图。
该时空图中显示了每一个时隙内的运行情况。
对准Clockcyclediagram窗口中相应命令所在行,然后双击它,弹出一个新窗口。
窗口中会详细显示每一个流水段处理器内部的执行动
5Statistics窗口
该窗口是对运行程序中数据的分析。
Statistics窗口提供各个方面的信息:
模拟中硬件配置情况、暂停及原因、条件分支、Load/Store指令、浮点指令和traps。
窗口中给出事件发生的次数和百分比。
在静态窗口中我们可以比较一下不同配置对模拟的影响。
6Breakpoint窗口
通过Code窗口可以观察代码(如果未打开,双击图标Code),可以通过Breakpoint来观察代码运行的情况。
单击SetBreakpoint,将弹出一个新的"SetBreakpoint"窗口。
通过此窗口,可以选择命令运行到流水线的哪一阶段时,程序停止执行。
缺省为ID段。
点击OK关闭窗口。
在Code窗口中,相应行上出现了"BID",它表示当本指令在译码段时,程序中止执行。
如果想查看已定义的断点,你只要单击图标Reakpoints,将弹出一个小窗口,其中显示了所有断点。
重新使窗口图标化。
点击Execution/Run或按F5,模拟就继续运行。
会出现一个对话框提示"ID-Stage:
reachedatBreakpoint#1",按“确认”按钮关闭。
五、实验过程
(1)通过双击WinDLX图标
启动WinDLX,将出现一个带有六个图标的主窗口:
(2)进行初始化模拟器,点击File菜单中的Resetall菜单项,弹出一个“ResetDLX”对话框。
然后点击窗口中的“确认”按钮即可。
(3)在开始模拟之前,至少应装入一个程序到主存。
为此,选择File/LoadCodeorData,窗口中会列出目录中所有汇编程序。
fact.s计算一个整型值的阶乘;input.s中包含一个子程序,它读标准输入(键盘)并将值存入DLX处理器的通用寄存器R1中。
按如下步骤操作,把fact.s和input.s加载入主存。
点击fact.s
点击select按钮
点击input.s
点击select按钮
点击load按钮
得到如下图:
弹出一下询问对话框,点击“是”。
(4)模拟结果
阶乘函数答案:
最大公因数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验一 熟悉WinDLX的使用 实验 熟悉 WinDLX 使用