- 实验目的:
结合附件A MIPSsim指令列表,完成下列程序中指令的功能解释,理解程序的执行过程
- 实验原理:
MIPS 指令可以分为 4 大类:load 和 store、ALU 操作、分支与跳转、浮点操作。
三、实验内容:
Alltest:
# load和store指令
.text
main:
ADDIU $r8, $r0, DATA //将r0和立即数DATA相加存入r8。32位按无符号数操作
LB $r1, 0($r8) //取字节,在r8寄存器中的对应地址中读出一个字节,经零扩展后,存到r1寄存器中,按有符号数操作
LW $r1, 0($r8) //取r8寄存器中的字加上16位偏移量存到r1寄存器中
LBU $r1, 0($r8) //在r8寄存器中的对应地址中,经零扩展后,存到r1寄存器
ADDIU $r8, $r0, BUFFER //将r0和立即数BUFFER相加存入r8。32位按无符号数操作
SW $r1,0($r8) //从r1中读取数据按16位偏移量offset 写入寄存器r8
BEQ $r0, $r0, PROG2 //若寄存器r0和寄存器r0的值相等,则转到PROG2语句执行
NOP //空操作指令,用于控制时间周期
# 算术运算指令
PROG2:
DADD $r3, $r1, $r2 //双字寄存器加,r1加r2存入r3,按有符号数操作
DMULT $r1, $r2 //双字寄存器乘,,r1乘r2的值,积的低 64 位送 LO, 高 64 位送 HI,按有符号数操作
BEQ $r0, $r0, PROG3 //若寄存器r0和寄存器r0的值相等,则转到PROG3语句执行
NOP //空操作指令
# 逻辑运算指令
PROG3:
AND $r3, $r1, $r2 //r1和r2进行与运算,将结果存入r3
ANDI $r3, $r1,0xFFFF0000
BEQ $r0, $r0, PROG4 //若寄存器r0和寄存器r0的值相等,则转到PROG4语句执行
NOP //空操作指令
# 控制转移指令
PROG4:
BEQ $r1,$r2,LABEL1 //若寄存器r1和寄存器r2的值相等,则转到LABLE1语句执行
NOP //空操作指令
NOP //空操作指令
LABEL1:
BGEZ $r1,LABEL2 //若r1大于等于0,则跳转LABEL2
NOP //空操作指令
NOP //空操作指令
LABEL2:
BGEZAL $r1,LABEL3 //若r1大于等于0转移并链接LABEL3,并将返回
地址(当前的 PC 值)保存到 R31
NOP //空操作指令
NOP //空操作指令
LABEL3:
ADDIU $r1, $r0, LABEL4 //r0加立即数LABEL4存入r1,32 位,按无符号数操作
JALR $r3, $r1 //无条件转移到 r1给出的地址,并将返回地址 PC+4 保存到 r3
NOP //空操作指令
NOP //空操作指令
LABEL4:
TEQ $r0, $r0 //如果r0=r0,则自陷
NOP //空操作指令
# 数据
.data //随后定义的数据被存放到数据段
.align 2 // 将下一个数据对准字边界
DATA:
.word 128 //在连续的内存区中存储值为 wl,w2, …, 的 128 个字(32
位)的数
BUFFER:
.word 300 //在连续的内存区中存储值为 wl,w2, …, 的300个字(32
位)的数
pipeline
.text
main:
ADDIU $r8,$r0,num //将r0和立即数num相加存入r8。32位按无符号数操作
LW $r1, 0($r8) //取r8寄存器中的字加上16位偏移量存到r1寄存器中
BGEZAL $r1,func //如果r1大于等于0,则执行func,并将返回地址(当前的 PC 值)保存到 R31
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
SW $r2, 60($r0) //从r2中读取数据按16位偏移量offset 写入寄存器r0
TEQ $r0,$r0 //如果r0=r0,则自陷
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
func:
ADD $r2,$r1,$r0 //寄存器r1加r0,并将其存入r2
ADDI $r6,$r0,8 //寄存器r0加立即数8,并将其存入r6
loop:
ADDI $r1,$r1,-1 //寄存器r1加立即数-1,并将其存入r1
ADDI $r3,$r0,25 //寄存器r0加立即数25,并将其存入r3
LW $r4, 60($r6) //取r6寄存器中的字加上16位偏移量存到r4寄存器中
BEQ $r1,$r0,ret //若寄存器r1和寄存器r0的值相等,则执行ret跳转指令
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
MUL $r2,$r1,$r2 //寄存器r1乘r2,并将其存入r2
BEQ $r0,$r0,loop //若寄存器r0和寄存器r0的值相等,则执行loop循环指令
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
ret:
JR $r31 //寄存器r31跳转到PC
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
.data
num: .word 5 //在连续的内存区中存储值为 w0, …,w5 的 5个字(32 位)的数
schedule
.text
main:
ADDIU $r1,$r0,A //将r0和立即数A相加存入r1。32位按无符号数操作
LW $r2,0($r1) //取r1寄存器中的字加上16位偏移量存到r2寄存器中
ADD $r4,$r0,$r2 //寄存器r2加r0,并将其存入r4
SW $r4,0($r1) //从r1中读取数据按16位偏移量offset 写入寄存器r4
LW $r6,4($r1) //取r1寄存器中的字加上16位偏移量存到r6寄存器中
ADD $r8,$r6,$r1 //寄存器r1加r6,并将其存入r8
MUL $r12,$r10,$r1 //寄存器r10乘r1,并将其存入r12
ADD $r16,$r12,$r1 //寄存器r1加r12,并将其存入r16
ADD $r18,$r16,$r1 //寄存器r1加r16,并将其存入r18
SW $r18,16($r1) //从r1中读取数据按16位偏移量offset 写入寄存器r18
LW $r20,8($r1) //取r1寄存器中的字加上16位偏移量存到r20寄存器中
MUL $r22,$r20,$r14 //寄存器r14乘r20,并将其存入r22
MUL $r24,$r26,$r14 //寄存器r14乘r26,并将其存入r24
TEQ $r0,$r0 //如果r0=r0,则自陷
.data //随后定义的数据被存放到数据段
A:
.word 4,6,8 //在连续的内存区中存储值为 w4 …,w8 的 8 个字(32 位)的数
afer-schedule
.text
main:
ADDIU $r1,$r0,A //将r0和立即数A相加存入r1。32位按无符号数操作
ADD $r4,$r0,$r2 //寄存器r0加r2,并将其存入r4
LW $r2,0($r1) //取r1寄存器中的字加上16位偏移量存到r2寄存器中
SW $r4,0($r1) //从r1中读取数据按16位偏移量offset 写入寄存器r4
LW $r6,4($r1) //取r1寄存器中的字加上16位偏移量存到r6寄存器中
MUL $r12,$r10,$r1 //寄存器r1乘r10,并将其存入r12
ADD $r8,$r6,$r1 //寄存器r1加r6,并将其存入r8
ADD $r16,$r12,$r1 //寄存器r1加r12,并将其存入r16
LW $r20,8($r1) //取r1寄存器中的字加上16位偏移量存到r20寄存器中
ADD $r18,$r16,$r1 //寄存器r1加r16,并将其存入r18
SW $r18,16($r1) //从r1中读取数据按16位偏移量offset 写入寄存器r18
MUL $r22,$r20,$r14 //寄存器r20乘r14,并将其存入r22
MUL $r24,$r26,$r14 //寄存器r14乘r26,并将其存入r24
TEQ $r0,$r0 //如果r0=r0,则自陷
.data
A:
.word 4,6,8 //在连续的内存区中存储值为 w4, …,w8 的 8 个字(32 位)的数
Branch
.text
main:
ADDI $r2,$r0,1024 //寄存器r0加立即数1024,并将其存入r2
ADD $r3,$r0,$r0 //寄存器r3加r0,并将其存入r2
ADDI $r4,$r0,8 //寄存器r0加立即数8,并将其存入r4
loop:
LW $r1,0($r2) //取r2寄存器中的字加上16位偏移量存到r1寄存器中
ADDI $r1,$r1,1 //寄存器r1加立即数1,并将其存入r1
SW $r1,0($r2) //从r2中读取数据按16位偏移量offset 写入寄存器r1
ADDI $r3,$r3,4 //寄存器r3加立即数4,并将其存入r3
SUB $r5,$r4,$r3 //寄存器r3减r4,并将其存入r5
BGTZ $r5,loop //若r5大于0,则执行loop
ADD $r7,$r0,$r6 //寄存器r6加r0,并将其存入r7
TEQ $r0,$r0 //如果r0=r0,则自陷
delayed-branch
.text
main:
ADDI $r2,$r0,1024 //寄存器r0加立即数1024,并将其存入r2
ADD $r3,$r0,$r0 //寄存器r3加r0,并将其存入r0
ADDI $r4,$r0,8 //寄存器r0加立即数8,并将其存入r4
loop:
LW $r1,0($r2) //取r2寄存器中的字加上16位偏移量存到r1寄存器中
ADDI $r3,$r3,4 //寄存器r3加立即数4,并将其存入r3
ADDI $r1,$r1,1 //寄存器r1加立即数1,并将其存入r1
SUB $r5,$r4,$r3 //寄存器r4减r3,并将其存入r5
SW $r1,0($r2) //从r2中读取数据按16位偏移量offset 写入寄存器r1
BGTZ $r5,loop //若r5大于0,则执行loop
ADD $r7,$r0,$r6 //寄存器r6加r0,并将其存入r7
TEQ $r0,$r0 //如果r0=r0,则自陷
data_hz
.text
main:
ADDIU $r2,$r0,A //将r0和立即数A相加存入r2。32位按无符号数操作
ADDIU $r3,$r0,B //将r0和立即数B相加存入r3。32位按无符号数操作
loop:
LW $r1,0($r2) //取r2寄存器中的字加上16位偏移量存到r1寄存器中
ADD $r1,$r1,$r3 //寄存器r3加r1,并将其存入r1
SW $r1,0($r2) //从r2中读取数据按16位偏移量offset 写入寄存器r1
LW $r5,0($r1) //取r1寄存器中的字加上16位偏移量存到r5寄存器中
ADDI $r5,$r5,10 //寄存器r5加立即数10,并将其存入r5
ADDI $r2,$r2,4 //寄存器r2加立即数4,并将其存入r2
SUB $r4,$r3,$r2 //寄存器r3减r2,并将其存入r4
BGTZ $r4,loop //若r4大于0,则执行loop
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
TEQ $r0,$r0 //如果r0=r0,则自陷
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
.data
A: .word 0, 4, 8 //在连续的内存区中存储值为 w0,w1, …w4 的 8 个字(32 位)的数
B: .word 2, 1, 0 //在连续的内存区中存储值为 w2,w1的 0个字(32 位)的数
structure_hz
.text
main:
ADD.D $f2,$f0,$f1 //双精度浮点f0加f1,并将其存入f2
ADD.D $f3,$f0,$f1 //双精度浮点f0加f1,并将其存入f3
ADD.D $f4,$f0,$f1 //双精度浮点f0加f1,并将其存入f4
ADD.D $f5,$f0,$f1 //双精度浮点f0加f1,并将其存入f5
ADD.D $f6,$f0,$f1 //双精度浮点f0加f1,并将其存入f6
ADD.D $f7,$f0,$f1 //双精度浮点f0加f1,并将其存入f7
ADD.D $f8,$f0,$f1 //双精度浮点f0加f1,并将其存入f8
ADD.D $f9,$f0,$f1 //双精度浮点f0加f1,并将其存入f9
TEQ $r0,$r0 //如果r0=r0,则自陷
- 实验分析:
五、实验总结:
通过这次实验我知道了load和store指令的具体例子。LW是装入字,SW是保存字,ALU指令,都是寄存器-寄存器型(RR 型)或立即数型的。DADDU是无符号加,DADDIU是无符号立即加。控制指令的跳转和分支指令。JR是寄存器跳转,BEQZ是等于零时分支。算术运算指令:寄存器加(ADD),立即值加 (ADDI),无符号立即值加(ADDIU),寄存器乘(MUL)。逻辑运算指令与(AND)。CPU 移位指令:按立即值逻辑左移(SLL),分支指令:相等转移BEQ,大于0转移(BGTZ)。跳转指令:寄存器跳转(JR)。自陷指令:等于自陷(TEQ)等。
- 实验目的:
结合附件A MIPSsim指令列表,完成下列程序中指令的功能解释,理解程序的执行过程
- 实验原理:
MIPS 指令可以分为 4 大类:load 和 store、ALU 操作、分支与跳转、浮点操作。
三、实验内容:
Alltest:
# load和store指令
.text
main:
ADDIU $r8, $r0, DATA //将r0和立即数DATA相加存入r8。32位按无符号数操作
LB $r1, 0($r8) //取字节,在r8寄存器中的对应地址中读出一个字节,经零扩展后,存到r1寄存器中,按有符号数操作
LW $r1, 0($r8) //取r8寄存器中的字加上16位偏移量存到r1寄存器中
LBU $r1, 0($r8) //在r8寄存器中的对应地址中,经零扩展后,存到r1寄存器
ADDIU $r8, $r0, BUFFER //将r0和立即数BUFFER相加存入r8。32位按无符号数操作
SW $r1,0($r8) //从r1中读取数据按16位偏移量offset 写入寄存器r8
BEQ $r0, $r0, PROG2 //若寄存器r0和寄存器r0的值相等,则转到PROG2语句执行
NOP //空操作指令,用于控制时间周期
# 算术运算指令
PROG2:
DADD $r3, $r1, $r2 //双字寄存器加,r1加r2存入r3,按有符号数操作
DMULT $r1, $r2 //双字寄存器乘,,r1乘r2的值,积的低 64 位送 LO, 高 64 位送 HI,按有符号数操作
BEQ $r0, $r0, PROG3 //若寄存器r0和寄存器r0的值相等,则转到PROG3语句执行
NOP //空操作指令
# 逻辑运算指令
PROG3:
AND $r3, $r1, $r2 //r1和r2进行与运算,将结果存入r3
ANDI $r3, $r1,0xFFFF0000
BEQ $r0, $r0, PROG4 //若寄存器r0和寄存器r0的值相等,则转到PROG4语句执行
NOP //空操作指令
# 控制转移指令
PROG4:
BEQ $r1,$r2,LABEL1 //若寄存器r1和寄存器r2的值相等,则转到LABLE1语句执行
NOP //空操作指令
NOP //空操作指令
LABEL1:
BGEZ $r1,LABEL2 //若r1大于等于0,则跳转LABEL2
NOP //空操作指令
NOP //空操作指令
LABEL2:
BGEZAL $r1,LABEL3 //若r1大于等于0转移并链接LABEL3,并将返回
地址(当前的 PC 值)保存到 R31
NOP //空操作指令
NOP //空操作指令
LABEL3:
ADDIU $r1, $r0, LABEL4 //r0加立即数LABEL4存入r1,32 位,按无符号数操作
JALR $r3, $r1 //无条件转移到 r1给出的地址,并将返回地址 PC+4 保存到 r3
NOP //空操作指令
NOP //空操作指令
LABEL4:
TEQ $r0, $r0 //如果r0=r0,则自陷
NOP //空操作指令
# 数据
.data //随后定义的数据被存放到数据段
.align 2 // 将下一个数据对准字边界
DATA:
.word 128 //在连续的内存区中存储值为 wl,w2, …, 的 128 个字(32
位)的数
BUFFER:
.word 300 //在连续的内存区中存储值为 wl,w2, …, 的300个字(32
位)的数
pipeline
.text
main:
ADDIU $r8,$r0,num //将r0和立即数num相加存入r8。32位按无符号数操作
LW $r1, 0($r8) //取r8寄存器中的字加上16位偏移量存到r1寄存器中
BGEZAL $r1,func //如果r1大于等于0,则执行func,并将返回地址(当前的 PC 值)保存到 R31
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
SW $r2, 60($r0) //从r2中读取数据按16位偏移量offset 写入寄存器r0
TEQ $r0,$r0 //如果r0=r0,则自陷
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
func:
ADD $r2,$r1,$r0 //寄存器r1加r0,并将其存入r2
ADDI $r6,$r0,8 //寄存器r0加立即数8,并将其存入r6
loop:
ADDI $r1,$r1,-1 //寄存器r1加立即数-1,并将其存入r1
ADDI $r3,$r0,25 //寄存器r0加立即数25,并将其存入r3
LW $r4, 60($r6) //取r6寄存器中的字加上16位偏移量存到r4寄存器中
BEQ $r1,$r0,ret //若寄存器r1和寄存器r0的值相等,则执行ret跳转指令
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
MUL $r2,$r1,$r2 //寄存器r1乘r2,并将其存入r2
BEQ $r0,$r0,loop //若寄存器r0和寄存器r0的值相等,则执行loop循环指令
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
ret:
JR $r31 //寄存器r31跳转到PC
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
.data
num: .word 5 //在连续的内存区中存储值为 w0, …,w5 的 5个字(32 位)的数
schedule
.text
main:
ADDIU $r1,$r0,A //将r0和立即数A相加存入r1。32位按无符号数操作
LW $r2,0($r1) //取r1寄存器中的字加上16位偏移量存到r2寄存器中
ADD $r4,$r0,$r2 //寄存器r2加r0,并将其存入r4
SW $r4,0($r1) //从r1中读取数据按16位偏移量offset 写入寄存器r4
LW $r6,4($r1) //取r1寄存器中的字加上16位偏移量存到r6寄存器中
ADD $r8,$r6,$r1 //寄存器r1加r6,并将其存入r8
MUL $r12,$r10,$r1 //寄存器r10乘r1,并将其存入r12
ADD $r16,$r12,$r1 //寄存器r1加r12,并将其存入r16
ADD $r18,$r16,$r1 //寄存器r1加r16,并将其存入r18
SW $r18,16($r1) //从r1中读取数据按16位偏移量offset 写入寄存器r18
LW $r20,8($r1) //取r1寄存器中的字加上16位偏移量存到r20寄存器中
MUL $r22,$r20,$r14 //寄存器r14乘r20,并将其存入r22
MUL $r24,$r26,$r14 //寄存器r14乘r26,并将其存入r24
TEQ $r0,$r0 //如果r0=r0,则自陷
.data //随后定义的数据被存放到数据段
A:
.word 4,6,8 //在连续的内存区中存储值为 w4 …,w8 的 8 个字(32 位)的数
afer-schedule
.text
main:
ADDIU $r1,$r0,A //将r0和立即数A相加存入r1。32位按无符号数操作
ADD $r4,$r0,$r2 //寄存器r0加r2,并将其存入r4
LW $r2,0($r1) //取r1寄存器中的字加上16位偏移量存到r2寄存器中
SW $r4,0($r1) //从r1中读取数据按16位偏移量offset 写入寄存器r4
LW $r6,4($r1) //取r1寄存器中的字加上16位偏移量存到r6寄存器中
MUL $r12,$r10,$r1 //寄存器r1乘r10,并将其存入r12
ADD $r8,$r6,$r1 //寄存器r1加r6,并将其存入r8
ADD $r16,$r12,$r1 //寄存器r1加r12,并将其存入r16
LW $r20,8($r1) //取r1寄存器中的字加上16位偏移量存到r20寄存器中
ADD $r18,$r16,$r1 //寄存器r1加r16,并将其存入r18
SW $r18,16($r1) //从r1中读取数据按16位偏移量offset 写入寄存器r18
MUL $r22,$r20,$r14 //寄存器r20乘r14,并将其存入r22
MUL $r24,$r26,$r14 //寄存器r14乘r26,并将其存入r24
TEQ $r0,$r0 //如果r0=r0,则自陷
.data
A:
.word 4,6,8 //在连续的内存区中存储值为 w4, …,w8 的 8 个字(32 位)的数
Branch
.text
main:
ADDI $r2,$r0,1024 //寄存器r0加立即数1024,并将其存入r2
ADD $r3,$r0,$r0 //寄存器r3加r0,并将其存入r2
ADDI $r4,$r0,8 //寄存器r0加立即数8,并将其存入r4
loop:
LW $r1,0($r2) //取r2寄存器中的字加上16位偏移量存到r1寄存器中
ADDI $r1,$r1,1 //寄存器r1加立即数1,并将其存入r1
SW $r1,0($r2) //从r2中读取数据按16位偏移量offset 写入寄存器r1
ADDI $r3,$r3,4 //寄存器r3加立即数4,并将其存入r3
SUB $r5,$r4,$r3 //寄存器r3减r4,并将其存入r5
BGTZ $r5,loop //若r5大于0,则执行loop
ADD $r7,$r0,$r6 //寄存器r6加r0,并将其存入r7
TEQ $r0,$r0 //如果r0=r0,则自陷
delayed-branch
.text
main:
ADDI $r2,$r0,1024 //寄存器r0加立即数1024,并将其存入r2
ADD $r3,$r0,$r0 //寄存器r3加r0,并将其存入r0
ADDI $r4,$r0,8 //寄存器r0加立即数8,并将其存入r4
loop:
LW $r1,0($r2) //取r2寄存器中的字加上16位偏移量存到r1寄存器中
ADDI $r3,$r3,4 //寄存器r3加立即数4,并将其存入r3
ADDI $r1,$r1,1 //寄存器r1加立即数1,并将其存入r1
SUB $r5,$r4,$r3 //寄存器r4减r3,并将其存入r5
SW $r1,0($r2) //从r2中读取数据按16位偏移量offset 写入寄存器r1
BGTZ $r5,loop //若r5大于0,则执行loop
ADD $r7,$r0,$r6 //寄存器r6加r0,并将其存入r7
TEQ $r0,$r0 //如果r0=r0,则自陷
data_hz
.text
main:
ADDIU $r2,$r0,A //将r0和立即数A相加存入r2。32位按无符号数操作
ADDIU $r3,$r0,B //将r0和立即数B相加存入r3。32位按无符号数操作
loop:
LW $r1,0($r2) //取r2寄存器中的字加上16位偏移量存到r1寄存器中
ADD $r1,$r1,$r3 //寄存器r3加r1,并将其存入r1
SW $r1,0($r2) //从r2中读取数据按16位偏移量offset 写入寄存器r1
LW $r5,0($r1) //取r1寄存器中的字加上16位偏移量存到r5寄存器中
ADDI $r5,$r5,10 //寄存器r5加立即数10,并将其存入r5
ADDI $r2,$r2,4 //寄存器r2加立即数4,并将其存入r2
SUB $r4,$r3,$r2 //寄存器r3减r2,并将其存入r4
BGTZ $r4,loop //若r4大于0,则执行loop
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
TEQ $r0,$r0 //如果r0=r0,则自陷
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
SLL $r0,$r0,0 //r0中的低 32位进行逻辑左移,结果按符号位扩展,然后放人r0。 移动的位数为0
.data
A: .word 0, 4, 8 //在连续的内存区中存储值为 w0,w1, …w4 的 8 个字(32 位)的数
B: .word 2, 1, 0 //在连续的内存区中存储值为 w2,w1的 0个字(32 位)的数
structure_hz
.text
main:
ADD.D $f2,$f0,$f1 //双精度浮点f0加f1,并将其存入f2
ADD.D $f3,$f0,$f1 //双精度浮点f0加f1,并将其存入f3
ADD.D $f4,$f0,$f1 //双精度浮点f0加f1,并将其存入f4
ADD.D $f5,$f0,$f1 //双精度浮点f0加f1,并将其存入f5
ADD.D $f6,$f0,$f1 //双精度浮点f0加f1,并将其存入f6
ADD.D $f7,$f0,$f1 //双精度浮点f0加f1,并将其存入f7
ADD.D $f8,$f0,$f1 //双精度浮点f0加f1,并将其存入f8
ADD.D $f9,$f0,$f1 //双精度浮点f0加f1,并将其存入f9
TEQ $r0,$r0 //如果r0=r0,则自陷
- 实验分析:
五、实验总结:
通过这次实验我知道了load和store指令的具体例子。LW是装入字,SW是保存字,ALU指令,都是寄存器-寄存器型(RR 型)或立即数型的。DADDU是无符号加,DADDIU是无符号立即加。控制指令的跳转和分支指令。JR是寄存器跳转,BEQZ是等于零时分支。算术运算指令:寄存器加(ADD),立即值加 (ADDI),无符号立即值加(ADDIU),寄存器乘(MUL)。逻辑运算指令与(AND)。CPU 移位指令:按立即值逻辑左移(SLL),分支指令:相等转移BEQ,大于0转移(BGTZ)。跳转指令:寄存器跳转(JR)。自陷指令:等于自陷(TEQ)等。