提交 8494cb7b 创建 作者: 李川's avatar 李川 提交者: 宋海霞

添加代码注释

上级 58f916b2
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<project id="ac9de382-e5f9-49cb-8327-308b2d60f811" name="mips-pipeline" version="1"> <project id="70a17000-92ec-42bc-affe-544ca7817454" name="mips-pipeline" version="1">
<files> <files>
<filefolder id="c0a181af-d67c-4dd0-9275-aa277475c77c" name="子模块"> <filefolder id="c0a181af-d67c-4dd0-9275-aa277475c77c" name="子模块">
......
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
.text .text
addi $r0, $r0, 1 ;r0 = r0 + 1 addi $r0, $r0, 1 ;r0 = r0 + 1
addi $r1, $r1, 2 ;r1 = r1 + 2 addi $r1, $r1, 2 ;r1 = r1 + 2
addi $r3, $r3, 3 ;r3 = r3 + 3 addi $r3, $r3, 3 ;r3 = r3 + 3
SHIFT: SHIFT:
sllv $r1, $r1, $r0 ;r1 = r1 << r0 sllv $r1, $r1, $r0 ;r1 = r1 << r0,写后读数据冲突(Read After Write, RAW),r1寄存器的值尚未写回,sllv指令就读取r1的值进行运算,导致计算错误
add $r3, $r3, $r1 ;r3 = r3 + r1 add $r3, $r3, $r1 ;r3 = r3 + r1
slt $r2, $r1, $r0 ;r2 = r1 < r0 ? 1 : 0; slt $r2, $r1, $r0 ;r2 = r1 < r0 ? 1 : 0;
beq $r2, $r2, NEXT ;if r2 == r2, goto NEXT beq $r2, $r2, NEXT ;if r2 == r2, goto NEXT,控制冲突,取指令时还未确定下一条指令应取地址。
sub $r1, $r1, $r0 ;r1 = r1 - r0 sub $r1, $r1, $r0 ;r1 = r1 - r0
NEXT: NEXT:
lw $r0, 0($r1) ;r0 = memory[r1+0] lw $r0, 0($r1) ;r0 = memory[r1+0]
sw $r3, 0($r1) ;memory[r1+0] = r3 add $r1, $r1, $r0 ;r1 = r1 + r0,lw指令导致数据冲突,lw指令还没将r0写回,add指令就使用r0寄存器的值进行运算,导致错误
bne $r1, $r2, END ;if r1 != r2, goto END,控制冲突,取指令时还未确定下一条指令应取地址。
add $r1, $r1, $r0 ;r1 = r1 + r0
bne $r1, $r2, END ;if r1 != r2, goto END
END: END:
jump F1 ;goto SHIFT jump F1 ;goto SHIFT,控制冲突,取指令时还未确定下一条指令应取地址。
sllv $r3, $r0, $r1 ;r3 = r0 << r1 sllv $r3, $r0, $r1 ;r3 = r0 << r1
F1: F1:
sub $r2, $r2, $r3 ;r2 = r2 - r3 sub $r2, $r2, $r3 ;r2 = r2 - r3
bgt $r3, $r2, F2 ;if r3 > r2, goto F2 bgt $r3, $r2, F2 ;if r3 > r2, goto F2 ,控制冲突,取指令时还未确定下一条指令应取地址。
add $r2, $r2, $r3 ;r2 = r2 + r3 add $r2, $r2, $r3 ;r2 = r2 + r3
F2: F2:
...@@ -34,7 +32,7 @@ ori $r1, $r1, 3 ;r1 = r1 | 3 ...@@ -34,7 +32,7 @@ ori $r1, $r1, 3 ;r1 = r1 | 3
srav $r3, $r3, $r1 ;r3 = r3 >> r1, 算术右移 srav $r3, $r3, $r1 ;r3 = r3 >> r1, 算术右移
andi $r1, $r2, 4 ;r1 = r2 & 4 andi $r1, $r2, 4 ;r1 = r2 & 4
jump SHIFT ;goto SHIFT jump SHIFT ;goto SHIFT,控制冲突,取指令时还未确定下一条指令应取地址。
......
没有这种文件类型的预览
0001 .text 0001 .text
0002 0002
0003 00 50 01 addi $r0, $r0, 1 ;r0 = r0 + 1 0003 00 50 01 addi $r0, $r0, 1 ;r0 = r0 + 1
0004 02 55 02 addi $r1, $r1, 2 ;r1 = r1 + 2 0004 02 55 02 addi $r1, $r1, 2 ;r1 = r1 + 2
0005 04 5F 03 addi $r3, $r3, 3 ;r3 = r3 + 3 0005 04 5F 03 addi $r3, $r3, 3 ;r3 = r3 + 3
0006 0006
0007 0007
0008 SHIFT: 0008 SHIFT:
0009 06 04 44 sllv $r1, $r1, $r0 ;r1 = r1 << r0 0009 06 04 44 sllv $r1, $r1, $r0 ;r1 = r1 << r0,写后读数据冲突(Read After Write, RAW),r1寄存器的值尚未写回,sllv指令就读取r1的值进行运算,导致计算错误
0010 08 0D C2 add $r3, $r3, $r1 ;r3 = r3 + r1 0010 08 0D C2 add $r3, $r3, $r1 ;r3 = r3 + r1
0011 0011
0012 0A 04 87 slt $r2, $r1, $r0 ;r2 = r1 < r0 ? 1 : 0; 0012 0A 04 87 slt $r2, $r1, $r0 ;r2 = r1 < r0 ? 1 : 0;
0013 0C 8A 01 beq $r2, $r2, NEXT ;if r2 == r2, goto NEXT 0013 0C 8A 01 beq $r2, $r2, NEXT ;if r2 == r2, goto NEXT,控制冲突,取指令时还未确定下一条指令应取地址。
0014 0E 04 43 sub $r1, $r1, $r0 ;r1 = r1 - r0 0014 0E 04 43 sub $r1, $r1, $r0 ;r1 = r1 - r0
0015 0015
0016 NEXT: 0016 NEXT:
0017 10 64 00 lw $r0, 0($r1) ;r0 = memory[r1+0] 0017 10 64 00 lw $r0, 0($r1) ;r0 = memory[r1+0]
0018 12 77 00 sw $r3, 0($r1) ;memory[r1+0] = r3 0018 12 04 42 add $r1, $r1, $r0 ;r1 = r1 + r0,lw指令导致数据冲突,lw指令还没将r0写回,add指令就使用r0寄存器的值进行运算,导致错误
0019 0019 14 96 00 bne $r1, $r2, END ;if r1 != r2, goto END,控制冲突,取指令时还未确定下一条指令应取地址。
0020 14 04 42 add $r1, $r1, $r0 ;r1 = r1 + r0 0020
0021 16 96 00 bne $r1, $r2, END ;if r1 != r2, goto END 0021 END:
0022 0022 16 B0 0D jump F1 ;goto SHIFT,控制冲突,取指令时还未确定下一条指令应取地址。
0023 END: 0023 18 01 C4 sllv $r3, $r0, $r1 ;r3 = r0 << r1
0024 18 B0 0E jump F1 ;goto SHIFT 0024
0025 1A 01 C4 sllv $r3, $r0, $r1 ;r3 = r0 << r1 0025 F1:
0026 0026 1A 0B 83 sub $r2, $r2, $r3 ;r2 = r2 - r3
0027 F1: 0027 1C AE 01 bgt $r3, $r2, F2 ;if r3 > r2, goto F2 ,控制冲突,取指令时还未确定下一条指令应取地址。
0028 1C 0B 83 sub $r2, $r2, $r3 ;r2 = r2 - r3 0028 1E 0B 82 add $r2, $r2, $r3 ;r2 = r2 + r3
0029 1E AE 01 bgt $r3, $r2, F2 ;if r3 > r2, goto F2 0029
0030 20 0B 82 add $r2, $r2, $r3 ;r2 = r2 + r3 0030 F2:
0031 0031 20 35 03 ori $r1, $r1, 3 ;r1 = r1 | 3
0032 F2: 0032 22 0D C6 srav $r3, $r3, $r1 ;r3 = r3 >> r1, 算术右移
0033 22 35 03 ori $r1, $r1, 3 ;r1 = r1 | 3 0033 24 49 04 andi $r1, $r2, 4 ;r1 = r2 & 4
0034 24 0D C6 srav $r3, $r3, $r1 ;r3 = r3 >> r1, 0034
0035 26 49 04 andi $r1, $r2, 4 ;r1 = r2 & 4 0035 26 B0 03 jump SHIFT ;goto SHIFT,控制冲突,取指令时还未确定下一条指令应取地址。
0036 0036
0037 28 B0 03 jump SHIFT ;goto SHIFT 0037
0038 0038
0039 0039
0040 0040
0041
0042
没有这种文件类型的预览
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论