Это должно сделать работу:
.globl main
.data
array: .space 2000
prompt: .asciiz "Enter the number of integers you would like to input: "
input: .asciiz "Enter an intger: "
Max: .asciiz "Maxiumum Value is: "
.text
main:
#Loading array into $t5
la $t5, array
li $s0, 0
li $v0, 4
la $a0, prompt
syscall
li $v0, 5
syscall
move $s1, $v0
Loop:
#Asking the user for input
li $v0, 4
la $a0, input
syscall
#Storing user input in array address in $t5
li $v0, 5
syscall
sw $v0, 0($t5)
#Counting iterations for the loop as well as the array address
addi $s0, $s0, 1
addi $t5, $t5, 4
#Loop Exit
beq $s0, $s1, Maximum
j Loop
Maximum:
la $t5, array # load the array start address
lw $t2, 0($t5) # max = first element
li $s0, 0 # i = 0
Max_loop:
lw $t3, 0($t5) # temp = actual array element
slt $t4, $t2, $t3 # max < temp ?
bne $t4, 1, Else # jump to else branch if it condition is false
move $t2, $t3 # condition was true let max = temp
Else:
addi $s0, $s0, 1 # i++
addi $t5, $t5, 4 # array += 4
beq $s0, $s1, Exit # i < num
j Max_loop
Exit:
li $v0, 10
syscall
Кажется, что все работает правильно с симулятором MARS 4.5 MIPS. Результат в $t2
на выходе. Вы можете легко добавить код для печати его значения, если хотите.
slt $t1, $t2, $t3
в основном сделает это в C подобном коде:
if ($t2 < $t3)
$t1 = 1
else
$t1 = 0
Итак, основываясь на нем, вы может добиться условного ветвления с использованием этого результата.
Обратите внимание, что приведенный мною код необязательно является оптимальным и может быть проблематичным c, если пользовательский ввод меньше 1
, но это все равно следует проверить на этапе ввода .