Я хочу сортировать целые числа из входных данных каждый раз, когда они даются, вместо сортировки после того, как все целые числа известны.
Я уже пытался реализовать обычные методы сортировки, но они работают только после того, как заданы все целые числа.У меня проблемы с этим после каждого ввода.Ниже приведен код, помогающий разобраться в проблеме.
.data
array: .space 160 #up to 40 integers max for example
array_size: .word 160
size: "Enter the number of signed integers you want to enter: "
prompt: "Please enter an integer: "
.align 2 #align next data by word
.text
.globl main
main: # program entry
la $t0, array
la $a0, size #print out the prompt
li $v0, 4
syscall
li $v0, 5 #get the input
syscall
move $s1, $v0 #move the input(size) to a saved register ($s1)
sub $s1, $s1, 1 #subtract 1 from size to fit into the array
loop:
slt $t2, $t0, $s1 #if $t0 < $s1 then = 1, else = 0 ; 0 < size
beq $t2, $0, endloop #if 0, end the loop
la $a0, prompt #print out the prompt
li $v0, 4
syscall
li $v0, 5 #get the input
syscall
move $a1, $v0 #move the input to argument register ($a1)
jal SORT #call the function SORT
j loop
endloop:
li $v0, 10 # terminate the program
syscall
SORT:
lw $t0, 0($t0) #load address at array[0] (start address at array[0])
sle $v1, $t0, $a1 #$t0 <= $a1; true = 1, fail = 0
beq $v1, $0, swap
beq $v1, 1, loopRight #if true, you will move to the next
Я уже получил представление о том, как я хочу, чтобы это произошло.Я не уверен, как перевести это на язык ассемблера.При каждом вводе я хочу, чтобы программа сравнивала первую позицию массива и меняла местами, если ее меньше, чем, если нет, она будет перемещаться на следующую позицию массива.Ожидаемый вывод в конце - отсортированный массив в порядке возрастания, но я не могу использовать функцию сортировки после того, как все целые числа перечислены.Моя функция должна быть в цикле вызова для ввода.