Как мне преобразовать этот java-код для сортировки целых чисел в MIPS?

#java #arrays #sorting #assembly #mips

#java #массивы #сортировка #сборка #mips

Вопрос:

Мне просто нужна помощь в том, чтобы разобраться, что с чем переводится.

 public static void insert(int val,int[] arr){
int i;

  for(i=0;i<arr.length-1;i  ){
    if(arr[i]>val)
    break;
  }

  for(int k=arr.length-2; k>=i; k--){
    arr[k 1]=arr[k];
  }

  arr[i] = val;

}
  

РЕДАКТИРОВАТЬ: Вот предыдущий код, он запрашивает количество целых чисел для ввода, и я сохраняю каждый ввод в массив.

 .data
array:          .space 20 #5 integers for example
size:           .asciiz "Enter the number of integers you want to enter: "
prompt:         .asciiz "Please enter an integer: "

.text
.globl main


main:   # program entry
la $t0, array
lw $t0, 0($t0) 

la $a0, size        #print out the prompt 
li $v0, 4
syscall

li $v0, 5       #get the input
syscall


la $t0, array   #load array into t0; t0 is lowerbound of array = iterator
move $t1, $v0       #move n into t1
sll $t1, $t1, 2     #create offset
addu $t1, $t0, $t1  #st1 = upperbound of array
loop:
slt $t2, $t0, $t1   #if $t0 < $t1(size) 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 $s0, $v0
sw $s0, 0($t0)

jal SORT        #call function sort
add $t0, $t0, 4     #increment by 1
j loop
  

Эта функция предназначена для упорядочивания целых чисел по одному при каждом получении входных данных (не после того, как все входные данные известны). У меня есть собственное преобразование в mips ниже. Я протестировал это, и это не работает.

предположим, что var равен $ s0

 SORT:
loop1:
li $t2, 0       # t= 0
add $t3, $t1, $0    #send my upperbound array to t3

slt $t8, $t2, $t3,  # i < array.length(upperbound),
beq $t8, $0, loop2  #if fails, go to loop 2
add $t2, $t2, 1     #increment 
j loop1

loop2:
sub $t5, $t3, 4
sw $t4, 0($t5)      # k = array.length-1
sge $t7, $t4, $t2   # k <= i
beq $t7, $0, end    #if fails, exit loop
sw $t6, 0($t4)      #array[k 1] = array[k]
sub $t4, $t4, 4     #decrement
j loop2

end:
sw $s0, 0($t1)      #arr[i] = val
jr $ra          #return
  

Комментарии:

1. Не могли бы вы немного конкретнее рассказать о ТОМ, КАК это не работает?

2. Предполагается, что программа @ScottHunter получит, сколько целых чисел введено. Программа останавливается после получения первого целого числа. Итак, я думаю, что в моей функции сортировки что-то не так, что останавливает ее

3. В этой ситуации вы должны сначала найти ошибку. Почему бы не запустить код с помощью отладчика вашей IDE и выяснить, что не работает?

4. Каково значение $ t1 перед циклом? И почему ваше slt сравнение между $ t2 (i) и $ t1 (val?) вместо arr[i] and val как в оригинальном алгоритме? Почему вы заменяете свой счетчик циклов в $t2 на результат slt ?

5. @HovercraftFullOfEels Извините, я имел в виду, что код просто продолжает выполняться. Так что это проблема, ожидающая чего-то. Ошибка не отображается.