You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:45:51