实验一熟悉WinDLX的使用.docx
- 文档编号:25099460
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:29
- 大小:256.11KB
实验一熟悉WinDLX的使用.docx
《实验一熟悉WinDLX的使用.docx》由会员分享,可在线阅读,更多相关《实验一熟悉WinDLX的使用.docx(29页珍藏版)》请在冰豆网上搜索。
实验一熟悉WinDLX的使用
实验一熟悉WinDLX的使用
1.实验目的:
通过本实验,熟悉WinDLX模拟器的操作和使用,了解DLX指令集结构及其特点。
2.实验内容:
(1)用WinDLX模拟器执行求阶乘程序facts。
执行步骤详见“WinDLX教程”。
这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。
(2)输入数据“3”采用单步执行方法,完成程序并通过上述使用WinDLX,总结WinDLX的特点。
(3)注意观察变量说明语句所建立的数据区,理解WinDLX指令系统。
3.实验程序:
求阶乘程序facts
;***********WINDLXEx.2:
Factorial*************
Programbeginatsymbolmain
requiresmoduleINPUT
readanumberfromstdinandcalculatethefactorial(type:
double)
theresultiswrittentostdout
.data
Prompt:
.asciiz"Anintegervalue>1:
”
PrintfFormat:
.asciiz"Factorial=%g\n\n"
.align2
PrintfPar:
.wordPrintfFormat
PrintfValue:
.space8
.text
.globalmain
mam:
;***ReadvaluefromstdinintoR1
addir1,r0,Prompt
jalInputUnsigned;***initvalues
movi2fpf10,r1;R1一>DODO二Countregister
cvti2df0,f10
addir2,r0,1;1一>D2D2..result
movi2fpfl1,r2
cvti2d伦,fll
movdf4,fZ;1一>D4D4二Constant1
;***BreakloopifDO=1
Loop:
ledf0,f4;DO<=1?
bfptFinish
;***Multiplicationaridnextloop
multd伦,fZ,fO
subdf0,f0,f4
jLoop
Finish:
;***writeresulttostdout
sdPrintfValue,f2
addir14,r0,PrintfPar
trap5
;***end
trap0
该程序中调用了input.s中的输入子程序
;***********WINDLXEx.l:
Readapositiveintegernumber*************
;Subprogramcallbysymbol"InputUnsigned"
;expecttheaddressofazero-terminatedpromptstringinR1
;returnsthereadvalueinR1
;changesthecontentsofregistersR1,R13,R14
.data
;***DataforRead-Trap
ReadBuffer:
.space80
ReadPar:
.wordO,ReadBuffer,80
;***DataforPrintf-Trap
PrintfPar:
.space4
SaveR2:
.space4
SaveR3:
.space4
SaveR4:
.space4
SaveRS:
.space4
.text
.globalInputUnsigned
InputUnsigned:
;***saveregistercontents
swSaveR2,r2
swSaveR3,r3
swSaveR4,r4
swSaveR5,r5
;***Prompt
swPrintfPar,rl
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
bnezrS,Finish
subir3,r3,48;?
?
multurl,rl,r4;Shiftdecimal
addrl,rl,r3
addir2,r2,1;incrementpointer
jLoop
Finish:
;***restoreoldregistercontents
1wr2,SaveR2
1wr3,SaveR3
1wr4,SaveR4
1wrS,SaveRS
jrr31;Retur
4.实验过程截图:
jal的分支地址命名为“InputUnsigned"。
为找到此符号地址的实际值,点
击主窗口中的Memory和Symbols,出现的子窗口中显示相应的符号和对应的实
际值。
在“Sort":
区域选定“name",使它们按名称排序,而不是按数值排
序。
数字后的“G”代表全局符号,"L”代表局部符号。
"input”中的“InputUnsigned"
是一个全局符号,它的实际值为0x144,用作地址。
点击OK按纽关闭窗口。
再一次点击F7,第一条命令(addi)到达流水线的最后一段。
如果想了解
某条命令执行后处理器内部会发生什么?
你只要对准Clockcyclediagram窗口中
相应命令所在行,然后双击它,弹出一个新窗口。
窗口中会详细显示每一个流水
段处理器内部的执行动作。
这个窗口“Informationabout...”作为将来的
Information窗口。
观察完后,点击OK按钮关闭窗口。
(双击Code窗口中的某一行或者Pipeline窗口中的某一段,同样可以Information窗口。
)
指向Code窗口中包含命令trap0x5的Ox0000015c行,此命令是写屏幕的系统调用。
单击命令行,然后点击主窗口菜单Code,单击SetBreakpoint(确保命令行仍被标记!
),将弹出一个新的“SetBreakpoint”窗口。
通过此窗口,你可以选择命令运行到流水线的哪一阶段时,程序停止执行。
缺省为ID段。
点击OK关闭窗口。
现在你只要点击Execution/Run或按FS,模拟就继续运行。
会出现一个对话框提示你“ID-Stage:
reachedatBreakpoint#1",按’·确认’,按钮关闭。
点击Clockcyclediagram窗口中的trap0x5行,你将看到模拟正处于时钟周期14,0trap0x5行如下所示:
为进一步模拟,点击Code窗口,用箭头键或鼠标向下滚动到地址为0x00000194的那一行(指令是1wr2,SaveR2(r0),点击此行,然后按Ins键,或点击Code/SetBreakpoint/OK,在这一行上设置一个断点。
采用同样的方法,在地址Ox000001a4(指令jarr31)处设置断点。
现在按FS继续运行。
这时,会弹出DLX-Standard-I/O窗口,在信息“Anintegervalue>1:
”后鼠标闪烁,键入20然后按Enter,模拟继续运行到断点#2处。
单步执行:
光标后不能输入数字
输入数字20,并得出结果:
实验二.用WinDLX模拟器执行程序求最大公约数
1.实验目的:
通过本实验,熟练掌握WinDLX模拟器的操作和使用,清楚WinDLX五段流水行具体程序时的流水情况,熟悉DLX指令集结构及其特点。
2.实验内容:
(1)用WinDLX模拟器执行程序gcm.s。
该程序从标准输入读入两个整数,求他们的greatestcommonmeasure,然后斗结果写到标准输出。
该程序中调用了inputs中的输入子程序。
(2).给出两组数6,3和6,1,分别在main+OxB(addr2,r1,r0),gcm.loop(segr;
和result+Oxc(trap0x0)设断点,采用单步和连续混合执行的方法完成程序,注意中间寄存器的变化情况,然后单击主菜单execute/displaydlx-i/0,观察结果。
3.实验程序
求最大公约数程序:
gcm.s
;***********WINDLXEx.l:
Greatestcommonmeasure*************
Programbeginsatsymbolmain
;requiresmoduleINPUT
Readtwopositiveintegernumbersfromstdin,calculatethegcm
andwritetheresulttostdout
.data
;***Promptsforinput
Prompt1:
.asciiz
Prompt2:
.asciiz
“FirstNumber:
”
“SecondNumber:
;***Dataforprintf-Trap
PrintfFormat:
.asciiz“gcM=%d\n\n"
.align2
PrintfPar:
.wordPrintfFormat
PrintfValue:
.space4
.text
.globalmain
mam:
;***ReadtwopositiveintegernumbersintoR1andR2
addir1,r0,Promptl
jalInputUnsigned;readuns.-integerintoR1
addr2,r1,r0;R2<一Rl
addir1,r0,Prompt2
jalInputUnsigned;readuns.-integerintoR1
Loop:
;***CompareR1andR2
seqr3,rl,r2;R1==R2?
bnezr3,Result
sgtr3,rl,r2;R1>R2?
bnezr3,rlGreater
r2Greater:
;***subtractr1fromr2
subr2,r2,r1
jLoop
r1Greater:
;***subtractr2fromr1
subrl,rl,r2
jLoop
Result:
;***Writetheresult(R1)
swPrintfValue,rl
addir14,r0,PrintfPar
trap5
;***end
trap0
该程序中调用了input.s中的输入子程序。
;***********WINDLXEx.l:
Readapositiveintegernumber*************
;Subprogramcallbysymbol“InputUnsigned"
;expecttheaddressofazero-terminatedpromptstringinR1
;returnsthereadvalueinR1
;changesthecontentsofregistersR1,R13,R14
.data
;***DataforRead-Trap
ReadBuffer:
.space80
ReadPar:
.wordO,ReadBuffer,80
二***DataforPrintf-Trap
PrintfPar:
.space4
SaveR2:
.space4
SaveR3:
.space4
SaveR4:
.space4
SaveRS:
.space4
.text
.globalInputUnsigned
InputUnsigned:
;***saveregistercontents
swSaveR2,r2
swSaveR3,r3
swSaveR4,r4
swSaveR5,r5
;***Prompt
swPrintfPar,rl
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
bnezrS,Finish
subir3,r3,48;?
?
multurl,rl,r4;Shiftdecimal
addrl,rl,r3
addir2,r2,1;incrementpointer
jLoop
Finish:
;***restoreoldregistercontents
1wr2,SaeeR2
1wr3,Sa}eR3
1wr4,Sa}eR4
1wrS,SaveRS
jrr31;Retur
4.实验结果截图
七.实验二用WinDLX模拟器完成求素数程序
1.实验目的:
通过实验,熟练掌握WINDLX的操作方法,特别注息在单步执行WinDLX程序中,流
水线中指令的节拍数
2.实验内容:
(1)用WinDLX模拟器执行求素数程序prim.s.这个程序计算若}干个整数的素数
(2)单步执卞两轮程序,求出素数2和3
(3)在执行程序过程中,注息体验单步执行除法和乘法指令的节拍数,并和主菜单
configuration/floatingpointslages中的各指令执行节拍数进行比较。
3.实验程序
求素数程序prim.s.}
;***********WINDLXExp.2:
Generateprimenumbertable*************
;Programbeginsatsymbol
;generatesatablewiththe
mayn
first'Count'primenumbersfrom'Table'
.data
;***sizeoftable
.globalCount
Count:
.word10
.globalTable
Table:
.spaceCount*4
.text
.globalmain
mam:
;***Initialization
addir1,r0,0;IndexinTable
addir2,r0,2;Cuwentvalue
;***Determine,ifR2canbedividedbyavalueintable
NextValue:
addir3,r0,0;HelpindexinTable
Loop:
seqr4,rl,r3;EndofTable?
bnezr4,IsPrim;R2isaprimenumber
1wrS,Table(R3)
divur6,r2,r5
multur7,r6,r5
subur8,r2,r7
beqzrB,IsNoPrim
addir3,r3,4
jLoop
IsPrim:
;***WritevalueintoTableandincrementindex
swTable(rl),r2
addir1,r1,4
;***'Count'reached?
1wr9,Count
srlir10,r1,2
sger11,r10,r9
bnezr11,Finish
IsNoPrim:
;***Checknextvalue
addir2,r2,l;incrementR2
jNextValue
Finish:
;***end
trap0
八.实验四:
结构相关
1.实验口的:
通过本实验,加深对结构相关的理解,了解结构相关对CPU性能的影响。
2.实验内容:
(1)用WinDLX模拟器运行程序structure_d.s。
(2).通过模拟,找出存在结构相关的指令对以及导致结构相关的部件。
(3).记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
(4)论述结构相关对CPU性能的影响,讨论解决结构相关的方法。
3.实验程序:
程序structured.s
LHIR2,(A;16)&OxFFFF
ADDUIR2,R2,A&OxFFFF
LHIR3,(B;16)&OxFFFF
ADDUIR3,R3,B&OxFFFF
ADDUR4,R0,R3
loop:
LDF0,0(R2)
LDF4,0(R3)
ADDDF0,F0,F4
ADDDF2,F0,F?
;<一Astallisfound(anexampleofhowtoanswer
yourquestions)
ADDIR2,R2,#8
ADDIR3,R3,#8
SUBR5,R4,R2
BNEZR5,loop
TRAP#0;;Exit<一thisisacomment!
!
A:
.double1,2.3,4,5,6,7,8,9,10
B:
.double1,2,3,4,5,6,7,8,9,10
九.实验五:
数据相关
1.实验目的:
通过本实验,加深对数据相关的理解,掌握如何使用定向技术来减少数据相关带来的暂
停。
2.实验内容:
(1)在不采用定网技术的情况下(通过Configuj0ation菜单中的EnableForway}ding选
项设置),用WinDLX模拟器运行程序datad.s.
(2)记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
(3)在采用定向技术的情况下,用WinDLX模拟器再次运行程序datad.s
(4)记录数据相关引起的暂停时钟周明数以及程序执行的总时钟周明数,计算暂停时
钟周期数占总执行周期数的百分比。
(5)根据上面记录的数据,计算采用定向技术后性能提高的倍数。
3.实验程序:
程序datad.s
LHIR2,(A;16)&OxFFFF
ADDUIR2,R2,A&OxFFFF
LHIR3,(B;16)&OxFFFF
ADDUIR3,R3,B&OxFFFF
loop:
LWR1,0(R2)
ADDR1,R1,R3
SW0(R2),RI
LWR5,0(R1)
ADDIR5,R5,#10
ADDIR2,R2,#4
SUBR4,R3,R2
BNEZR4,loop
TRAP#0
A:
.word0,4,8,12,16,20,24,?
8,3?
36
B:
.word9,8,7,6,5,4,3,2,1,0
十.实验六:
指令调度
1.实验目的:
通过本实验,加深对指令调度的理解,了解指令调度技术对CPU性能改进的好处。
2.实验内容:
(1)通过Configuration菜单中的“Floatingpointstages”选项,把除法单元数设
置为3,把加法、乘法、除法的延迟设置为3个时钟周期。
(2)用WinDLX模拟器运行调度前的程序scli-before.s。
记录程序执行过程中各种相
关发生的次数以及程序执行的总时钟周期数。
(3)用WinDLX模拟器运行调度后的程序sch-afters,记录程序执行过程中各种
相关发生的次数以及程序执行的总时钟周期数。
(4)根据记录结果,比较调度前和调度后的性能。
(5)论述指令调度对于提高CPU性能的意义。
3.实验程序:
程序sch-before.s
;Exampletoillustrateinstructionscheduling
.data
.globalONE
ONE:
.word1
text
globalmain
mam:
Iff1,ONE;turndivfintoamove
cvti2ff7,fl;bystoringinf71in
nop;floating-pointformat
divffl,f8,f7;moveY=(f8)intofl
divff2,f}3,f7;moveZ=(f})intof2
addff3,f1,f2
divff10,f3,f7:
movef3intoX=(f10)
divff4,fl1,f7;moveB=(fll)intof4
divff5,f12,f7;moveC=(f12)intof5
multff6,f4,f5
divff13,f6,f7;movef6intoA=(f13)
Finish:
trap0
调度后的程序sch-after.s
Exampletoillustrateinstructionscheduling一reorderedinstructions
.data
.globalONE
ONE:
.word1
.text
.globalmain
mam:
iff1,ONE;turndivfintoamove
cvti2ff7;bystoringinf71in
nop;floating-pointformat
divffl,f8,f7;move(f8)intof1
divff2,f9,f7;moveZ=(f9)intof2
divff4,f11,f7;moveB=(fl1)intof4
divff5,f12,f7;moveC=(f12)intof5
addff3,f1,f2
multff6,f4,f5
divff10,f3,f7;movef3intoX=(f10)
divff13,f6,f7;movef6intoA=(f13)
Finish:
trap0
十
—.
实验一匕:
多处理机并行计算
‘灾验日的:
通过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 熟悉 WinDLX 使用