实验一熟悉WinDLX的使用
1.实验目的:
通过本实验,熟悉WinDLX模拟器的操作和使用,了解DLX指令集结构及其特点。
2.实验内容:
(1)用WinDLX模拟器执行求阶乘程序facts。执行步骤详见“WinDLX教程”。
这个程序说明浮点指令的使用。该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。该程序中调用了input. s中的输入子程序,这个子程序用于读入正整数。
吓组词
(2)输入数据“3”采用单步执行方法,完成程序并通过上述使用WinDLX,总结WinDLX的特点。
(3)注意观察变量说明语句所建立的数据区,理解WinDLX指令系统。
3.实验程序:
求阶乘程序facts
;***********WINDLX Ex.2: Factorial*************
Program begin at symbol main
requires module INPUT
read a number from stdin and calculate the factorial (type: double)
the result is written to stdout
.data
Prompt: .asciiz "An integer value >1:”
PrintfFormat: .asciiz "Factorial=%g\n\n"
.align 2
PrintfPar: .word PrintfFormat
溜溜球图片
PrintfValue: .space 8
.text
.global main
mam:
;***Read value from stdin into R1
addi r1,r0,Prompt
j al InputUnsigned;***init values
movi2fp f10,r1 ;R1一>DO DO二Count register
cvti2d f0,f10
addi r2,r0,1;1一>sult
雅思学术类
movi2fpfl 1,r2
cvti2d伦,fl l
movd f4,fZ;1一>D4 D4二Constant 1
;***Break loop if DO=1
Loop: led f0,f4 ;DO<=1?
bfpt Finish
;***Multiplication arid next loop
multd伦,fZ,fO
subd f0,f0,f4
j Loop
Finish:;***write result to stdout
sd PrintfValue,f2
addi r14,r0,PrintfPar
trap 5
;***end
trap 0
该程序中调用了input. s中的输入子程序
;***********WINDLX Ex. l : Read a positive integer number*************
;Subprogram call by symbol "InputUnsigned"
;expect the address of a zero-terminated prompt string in R1
;returns the read value in R1
;changes the contents of registers R1,R13,R14
.data
仙蟾;***Data for Read-Trap
ReadBuffer: .space 80
ReadPar: .word O,ReadBuffer,80
;***Data for Printf-Trap
PrintfPar: .space 4
SaveR2: .space 4
SaveR3:.space 4
SaveR4: .space 4
SaveRS:.space 4
.text
.global InputUnsigned
InputUnsigned:
;***save register contents
sw SaveR2,r2
sw SaveR3,r3
sw SaveR4,r4
sw SaveR5,r5
; * * * Prompt
swPrintfPar,rl
addi r14,r0,PrintfPar
trap 5
;***call Trap-3 to read line
addi r14,r0,ReadPar
trap 3
;***determine value
addi r2,r0,ReadBuffer
豆角视频
addi r1,r0,0
addi r4,r0,10 ;Decimal system
Loop:;***reads digits to end of line
lbu r3,0(r2)
qi r5,r3,10 ;LF一>Exit
bnezrS,Finish
subi r3,r3,48;??
multu rl,rl,r4 ;Shift decimal
add rl,rl,r3
addi r2,r2,1 ;increment pointer
j Loop
红枣粥
Finish:;***restore old register contents
1w r2,SaveR2
1w r3,SaveR3
1w r4,SaveR4
1w rS,SaveRS
jr r31;Retur
4.实验过程截图:
j al的分支地址命名为“InputUnsigned"。为找到此符号地址的实际值,点
入团志愿书范文击主窗口中的Memory和Symbols,出现的子窗口中显示相应的符号和对应的实
际值。在“Sort":区域选定“name",使它们按名称排序,而不是按数值排
序。数字后的“G”代表全局符号,"L”代表局部符号。" input”中的“InputUnsigned"朱砂桂
是一个全局符号,它的实际值为0x144,用作地址。点击OK按纽关闭窗口。
再一次点击F7,第一条命令(addi)到达流水线的最后一段。如果想了解
某条命令执行后处理器内部会发生什么?你只要对准Clock cycle diagram窗口中
相应命令所在行,然后双击它,弹出一个新窗口。窗口中会详细显示每一个流水