MIPS MARS汇编代码报错求助:牛顿迭代法求函数根
MIPS牛顿迭代求根程序错误排查
我的MIPS代码:
.data prompt: .asciiz "Please enter an integer: " x: .double 2.0 tolerance: .double 1e-6 .text main: # Prompt user for initial value of x li $v0, 4 la $a0, prompt syscall # Read in user input li $v0, 7 syscall # Convert user input to double and store in x mtc1 $v0, $f12 cvt.d.w $f0, $f12 sdc1 $f0, x # Initialize counter and F(x) value li $t0, 0 ldc1 $f12, x add.d $f14, $f12, $f12 mul.d $f14, $f12, $f14 add.d $f14, $f14, 1 # Loop until F(x) is within tolerance loop: # Calculate x{n+1} ldc1 $f12, x add.d $f13, $f12, $f12 mul.d $f13, $f12, $f13 mul.d $f13, $f13, $f12 add.d $f13, $f13, -8 mul.d $f13, $f13, $f12 div.d $f12, $f14, $f13 # Calculate F(x) ldc1 $f12, x add.d $f14, $f12, $f12 mul.d $f14, $f12, $f14 add.d $f14, $f14, 1 # Print current x and F(x) values li $v0, 3 ldc1 $f12, x syscall li $v0, 11 li $a0, ',' syscall li $v0, 3 ldc1 $f14, $f14 syscall li $v0, 11 li $a0, '\n' syscall # Check if F(x) is within tolerance ldc1 $f12, x ldc1 $f14, tolerance c.lt.d $f12, $f14 beq $0, $0, done # Increment counter and repeat loop addi $t0, $t0, 1 b loop done: # Print root found li $v0, 4 la $a0, "Root found: " syscall li $v0, 3 ldc1 $f12, x syscall # End program li $v0, 10 syscall
编译器报错信息:
- 第29行第19列:"1":操作数类型错误
- 第46行第23列:"1":操作数类型错误
- 第56行第5列:"ldc1":操作数数量不足或格式错误,预期格式:ldc$f2,-100($t2)
- 第75行第5列:"la":操作数数量不足或格式错误,预期格式:la $t1,($t2)
需求说明:
我要编写一段MIPS程序,用牛顿迭代公式𝑥ₙ₊₁ = 𝑥ₙ − (𝐹(𝑥ₙ)/𝐹′(𝑥ₙ))求解满足F(xₙ)=0的x值,精度要求达到10⁻⁶。
目标函数为F(x)=x³-4x²+1,导数为F’(x)=3x²-8x。通过迭代计算x的连续值,让F(xₙ)趋近于0,从而得到函数的根。我刚接触MIPS,无法自行排查这些错误,希望有人能指出问题所在。
内容的提问来源于stack exchange,提问作者Samuel Onabolu
相关产品推荐
相关产品推荐

