【问题标题】:assembly: not getting stored at the right index程序集:未存储在正确的索引处
【发布时间】:2015-03-26 00:04:26
【问题描述】:

我在 mips 32 中编写了代码,从用户那里获得 10 个小于 25 的数字,有一个包含 25 个元素的数组,并在用户输入的每个索引中存储一个 7。例如,如果用户输入 3 4 5.. 将有一个 7 存储在数组的第 3、第 4 和第 5 个位置。这就是我所拥有的:

.data

prompt: .asciiz "Please input 10 integers between 0 and 25:\n"
i: .byte 0
k: .byte 0
ARRAY1: .space 25
newline: .asciiz "\n"

.text

_start:
main: la $a0, prompt
      li $v0, 4
      syscall

      la $t0, ARRAY1
      lb $t1, i
      li $t2, 10
      li $t4, 25
      lb $t5, k
      li $t9, 7

get_input_loop: li $v0, 5
                syscall
                add $t0, $t0, $v0
                sb $t9, ($t0)
                sub $t0, $t0, $v0
                addi $t1, $t1, 1
                blt $t1, $t2, get_input_loop

       la $t0, ARRAY1

print: add $t0, $t0, $t5
       lb $t6, ($t0)

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


       addi $t5, $t5, 1
       blt $t5, $t4, print





      li $v0, 10
      syscall

由于某种原因,7 没有存储在用户提供的索引中。有人可以告诉我我做错了什么吗?

【问题讨论】:

    标签: arrays assembly mips32


    【解决方案1】:

    您应该使用调试器/模拟器来单步调试您的代码。然后您会看到7s 存储在正确的位置,您只是打印错误的数组。您在每次迭代中将1 添加到$t5 并将$t5 添加到$t0,因此您要打印的是索引0, 1, 3, 6, 10, ...。您的打印循环应该看起来更像:

    print: lb $t6, ($t0)
    
           move $a0, $t6
           li $v0, 1
           syscall
    
           addi $t0, $t0, 1
           addi $t5, $t5, 1
           blt $t5, $t4, print
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 2019-09-06
      • 2014-08-19
      • 2020-10-26
      • 2013-11-18
      • 2019-07-09
      • 2021-12-15
      相关资源
      最近更新 更多