计算机体系结构实验报告——实验三
1.实验目的:
通过实验,熟练掌握WINDLX 的操作方法,特别注意在单步执行WinDLX程序中,流水线
中指令的节拍数。
2.实验内容:
(1) 用WinDLX模拟器执行求素数程序prim.s。这个程序计算若干个整数的素数。
(2) 单步执行两轮程序,求出素数2和3。
(3) 在执行程序过程中,注意体验单步执行除法和乘法指令的节拍数,并和主菜单
configuration/floating point slages中的各指令执行拍数进行比较。
3.实验程序
求素数程序prim.s。
;***********WINDLX Exp.2: Generate prime number table *************
;
;Program begins at symbol main
; generates a table with the first 'Count' prime numbers from 'Table'
;
.data
;*** size of table
.global Count
Count: .word 10 ;10的地址值
.global Table
Table: .space Count*4 ;给Table保留Count*4个字节
.text
.global main
main:
;*** Initialization
addi r1,r0,0 ;Index in Table ;0+0地址值送R1
addi r2,r0,2 ;Current value ;0+2地址值送R2
;***Determine, if R2 can be divided by a value in table
NextValue: addi r3,r0,0 ;Helpindex in Table ;0+0地址值送R3
Loop: seq r4,r1,r3 ;End of Table? ;IF r1==r3? Yes r4=1;else r4=0;
bnez r4,IsPrim ;R2 is a prime number r4!=0,excute IsPrim
lw r5,Table(R3)
divu r6,r2,r5
multu r7,r6,r5
subu r8,r2,r7
beqz r8,IsNoPrim ;ifr8==0,excute IsNoPrim
addi r3,r3,4 ; r3+4->r3
j Loop
IsPrim: ;***Write value into Table and increment index
sw Table(r1),r2
addi r1,r1,4
;*** 'Count' reached?
lw r9,Count
srli r10,r1,2
sge r11,r10,r9
bnez r11,Finish
IsNoPrim: ;***Check next value
addi r2,r2,1 ;incrementR2
j NextValue
Finish: ;*** end
trap 0
4、实验流程图
5、实验步骤和结果
单步执行过程中寄存器的变化情况
(1)获取素数2:
由于R1=R3=0,所以R2=2为素数,将2送入Table (0)中。
(2)获取素数3。执行步骤以及对应的寄存器的变化情况:
1>R2=2 isPRim,R4=1; 2>R1+4->R1; 3>10->R9,R1/4->R10,R2+1->R2; 4>R1!=R3,R4=0;
5>Table(R3)->R5; 6>R2/R5->R6; 7>R6*R5->R7 ; 8>R2-R7->R8;
9>R3+4->R3; 10>R2=3 is PRim, R4=1; 11>R2=3->Table(4),R1+4->R1;
(3)乘法指令的节拍数为:5 (-9—-5);除法指令的节拍数为:19 (-28—-10);主菜单
configuration/floating point slages中的各指令执行拍数:乘法为5;除法为19。正好
与上述的执行过程一致。
(4)数据相关和结构相关:
数据相关:
Addi r1,r0,0x0
Addi r2,r0,0x2
Addi r3,r0,0x0
Seq r4,r1,r3
Bnez r4,lsprim
Lw r