用于在数组中执行交换的函数

时间:2018-01-05 19:05:59

标签: mips swap cpu-architecture qtspim

该计划的基本流程如下: 1.打印数组的原始内容。 2.询问用户X和Y两个指数。 3.如果Array [X]>交换两个元素。阵列[Y]。 4.仅在发生交换时打印修改后的阵列。

.data  
array: .word 8, 2, 1, 6, 9, 7, 3, 5, 0, 4 
newl: .asciiz "\n" 
      .text 
la $a0, array
li $a1, 10
jal printArray
 #Ask the user for two indices 
 li   $v0, 5           #System call code for read_int
 syscall            
 addi $t0, $v0, 0      # first user input in $t0 
 li   $v0, 5           #System call code for read_int 
 syscall            
 addi $t1, $v0, 0      # second user input in $t1 

swap   :   li $a1, 0            #inx1
           li $a2, 0            #inx2
           sll $t0, $a1, 2      # $t0 = inx1* 4
           add $t0, $t0, $a0    # $t0 is the address of  A[$a1]
           sll $t3, $a2, 2      # $t3 = inx2* 4
           add $t3, $t3, $a0    # $t3 is the address of A[$a2]
           lw $t1, 0($t0)       # $t1 = A[$a1]
           lw $t2, 0($t3)       # $t2 = A[$a2]
           ble $t1, $t2, noPrint# if A[$a1] <=A[$a2] goto noPrint
           sw $t1, 0($t3)       # do the swap   
           sw $t2, 0($t0)       # do the swap
           syscall
           jal printArray

printArray: 
  addi $t1, $a0, 0        #$t1 is the pointer to the item 
  sll  $t2, $a1, 2        #$t2 is the offset beyond the last item 
  add  $t2, $a0, $t2      #$t2 is pointing beyond the last item 
loop: beq  $t1, $t2, end 
         lw   $t3, 0($t1)          #$t3 is the current item 
         li   $v0, 1               # system call code for print_int 
         addi $a0, $t3, 0          # integer to print 
         syscall                   # print it 
         addi $t1, $t1, 4 
         j loop                    # Another iteration 
end: 
  li   $v0, 4                 # system call code for print_string 
  la   $a0, newl              #  
  syscall                     # print newline 
   jr $ra                     # return from this function 
noPrint: 
  li   $v0, 10                # system call code for exit 
  syscall                     # terminate program 

我遇到交换功能问题。它不会在控制台窗口上打印任何内容(使用QtSpim)。你能推荐一下这个建议吗?

0 个答案:

没有答案