基于转发(Forwarding)机制的MIPS程序时钟周期计算求助
MIPS程序时钟周期计算求助
我还没完全搞懂转发(Forwarding)机制的原理,现在需要帮忙计算下面这段MIPS程序完成所需的处理器时钟周期数。程序完成的判定标准是标记为done:的指令首次完整走完流水线。
00000000 1 02008025 # or $s0,$s0,$zero // $s0 = 0 00000004 1 02609825 # or $s3,$s3,$zero // $s3 = 0(数据数组偏移量) 00000008 1 0280a025 # or $s4,$s4,$zero // $s4 = 0(累加和) 0000000c 1 8C150008 # lw $s5,max_loops($zero) // $s5 = max_loops(最大循环次数) 00000010 1 8c110000 # lw $s1,one($zero) // $s1 = one(值为1); 00000014 1 8c120004 # lw $s2,four($zero) // $s2 = four(值为4); 00000018 1 0215402a # slt $t0,$s0,$s5 // while ($s0 < $s3) (注:此处疑似笔误,应为$s0 < $s5) 0000001c 1 02118020 # loop: add $s0, $s0, $s1 // $s0 = $s0 + 1 00000020 1 11000006 # beq $t0,$zero,done 00000024 1 8e69000C # lw $t1,data($s3) // $t1 = data[$s3/4](取数组元素) 00000028 1 02729820 # add $s3, $s3, $s2 // $s3 = $s3 + 4 (偏移量加4,指向下一数组元素) 0000002c 1 0290a020 # add $s4,$s4,$s0 00000030 1 0289a020 # add $s4,$s4,$t1 // sum = (2*$s0) + data[i](累加和计算) 00000034 1 08000007 # j loop 00000038 1 0215402a # slt $t0,$s0,$s5 // while ($s0 < $s3) (注:此处疑似笔误,应为$s0 < $s5) 0000003c 1 0800000f # done: j done 00000040 1 00000000 # nop 00000000 0 00000001 # one: dw 1 // 定义值为1的变量 00000004 0 00000004 # four: dw 4 // 定义值为4的变量 00000008 0 00000020 # max_loops: dw 32 // 定义最大循环次数为32 0000000C 0 00000001 # data: // 数据数组起始 00000010 0 00000002 00000014 0 00000003 00000018 0 00000004 0000001c 0 00000005 00000020 0 00000006 00000024 0 00000007 00000028 0 00000008 0000002c 0 00000009 00000030 0 0000000a 00000034 0 0000000b 00000038 0 0000000c 0000003c 0 0000000d 00000040 0 0000000e 00000044 0 0000000f 00000048 0 00000010 0000004c 0 00000011 00000050 0 00000012 00000054 0 00000013 00000058 0 00000014 0000005c 0 00000015 00000060 0 00000016 00000064 0 00000017 00000068 0 00000018 0000006c 0 00000019 00000070 0 0000001a 00000074 0 0000001b 00000078 0 0000001c 0000007c 0 0000001d 00000080 0 0000001e 00000084 0 0000001f 00000088 0 00000020
内容的提问来源于stack exchange,提问作者ivanka georgieva
相关产品推荐
相关产品推荐

