计算机体系结构实验报告1
;*********** WINDLX Bsp.3: Faktoriellenberechnung ************* ;*********** (c) 1991 G黱therRaidl *************
学号: 姓名:
班级:
;-------------------------------------------------------------------------; Programmanfangbei Symbol main ; Ben鰐igtModul INPUT ; LiesteineZahl von stdinein und berechnetimTyp double die Faktorielle ; Abschlie遝ndwird das Ergebnisausgegeben ;-------------------------------------------------------------------------.data Prompt: .asciiz "Einganzzahliger Wert >1 : "
;----------------------------------------------------------------------------;Unterprogrammaufrufbei Symbol InputUnsigned
;Erwartet in R1 die Adresseeinesmit 0 abgeschlossenen Prompt-Strings ;Liefert in R1 den eingelesenen, positivenIntegerwertzurueck. ;Veraendert die Register R1, R13, R14 ;----------------------------------------------------------------------------.data ;*** Daten f黵 Read-Trap ReadBuffer: .space ReadPar: .word 80 0,ReadBuffer,80
;*** Werteinitialisieren movi2fp cvti2d addi movi2fp cvti2d movd f10,r1 f0,f10 r2,r0,1 f11,r2 f2,f11 f4,f2 ;1-> D4 D4..Konstante 1 ;1 -> D2 D2..Ergebnis ;R1 -> D0 D0..Z鋒lregister
;*** Berechnungsschleifeabbrechen, wenn D0 1 erreicht Loop: bfpt led f0,f4 Finish ;D0<=1 ?
;*** Multiplikationdurchf黨ren und n鋍hsterSchleifendurchgang multd subd j Finish: sd addi trap f2,f2,f0 f0,f0,f4 Loop ;*** Ergebnisausgeben PrintfValue,f2 r14,r0,PrintfPar 5
multu add addi j Finish:
程序流程图: fakt.s (主体):
yes f0 <= f4 no f2 ← f2 * f0
f0 ← f0 – f4
实验步骤: 一、运行 WinDLX 仿真器。 二、在开始模拟之前,fact.s 程序装入一个程序到主存。在装入 fact.s 程序的同时需要同时装入 input.s 程序,现在可以开始模拟工作了。 三、找出实验中的不明白的地方,自己解决并写出原因。 四、输入数据“3”采用单步执行方法,完成程序并通过上述使用 WinDLX, 总结 WinDLX 的特点。
;*** Daten f黵Printf-Trap PrintfPar: SaveR2: SaveR3: SaveR4: SaveR5: .space .space .space .space InputUnsigned: ;*** Registerwertesichern sw sw sw sw SaveR2,r2 SaveR3,r3 SaveR4,r4 SaveR5,r5 InputUnsigned
;*** Prompt ausgeben sw addi trap PrintfPar,r1 r14,r0,PrintfPar 5
;*** Trap-3 zumEinleseneinerZeileaufrufen addi trap r14,r0,ReadPar 3
;*** Zahlermitteln addi addi addi r2,r0,ReadBuffer r1,r0,0 r4,r0,10 ;Dezimalsystem
计算机体系结构实验报告
实验题目:熟悉 WinDLX 的使用 日期:2014.4.16 Email: 实验目的: 通过本实验,熟悉 WinDLX 模拟器的操作和使用,了解 DLX 指令集结构及其 特点。 硬件环境: (VMware 虚拟机下) CPU: Intel(R) Core(TM)i5-2450M CPU @2.50GHz 内存: 1G 软件环境: WinDLX VMware Workstation Windows XP Pro. 实验内容: (1)用 WinDLX 模拟器执行求阶乘程序 fakt.s 。执行步骤详见“WinDLX 教程” 。这个程序说明浮点指令的使用。改程序从标准输入读入一个整数,求其 阶乘,然后将结果输出。改程序中调用了 input.s 中的输入子程序,这个程序 用于读入正整数。 (2)输入数据“3”并采用单步执行方法,完成程序并通过上述使用 WinDLX,总结 WinDLX 的特点。 (3)注意观察变量说明语句所建立的数据区,理解 WinDLX 指令系统。 实验程序: 求阶乘程序 fakt.s :
;*** Programmende trap 0
该程序调用了input.s中的输入子程序:
;*********** WINDLX Bsp.1: EinleseneinespositivenIntegerwerts ************* ;*********** (c) 1991 G黱therRaidl *************
实验结果:
完整的流水线时空图如下图:
统计数据如下:
执行过程中分别在 0x0000015c、0x00000194 和 0x000001a4 处设置断点,程序执 行到断点处 registers 内容如下:
0x0000015c:
0x00000194:
0x000001a4:
PrintfFormat: .asciiz .align PrintfPar: .word PrintfValue: .space
"Die Faktorielle = %g\n\n" 2 PrintfFormat 8
.text .global main: ;*** Wert von stdin in R1 einlesen addi jal r1,r0,Prompt InputUnsigned main
Loop: lbu seqi bnez subi
;*** Bis das ZeilenendeerkanntwirdZeichenalsZiffernbeh. r3,0(r2) r5,r3,10 ;LF -> Exit r5,Finish r3,r3,48 ;?? r1,r1,r4 ;Shift um eineDezimalstelle r1,r1,r3 ;NeueEinerstellehinzu r2,r2,1 Loop ;*** AlteRegisterwerte laden und zurueck lw lw lw lw jr r2,SaveR2 r3,SaveR3 r4,SaveR4 r5,SaveR5 r31 ; Return ;Zeichenpointerinkrementieren