作者jerry900287 ()
看板Grad-ProbAsk
標題Re: [理工] 105台大電機丙 計系 對答案
時間Mon Dec 18 20:59:20 2017
※ 引述《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