实验一熟悉WinDLX的使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一熟悉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一>D2 D2..result
movi2fp fl 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
sw PrintfPar,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)
seqi r5,r3,10 ;LF一>Exit
bnez rS,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.实验过程截图: