MIPSアセンブリで関数をコーディングする必要がある宿題が1つあり、その関数はシフトを使用する必要があり、可能な限り最も効率的である必要があります。
アセンブリコードはCで呼び出されますfunc(n1,n2,n3,n4,n5);
これは私のコードであり、期待どおりに機能しています。
01 .data
02 .text
03 .globl func
04
05 func:
06
07 lw $8, 16($29)
08 addi $29,$29, -20
09 sw $31,0($29)
10
11 # f = 16x1 + 8x2 + 4x3 + 2x4 + x5 This is what the function do
12
13
14 li $9,0
15 li $10,0
16 li $11,16
17
18 # Load the five function parameter on function
19 sb $4,4($29)
20 sb $5,8($29)
21 sb $6,12($29)
22 sb $7,16($29)
23 sb $8,20($29)
24
25 la $25,4($29)
26 loop:
27
28 lb $24,0($25)
29 mul $12,$11,$24
30 add $9,$9,$12
31
32 srl $11,$11,1
33 addi $25,$25,4
34 #addi $29,$29,1
35
36 addi $10,$10,1
37 ble $10,4,loop
38
39
40 move $2,$9
41 end:
42
43 lw $31,0($29)
44 addi $29,$29,20
45 jr $31
だから私が求めているのは、このコードはシフトを使用して最も効率的に実行できるということですか?
srl
乗算する値にアクセスするように作成しましたが、シフトを使用して関数の5パラメーターにアクセスできるかどうかわかりません。