实验一熟悉WinDLX的使用.docx

上传人:b****8 文档编号:10930645 上传时间:2023-02-23 格式:DOCX 页数:29 大小:256.11KB
下载 相关 举报
实验一熟悉WinDLX的使用.docx_第1页
第1页 / 共29页
实验一熟悉WinDLX的使用.docx_第2页
第2页 / 共29页
实验一熟悉WinDLX的使用.docx_第3页
第3页 / 共29页
实验一熟悉WinDLX的使用.docx_第4页
第4页 / 共29页
实验一熟悉WinDLX的使用.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

实验一熟悉WinDLX的使用.docx

《实验一熟悉WinDLX的使用.docx》由会员分享,可在线阅读,更多相关《实验一熟悉WinDLX的使用.docx(29页珍藏版)》请在冰豆网上搜索。

实验一熟悉WinDLX的使用.docx

实验一熟悉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

 

—.

实验一匕:

多处理机并行计算

‘灾验日的:

通过

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1