Re: [理工] 105台大電機丙 計系 對答案

作者: jerry900287 (滷蛋)   2017-12-18 20:59:20
※ 引述《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不一樣的是
多一行有號數除法修正 (題目應該沒講是無號數吧@@ ?)
再請計組高手大大們 過目一下
感恩~~
作者: sarsman (DeNT15T♠)   2017-12-19 00:54:00
若t4小於0才需要做修正吧?
作者: winiel559 (大漢天威)   2017-12-19 10:05:00
想請問加一為什麼能修正?-4=1100, 1100+1=1101, 1100邏輯右移=0110=6,請問為什麼這樣能修正有號數除法@@?這是算術左移不是邏輯左移吧@@
作者: ms718293 (老大不小老二很小)   2017-12-20 17:25:00
台大

Links booklink

Contact Us: admin [ a t ] ucptt.com