我必须创建一个mips代码,它必须告诉我一个随机数(由用户给出)是否在数组(1)中或者不是(0)。我有两个问题,第一个是我试图向用户询问的随机数(li $ v0,5 - syscall - move $ t0,$ v0)它不起作用,实际上它什么也没做当我组装它。 第二个问题很奇怪,我有2个循环(目标)和(退出循环),第一个检查一个数字是否在任何一个数组位置(10个位置),第二个是否为0,如果它没有'找到号码。 有什么想法吗?
iterator = 4
N = 10
.data
vector: .word 2, 3, 5, 6, 8, 1, 3, 2, 5, 9
.text
main:
lw $t2, buscador
li $t1, iterator
la $s1, vector
move $s0, $zero
li $v0, 5
syscall
move $t0, $v0
target:
bgt $s0, N, exit_loop
mul $t3, $s0, $t1
addu $t3, $t3, $s1
lw $t3, 0($t3)
addi $s0, $s0, 1
bne $t0, $t3, target
li $s2, 1
move $a0, $s2
li $v0, 1
syscall
exit_loop:
li $s2, 0
move $a0, $s2
li $v0, 1
syscall
li $v0, 10
syscall
答案 0 :(得分:0)
您的程序似乎 nothing 错误。
符号buscador
未定义,因此程序可能未正确组装。我评论了给定的一行。这可能是唯一的问题。
我做了一些轻微的化妆品清理并添加了一些注释。我还简化了打印整数系统调用[你原本可以使用的。]
我 添加额外的跳转到新标签exit_program
以保持通过/失败案例分开。否则,从通过案件到失败案件你会有一个“堕落”,并且对于通行案你会得到“10”而不是“1”。
但是,否则,我不(即没有需要)改变你的逻辑。
我测试了该计划,它适用于QtSpim
和mars
。
无论如何,只是为了确定,这是一个有效的版本:
iterator = 4
N = 10
.data
vector: .word 2, 3, 5, 6, 8, 1, 3, 2, 5, 9
.text
main:
# NOTE: this symbol was _not_ defined, so spim may have silently not
# run the program
###lw $t2,buscador
li $t1,iterator # get sizeof(vector[0])
la $s1,vector # get vector base address
move $s0,$zero # set vector index to zero
# prompt user for number
li $v0,5
syscall
move $t0,$v0
target:
bgt $s0,N,exit_loop # vector end? if yes, fly
mul $t3,$s0,$t1 # offset = index * iterator
addu $t3,$t3,$s1 # current addr = base + offset
lw $t3,0($t3) # fetch word from vector
addi $s0,$s0,1 # increment the vector index
bne $t0,$t3,target # does value match? if no, loop
# value matches -- output a 1
li $a0,1
li $v0,1
syscall
j exit_program
# we did _not_ find a match -- output a 0
exit_loop:
li $a0,0
li $v0,1
syscall
exit_program:
li $v0,10
syscall