【问题标题】:Can anyone tell what mistake i'm doing in this MIPS code?谁能告诉我在这个 MIPS 代码中犯了什么错误?
【发布时间】:2018-11-06 16:49:56
【问题描述】:
   .data
array:  .space 10
prompt: .asciiz "Enter an integer (0 to quit) :"
text:   .asciiz "After sorting, the list of integers is:"
  .text
  .globl main
main:
  la $a1, array
read_numbers:
  # Rest of code omitted for brevity...
  beqz $v0, sort
  j read_numbers

sort:
  la $a1, $array

  li $v0, 4
  la $a0, text
  syscall

loop:
  lw $t0, 0($a1)
  addiu $a1, $a1, 4

  beqz $t0, done

  li $v0, 1
  move $a0, $t0
  syscall

  j loop

【问题讨论】:

    标签: mips


    【解决方案1】:

    假设上面的代码在文件中的格式是正确的,而不是全部在一行中,并且忽略了您缺少的代码

    # Rest of code omitted for brevity
    

    忽略你没有说它应该做什么,或者它做了什么......

    我看到的第一件事是你是否在 main 中分支:

    read_numbers: # Rest of code omitted for brevity...
      beqz $v0, sort 
      j read_numbers
    

    但是由于您没有将 v0 设置为任何值,因此它被设置为在您的代码之前设置的任何值(当我运行它时,非零)

    因此,它从未分支到排序例程,而是跳转到 read_numbers 并执行无限循环。

    如果它在“排序”中,它将从数组中获取第一个数字,即 0(除非您以某种方式填充了数组),看到它是 0 并尝试分支到“完成”,这也是不在你的代码中。

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 2021-09-06
      • 2013-05-29
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多