推 metalalive:ALUsrcB = 10 ,是給 memory access 指令用的 ex. lw,sw 07/24 00:36
→ metalalive:因為lw,sw指令 需要 1 register 加上 signExt(16imm) 07/24 00:38
→ metalalive:打錯 , 是 1 register (代表offset in memory) 加上 07/24 00:43
→ metalalive:另一個 16 bit 的常數,當作data所在的memory address 07/24 00:45
→ metalalive:而16 bit常數,需要先轉成 32 bit 才可以跟 register 做 07/24 00:46
→ metalalive:加法 07/24 00:46
→ metalalive:ALUsrcB = 11 , 是給 branch 指令使用 07/24 00:55
→ metalalive:branch 的條件成立後 PC <- PC + signExt(16imm) << 2 07/24 00:56
→ metalalive:其 16 bit常數extend到32 bit後,之所以要shift left 2 07/24 00:57
→ metalalive:是因為該程式原本提供的數值是計算jump行數,而非直接 07/24 00:59
→ metalalive:給relative memory address , 所以要乘以4 (等同 shift 07/24 01:00
→ metalalive:left 2) 07/24 01:00
→ da0910cc:33333QQQQQQQQQQQ!!!!!!!!!!!!!!! 07/24 20:38