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