MIPS jal每次使用不同的参数值执行相同的过程3次,并打印3个单独的值
我一直得到“p(x)=10”,但我需要打印3个单独的值,例如“p(x)=10”、“p(x)=36”和“p(x)=21”。我做错了什么,使我无法打印这三个值MIPS jal每次使用不同的参数值执行相同的过程3次,并打印3个单独的值,mips,Mips,我一直得到“p(x)=10”,但我需要打印3个单独的值,例如“p(x)=10”、“p(x)=36”和“p(x)=21”。我做错了什么,使我无法打印这三个值 .data c0: .word 1 c1: .word -3 c2: .word 2 x0: .word 3 x1: .word 5 x2: .word 4 result: .word 0 string: .asc
.data
c0: .word 1
c1: .word -3
c2: .word 2
x0: .word 3
x1: .word 5
x2: .word 4
result: .word 0
string: .asciiz "\np(x)="
.text
main:
#$t0 =
lw $t0, c0($zero)
lw $t1, c1($zero)
lw $t2, c2($zero)
lw $t3, result($zero)
lw $a0, x0($zero)
jal poly
lw $a0, x1($zero)
jal poly
lw $a0, x2($zero)
jal poly
li $v0, 10
syscall
poly:
mul $t4, $a0, $a0 #$t4 = 3 * 3
mul $t5, $t2, $t4 #$t5 = 2 * 9
mul $t4, $t1, $a0 #$t4 = -3 * 3
add $t4, $t5, $t4 #$t4 = 18 - 9
add $t3, $t4, $t0 #$t 9 + 1
jal printStringInt
jr $ra
printInt:
# $a0 has integer
li $v0, 1
add $a0, $zero, $t3
syscall
jr $ra
printString:
# $a0 has string address
li $v0, 4
la $a0, string
syscall
jr $ra
printStringInt:
# $a0 is string address
# $a1 is int
# save return address so not overwritten
# save $a1 so not overwritten
addiu $sp, $sp, -8
sw $a1, 4($sp)
sw $ra, 0($sp)
# print string
jal printString
# print int
# get argument from stack
lw $a0, 4($sp)
jal printInt
lw $ra, 0($sp)
addiu $sp, $sp, 8
jr $ra
这是我必须在MIPS中实现的程序
int c0 = 1;
int c1 = -3;
int c2 = 2;
int x0 = 3;
int x1 = 5;
int x2 = 4;
main(){
int result; // local variable, use register
result = poly(x0);
print "p(x)=", result;
result = poly(x1);
print "p(x)=", result;
result = poly(x2);
print "p(x)=", result;
}
int poly(int x){
return c2*x^2 + c1*x + c0;
}
欢迎来到SO!我想你忘了保存和恢复
$ra
。在poly
内部,与您在printStringInt
中使用的方法相同。