PLP工具冒泡排序

时间:2015-11-27 17:43:37

标签: assembly mips

我有以下代码:sorting array in mips (assembly)

我正在尝试将它从MIPS语言转换为PLP(我知道它们都是汇编语言),la指令正在让我失望。对于PLP工具,MIPS la的等价物是什么?

代码是:

main:
    la  $t0, Array      # Copy the base address of your array into $t1
    add $t0, $t0, 40    # 4 bytes per int * 10 ints = 40 bytes 

outterLoop:             # Used to determine when we are done iterating over the Array
    add $t1, $0, $0     # $t1 holds a flag to determine when the list is sorted
    la  $a0, Array      # Set $a0 to the base address of the Array

innerLoop:                  # The inner loop will iterate over the Array checking if a swap is needed
    lw  $t2, 0($a0)         # sets $t0 to the current element in array
    lw  $t3, 4($a0)         # sets $t1 to the next element in array
    slt $t5, $t2, $t3       # $t5 = 1 if $t0 < $t1
    beq $t5, $0, continue   # if $t5 = 1, then swap them
    add $t1, $0, 1          # if we need to swap, we need to check the list again
    sw  $t2, 4($a0)         # store the greater numbers contents in the higher position in array (swap)
    sw  $t3, 0($a0)         # store the lesser numbers contents in the lower position in array (swap)

continue:
    addi $a0, $a0, 4            # advance the array to start at the next location from last time
    bne  $a0, $t0, innerLoop    # If $a0 != the end of Array, jump back to innerLoop
    bne  $t1, $0, outterLoop    # $t1 = 1, another pass is needed, jump back to outterLoop

1 个答案:

答案 0 :(得分:0)

documentation表示您可以使用diagnose指令:

li是一个伪指令,扩展为:

li $rd, label

这会将lui $rd, (label & 0xff00) >> 16 ori $rd, label & 0x00ff 的地址加载到寄存器label以用作指针。