Мне нужно создать код mips, который он должен сказать мне, если случайное число (заданное пользователем) находится в массиве (1) или его нет (0). У меня две проблемы: первая - случайное число, которое я пытаюсь спросить у пользователя (li $ v0, 5 - syscall - переместить $ 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
Так что вам нужно собрать ряд от пользователя с помощью системного вызова, сравнить это число с каждым номером в вашем векторе возвращает истину/1 если найдено и возвращает 0/false, если нет. Я не вижу кода сравнения в ваших циклах. Вам нужно сравнить с текущим векторным элементом или, по крайней мере, вычесть и проверить флаг нуля. –
Первый цикл «target» переходит в первое векторное пространство, я делаю: --mul $ t3, $ s0, $ t1-- --addu $ t3, $ t3, $ s1-- --lw $ t3 , 0 ($ t3) - , чтобы попасть в первое число и сохранить его в $ t3, умножая 0 * 4 (бит), затем добавьте 1 к $ s0, поэтому его, как 0 * 4, затем 1 * 4, 2 * 4 ... Второй цикл для выхода, если у вектора 10 номеров, тогда, если N больше 10, перейдите в «цикл выхода» и распечатайте 0. – Michalistico
@MichaelDorgan Очевидно, что вы знакомы с x86 и аналогичными арки, но MIPS несколько отличается. Он не выполняет _cmp_ эквивалентную команду, отличную от 'slt'. Также нет кодов условий или регистра «флаги». Инструкция 'bne' в программе автономна и похожа на (например, x86)' cmp blah1, blah2; bne label "все в одном лице. И программа правильная [AFAICT]. См. Мой ответ ниже. –