我有一个家庭作业,我必须在 MIPS 汇编中编写一个函数,并且该函数必须使用轮班并且必须是最有效的。
汇编代码在 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 参数。