logo资料库

WinDLX的使用,详细的哦.doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
1. 实验目的: 实验一 熟悉 WinDLX 的使用 通过本实验,熟悉 WinDLX 模拟器的操作和使用,了解 DLX 指令集结构 及其特点。 2. 实验内容: (1) 用 WinDLX 模拟器执行求阶乘程序 facts。 这个程序说明浮点指令的使用。该程序从标准输入读入一个整数,求其 阶乘,然后将结果输出。该程序中调用了 input.s 中的输入子程序,这个 子程序用于读入正整数。 (2) 输入数据“3”采用单步执行方法,完成程序并通过上述使用 WinDLX, 总结 WinDLX 的特点。 (3) 注意观察变量说明语句所建立的数据区,理解 WinDLX 指令系统。 3. 实验程序: 求阶程序 fact.s ;*********** 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 main: ;*** Read value from stdin into R1 addi r1,r0,Prompt jal InputUnsigned
;*** init values movi2fp f10,r1 ;R1 -> D0 D0..Count register cvti2d f0,f10 addi r2,r0,1 ;1 -> D2 D2..result movi2fp f11,r2 cvti2d f2,f11 movd f4,f2 ;1-> D4 D4..Constant 1 ;*** Break loop if D0 = 1 Loop: led f0,f4 ;D0<=1 ? bfpt Finish ;*** Multiplication and next multd f2,f2,f0 subd f0,f0,f4 j Loop loop r14,r0,PrintfPar Finish: ;*** write result to stdout sd PrintfValue,f2 addi trap 5 ;*** end Trap 0 该程序中调用了 input.s 中输入的子程序 ;*********** WINDLX Ex.1: 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 0,ReadBuffer,80 ;*** Data for Printf-Trap PrintfPar: .space 4 SaveR2: .space 4 SaveR3: .space 4 SaveR4: .space 4 SaveR5: .space 4 .text .global InputUnsigned InputUnsigned: ;*** save register contents sw SaveR2,r2 sw SaveR3,r3 sw SaveR4,r4 sw SaveR5,r5 ;*** Prompt sw PrintfPar,r1 addi trap 5 r14,r0,PrintfPar ;*** call Trap-3 to read line addi r14,r0,ReadPar trap 3 determine value r2,r0,ReadBuffer ;*** addi 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 r5,Finish subi r3,r3,48 ;?? multu r1,r1,r4 ;Shift decimal add r1,r1,r3 addi r2,r2,1 ;increment pointer j Loop Finish: ;*** restore old register contents lw r2,SaveR2 lw r3,SaveR3 lw r4,SaveR4 lw r31 r5,SaveR5 jr Retur 4.实验结果: ;
分享到:
收藏