程序集:没有存储在正确的索引中
assembly: not getting stored at the right index
我以 32 的 mips 编写代码,从用户那里得到 10 个小于 25 的数字,有一个包含 25 个元素的数组,并在用户输入的每个索引中存储一个 7。例如,如果用户输入 3 4 5.. 数组的第 3、4 和 5 位将存储一个 7。这是我的:
.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 没有存储在用户提供的索引中。有人能告诉我我做错了什么吗?
您应该使用 debugger/simulator 单步执行代码。然后你会看到 7
s 存储在正确的位置,你只是打印错误的数组。您在每次迭代中将 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
我以 32 的 mips 编写代码,从用户那里得到 10 个小于 25 的数字,有一个包含 25 个元素的数组,并在用户输入的每个索引中存储一个 7。例如,如果用户输入 3 4 5.. 数组的第 3、4 和 5 位将存储一个 7。这是我的:
.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 没有存储在用户提供的索引中。有人能告诉我我做错了什么吗?
您应该使用 debugger/simulator 单步执行代码。然后你会看到 7
s 存储在正确的位置,你只是打印错误的数组。您在每次迭代中将 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