实验4
/*首先,A右移16位和0xFFFF相与,然后将得到的结果的高16位赋给R2,
此时 R2=0,再将A赋值给R2
同理,R3 值为 B*/
LHI R2, (A>>16)&0xFFFF
ADDUI R2, R2, A&0xFFFF
//上面两个为R2指向第一个数字
LHI R3, (B>>16)&0xFFFF
ADDUI R3, R3, B&0xFFFF
ADDU R4, R0, R3;R4=R0+R3
//寄存器 R2,R3 的初始值为数组 A、B的初始地址
loop:
LD F0, 0(R2) //把R2这个位置的数字存到F0
LD F4, 0(R3) //把R3这个位置的数字存到F4
ADDD F0, F0, F4 //浮点运算,两个周期,结构相关
//ADDD = ADD Double双精度浮点加
ADDD F2, F0, F2 //F2=F2+F0
; <- A stall is found (an example of how to answer your questions)
ADDI R2, R2,
ADDI R3, R3,
SUB R5, R4, R2 //R5=R4-R2
BNEZ R5, loop //条件跳转,R5与0
TRAP
A: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
B: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
实验5
/*首先,A右移16位和0xFFFF相与,然后将得到的结果的高16位赋给R2,
此时 R2=0,再将A赋值给R2
同理,R3 值为 B*/
//给 R2,R3 赋 A、B 数组的首地址
LHI R2, (A>>16) & 0xFFFF
ADDUI R2, R2, A & 0xFFFF
//上面两个为 R2 指向第一个数字,这里为数组A中第一个数字0
LHI R3, (B>>16)&0xFFFF
ADDUI R3, R3, B&0xFFFF
//上面两个为 R3 指向第一个数字,这里为数组B中第一个数字9
/*取数组 A 里的数加上 B 的首地址再写回 A*/
loop:
LW R1, 0(R2) //从存储器中读取一个字的数据到寄存器中
ADD R1, R1, R3 //将R1,R3中的值相加,然后存入R1寄存器
SW 0(R2), R1 //把一个字的数据从寄存器存储到存储器中
LW R5, 0(R1) //从存储器中读取一个字的数据到寄存器中
ADDI R5, R5,
ADDI R2, R2,
SUB R4, R3, R2 //R4=R3-R2减法
BNEZ R4, loop //条件跳转,R4与0
TRAP
A: .word 0, 4, 8, 12, 16, 20, 24, 28, 32, 36
B: .word 9, 8, 7, 6, 5, 4, 3, 2, 1, 0