运算机系统结构实验教学大纲和实验内容.docx
《运算机系统结构实验教学大纲和实验内容.docx》由会员分享,可在线阅读,更多相关《运算机系统结构实验教学大纲和实验内容.docx(20页珍藏版)》请在冰豆网上搜索。
运算机系统结构实验教学大纲和实验内容
实验一熟悉WinDLX的利用
一.实验目的:
通过本实验,熟练把握WinDLX模拟器的操作和利用,熟悉DLX指令集结构及其特点。
二.实验内容:
(一)WinDLX的安装:
1.WinDLX是一个基于Windows的模拟器,能够演示DLX流水线是如何工作的。
WinDLX包括和文件。
同时,还需要一些扩展名为.s的汇编代码文件。
按以下步骤在Windows下安装WinDLX:
1WinDLX创建目录,例如D:
\WINDLX
2解压WinDLX软件包或拷贝所有的WinDLX文件(至少包括,)到那个WinDLX目录。
2.启动和配置WinDLX:
双击WinDLX图标,将显现一个带有六个图标的主窗口,双击这些图标会弹出子
窗口.
为了初始化模拟器,点击File菜单中的Resetall菜单项,弹出一个“Reset
DLX”对话框。
然后点击窗口中的“确认”按钮即可。
(二)程序介绍
1.求阶乘程序
那个程序说明浮点指令的利用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中挪用了中的输入子程序,那个子程序用于读入正整数。
2.程序
程序从标准输入读入两个整数,求他们的greatestcommonmeasure,然后将结果写到标准输出。
3.求素数程序
程序计算假设干个整数的素数。
三.实验要求:
实验前要做好充分预备,包括WinDLX安装与调试步骤、程序运行方式,和对模拟结果的分析等。
四.实验步骤
1.启动WinDLX模拟器.装入测试程序之前,先初始化WinDLX.
2.以运行求阶乘程序为例,选择File/LoadCodeorData,按如下步骤操作,可将和这两个程序装入主存:
将和拷贝到WinDLX目录,
◆点击
◆点击select按钮
◆点击
◆点击select按钮
◆点击load按钮
3.点击主窗口中的Execution开始运行。
4.程序(最大公因子)和(计算假设干个整数的素数)的运行进程同上。
五.实验报告:
通过上述利用WinDLX,总结WinDLX的特点。
六.程序:
;***********WINDLX:
Factorial*************
;***********(c)1991*************
;***********Modified:
1992MaziarKhosravipour*************
;--------------------------------------------------------------------------
;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
;***********WINDLX:
Readapositiveintegernumber*************
;***********(c)1991G黱therRaidl*************
;***********Modified1992MaziarKhosravipour*************
;-----------------------------------------------------------------------------
;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
;***********WINDLX:
Greatestcommonmeasure*************
;***********(c)1991G黱therRaidl*************
;***********Modified1992MaziarKhosravipour*************
;------------------------------------------------------------------------
;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;readintoR1
addr2,r1,r0;R2<-R1
addir1,r0,Prompt2
jalInputUnsigned;readintoR1
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
;***********WINDLX:
Generateprimenumbertable*************
;***********(c)1991G黱therRaidl*************
;***********Modified1992MaziarKhosravipour*************
;-------------------------------------------------------------------
;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
实验二结构相关
一.实验目的:
通过本实验,加深对结构相关的明白得,了解结构相关对CPU性能的阻碍。
二.实验内容:
1.用WinDLX模拟器运行程序。
2.通过模拟,找出存在结构相关的指令对和致使结构相关的部件。
3.由结构相关引发的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
4.论述结构相关对CPU性能的阻碍,讨论解决结构相关的方式。
三.实验原理:
结构相关是指因为程序的执行方向可能被改变而引发的相关。
可能改变程序执行方向的指令通常有无条件转移、一样条件转移、复合条件转移、子程序挪用、中断等。
1.无条件转移
无条件转移指令一样能够在指令分析器中就执行完成,因此一样对指令执行部件的工作可不能造成阻碍。
2.条件转移
条件转移指令有两种:
一样条件转移指令和复合条件转移指令。
关于一样条件转移指令,相关最严峻的情形发生在条件码是上一条指令产生的。
转移不成功对先行操纵器的阻碍不大,而转移成功时,不仅指令执行进程变成了完全串行,而且要作废已经取到先行指令缓冲栈中的大量指令,从而白白增加了处置机与主存之间的通信量。
关于复合条件转移指令,若是转移不成功,那么就象一条一般的运算型指令一样。
若是转移成功,不仅要全数或部份作废先行指令缓冲栈中已经预取的指令,还可能要作废先行操作栈中的指令和先行读数栈中的操作数,作废当前在指令分析器中分析的指令。
四.WinDLX的窗口配置:
1.Statistics窗口:
将待运行程序装入主存后按F5使程序完成执行,显现消息"Trap#0occurred"说明最后一条指令trap0已经执行,Trap指令中编号“0”没有概念,只是用来终止程序。
双击图标Statistics。
Statistics窗口提供方方面面的信息:
模拟中硬件配置情形、暂停及缘故、条件分支、Load/Store指令、浮点指令和traps。
窗口中给出事件发生的次数和百分比。
2.WinDLX能够在多种配置下工作。
你能够改变流水线的结构和时刻要求、存储器大小和其他几个操纵模拟的参数。
点击Configuration/FloatingPointStages(点击Configuration打开菜单,然后点击FloatingPointStages菜单项),选择如下标准配置:
Count
Delay
AdditionUnits:
1
2
MultiplicationUnits:
1
5
DivisionUnits:
1
19
点击Configuration/MemorySize,能够设置模拟处置器的存储器大小。
应设置为0x8000,然后,点击OK返回主窗口。
在Configuration菜单中的其他三个配置也能够设置,它们是:
Symbolicaddresses,AbsoluteCycleCount和EnableForwarding。
点击相应菜单项后,在它的隔壁将显示一个小钩。
五.实验要求:
实验前要做好充分预备,包括WinDLX安装与调试步骤、程序运行方式,和对模拟结果的分析等。
六.实验报告:
一、程序运行说明。
二、存在结构相关的指令对和致使结构相关的部件说明。
3、查看Statistics窗口中的各类统计数字,记录由结构相关引发的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
七.程序:
LHIR2,(A>>16)&0xFFFF
ADDUIR2,R2,A&0xFFFF
LHIR3,(B>>16)&0xFFFF
ADDUIR3,R3,B&0xFFFF
ADDUR4,R0,R3
loop:
LDF0,0(R2)
LDF4,0(R3)
ADDDF0,F0,F4
ADDDF2,F0,F2;<-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.在不采纳定向技术的情形下(通过Configuration菜单中的EnableForwarding选项设置),用WinDLX模拟器运行程序。
4.记录数据有关引发的暂停时钟周期数和程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
5.采纳定向技术的情形下,用WinDLX模拟器再次运行程序。
三.实验要求:
实验前要做好充分预备,包括WinDLX安装与调试步骤、程序运行方式,和对模拟结果的分析等。
四.实验原理:
1.三种数据有关:
“先读后写”、“先写后读”和“写-写”相关。
2.在流水线中成立专用数据途径来幸免数据有关的大体原理是数据重定向。
五.WinDLX的窗口配置:
1.Statistics窗口:
将待运行程序装入主存后按F5使程序完成执行,显现消息"Trap#0occurred"说明最后一条指令trap0已经执行,Trap指令中编号“0”没有概念,只是用来终止程序。
双击图标Statistics。
Statistics窗口提供方方面面的信息:
模拟中硬件配置情形、暂停及缘故、条件分支、Load/Store指令、浮点指令和traps。
窗口中给出事件发生的次数和百分比。
2.Code窗口:
双击图标Code,你将看到代表存储器内容的三栏信息,从左到右依次为:
地址(符号或数字)、命令的十六进制机械代码和汇编命令。
点击主窗口中的Execution开始模拟。
在显现的下拉式菜单中,点击SingleCycle或按F7键,模拟就向前执行一步。
3.Breakpoint窗口:
当通过Code窗口观看代码时(若是未打开,双击图标Code),你会看到接下来的几条指令几近一样,它们都是sw-操作:
将寄放器中的数写入存储器中。
重复按F7将很枯燥,因此,咱们利用断点加速此进程。
此刻,请指向Code窗口中包括命令trap0x5的0x0000015c行,此命令是写屏幕的系统挪用。
单击命令行,然后点击主窗口菜单Code,单击SetBreakpoint(确保命令行仍被标记!
),将弹出一个新的"SetBreakpoint"窗口。
通过此窗口,你能够选择命令运行到流水线的哪一时期时,程序停止执行。
缺省为ID段。
点击OK关闭窗口。
在Code窗口中,trap0x5行上显现了"BID",它表示当本指令在译码段时,程序中止执行。
若是想查看已概念的断点,你只要单击图标Reakpoints,将弹出一个小窗口,其中显示了所有断点。
从头使窗口图标化。
此刻你只要点击Execution/Run或按F5,模拟就继续运行。
会显现一个对话框提示你"ID-Stage:
reachedatBreakpoint#1",按“确认”按钮关闭。
点击Clockcyclediagram窗口中的trap0x5行,你将看到模拟正处于时钟周期14。
trap0x5行如下所示:
缘故是:
不管何时碰到一条trap指令时,DLX处置器中的流水线将被清空。
在Information窗口(双击trap行弹出)中,在IF段显示消息"3stall(s)becauseofTrap-Pipeline-Clearing!
"。
(不要忘了按OK关闭窗口)。
指令trap0x5已经写到屏幕上,你能够通过点击主窗口菜单条上的Execute/DisplayDLX-I/O来查看。
六.实验报告:
1.程序装入主存运行跋文录下Statistics窗口中的各类统计数字:
总的周期数和暂停数(RAW,Control,Trap,Total),然后关闭窗口。
2.点击Configuration中的EnableForwarding使定向无效(去掉小钩),打开断点Breakpoints图标并点击Breakpoints菜单,删除所有断点,然后按F5,键入20后,按Enter,程序一直运行到终止。
3.再次打开Statistics窗口,记下新的统计数字。
计算暂停时钟周期数占总执行周期数的百分比。
计算采纳定向技术后性能提高的倍数。
七.程序:
LHIR2,(A>>16)&0xFFFF
ADDUIR2,R2,A&0xFFFF
LHIR3,(B>>16)&0xFFFF
ADDUIR3,R3,B&0xFFFF
loop:
LWR1,0(R2)
ADDR1,R1,R3
SW0(R2),R1
LWR5,0(R1)
ADDIR5,R5,#10
ADDIR2,R2,#4
SUBR4,R3,R2
BNEZR4,loop
TRAP#0
A:
.word0,4,8,12,16,20,24,