看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《tzutengweng (神奇的湯姆)》之銘言: : 1.ABCD (不會亂猜) : 2.CE (不會亂猜) : 3.D : 4.DE : 5. : 假設A, B 的base adress為$s1, $s2 : add $t0, $0, $0 // i=0 : Loop: lw $t1, 0($s1) //$t1= A[i] : lw $t2, 0($s2) //$t2= B[i] : add $t3, $t1, $t2 // $t3=A[i]+B[i] : sw $t3, 0($s1) //A[i]= $t3 : srl $t1, $t1, 1 //$t1=A[i]/2 (感謝j大 本來寫sll) : sw $t1, 0($s2) //B[i]=$t1 : addi $s1, $s1, 4 : addi $s2, $s2, 4 : addi $t0, $t0, 1 //i=i+1 : slti $t1, $t0, n // if i<n, $t1=1 else $t1=0; : bne $t1, $0, Loop : Exit: : 請大家幫忙debug 感恩! : 6. BD : 7. DE : 8. CDE : 9. ABCDE : 10. : https://en.wikipedia.org/wiki/Readers%E2%80%93writers_problem : third readers-writers problem 針對第五題 https://i.imgur.com/Eji5RF7.png 我的寫法 假設 A[] : $S1 B[] : $S2 n : $S3 add $t0 , $zero , $zero // $t0 代表 i Loop: sll $t1 , $t0 , 2 // i 乘以四 計算Array位址 add $t2 , $t1 , $s1 // A[i] 位址 add $t3 , $t1 , $s2 // B[i] 位址 lw $t4 , 0($t2) // 取出 A[i] 值 lw $t5 , 0($t3) // 取出 B[i] 值 add $t4 , $t4 , $t5 // A[i] = A[i] + B[i] sw $t4 , 0($t2) // 存入 A[i] 值 slti $t6 , $t4 , 0 // 判斷 A[i] < 0 beq $t6 , $zero , Pos addi $t4 , $t4 , 1 // 有號數除法修正 Pos: sra $t4 , $t4 , 1 // 除以2 sw $t4 , 0($t2) // 存入 B[i] 值 addi $t0 , $t0 , 1 // i = i + 1 bne $t0 , $s3 , Loop // i ≠ n 跳loop Exit: 共 16 行 (含 Exit ) 與原Po不一樣的是 多一行有號數除法修正 (題目應該沒講是無號數吧@@ ?) 再請計組高手大大們 過目一下 感恩~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.243.96.98 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1513601963.A.AC5.html ※ 編輯: jerry900287 (111.243.96.98), 12/18/2017 21:08:27
sarsman: 若t4小於0才需要做修正吧? 12/19 00:54
對耶! 感謝提醒! 我修一下 ※ 編輯: jerry900287 (111.243.96.98), 12/19/2017 09:33:35
winiel559: 想請問加一為什麼能修正? 12/19 10:05
winiel559: -4=1100, 1100+1=1101, 1100邏輯右移=0110=6,請問為 12/19 21:03
winiel559: 什麼這樣能修正有號數除法@@? 12/19 21:03
先看 -5 的 (二進制 : 1011 ) 他二進制轉十進制的算式為 -2^3 + 2^1 + 2^0 -5 除以 4 為 -2^1 + 2^-1 + 2^-2 = -2 + 0.5 + 0.25 如果你直接往右移兩個 bit 會變成 (二進制 : 1110)(十進制為 -2 ) (實際上十進制為應該為 -1) 而被移調這兩個 bit (0.75)可以跟一個 1 抵銷 但是他被cut掉了 為了能跟1抵銷 所以往右邊移掉幾個bit 就加上 幾個1 做修正 (在這是 11 上去) 為了就是讓移完後能再有 十進制上+1 (二進制上的+1是最低位元+1) 的動作 如 1011 + 11 ________ 1110 再往右移兩個 bit 變成 11 (十進制為 -1) ※ 編輯: jerry900287 (111.243.96.98), 12/19/2017 22:06:05 ※ 編輯: jerry900287 (111.243.96.98), 12/19/2017 22:09:31 ※ 編輯: jerry900287 (111.243.96.98), 12/19/2017 22:09:51
winiel559: 這是算術左移不是邏輯左移吧@@ 12/19 23:17
對欸 再修一下XD 所以是改 sra ※ 編輯: jerry900287 (111.243.96.98), 12/19/2017 23:21:36 ※ 編輯: jerry900287 (111.243.96.98), 12/19/2017 23:24:28
ms718293: 台大 12/20 17:25
DLHZ: 第二個sw應該是 sw $t4 , 0($t3) 12/15 00:26