深圳大学计算机系统3实验一RISC-V 汇编练习

发布时间 2023-11-30 01:30:54作者: jannleo
  1. 如图1-1,汇编代码在图左侧部分,右侧部分为运行结束时寄存器的值。
  • 右图a0说明array数组起始地址为0x10000000
  • 运行结果为0x37即为55,结果正确
  • 代码设计前首先初始化了data节的array数组的值,然后给寄存器a0赋予了array的起始地址,a1赋予了数组长度10
  • 各寄存器含义如下:
  • a0:array数组首地址
  • a1:数组长度
  • a2:sum
  • a3:i
  • t3:存放数组array[i]的值
  • t4:存放距离array[0]的距离,即4*i
  • t5与t6:在代码中属于置位寄存器,判断i是否超过数组长度或者小于零

图1-1

2、在图2-1中,我们看到了程序运行时分别访问了block0-block3,并且从1-a访问期间速度有区别,在从block3跳转到block0时,速度有明显下降,所以合理设计访问block可以提高程序运行速度。

图2-1

3、在图3-1中,我们看到array数组是从低地址往高地址存储的,并且是用大端存储。

图3-1

4、如图4-1,在运行过程中我发现CPI在1.3-1.4之间波动,且processor为流水线运行指令的,非常高效,让我十分震撼。

图4-1

5、源代码如下:

.data

array: .word 1,2,3,4,5,6,7,8,9,10 #初始化数组

.text

la a0 , array #a0 = array

li a1 , 10 #a1 = 10 (len)

call calSum #调用calsum函数

j STOP

#int calSum(int *array ,int len);

calSum:

andi a2,a2,0

andi a3,a3,0

Loop:

slti t5,a3,0

bne t5,zero,8

slt t6,a3,a1

beq t6,zero,6

slli t4,a3,2

add t4,t4,a0

lw t3,0(t4)

add a2,a2,t3

addi a3,a3,1

j Loop

Exit:

andi a0,a0,0

addi a0,a2,0

ret

STOP:

nop #空指令,即什么都不做(相当于addi x0 , 0)