【问题标题】:Mips selection sort not working correctly?Mips 选择排序无法正常工作?
【发布时间】:2013-11-22 03:57:32
【问题描述】:

我已经研究了很长时间,但我无法弄清楚什么工作不正常。基本上我需要做的是获取一个整数数组,并使用选择排序对它们进行排序,我已经完成了这是 java 和 c,所以我知道它是如何工作的,但是汇编只是无法正常工作。

这是我在汇编中的代码:

    li $t0, 0  #$t0 is used as i
    addi $t1, $t0, 1
    li $t2, 0   #t2 is used as j
    sll $t5, $t1, 2

ILoop:

    JLoop:
        lw $t3, array($t2)
        lw $t4, array($t5)
        ble $t3, $t4, Jelse
        sw $t3, temp
        sw $t4, array($t2)
        lw $t4, temp
        sw $t4, array($t5)

    Jelse:
        addi $t1, $t1, 1
        sll $t5, $t1, 2
        blt $t1, 4, JLoop

Ielse:          
    addi $t0, $t0, 1
    sll $t2, $t0, 2
    blt $t0, 3, ILoop

输出示例:

排序前的数组:

25 17 31 13 2

排序后的数组:

13 2 0 17 25

我错过了什么?或者我放错了什么请帮忙!谢谢!

【问题讨论】:

    标签: sorting assembly selection mips


    【解决方案1】:

    它可能就像循环不够远一样简单(你的内循环循环 j<len-1,而外循环循环 i<len-2)。您可能可以通过单步执行 SPIM 中的代码来找到答案。
    这是一个工作实现供您参考:

    # Sorts in ascending order
    
        li $t0, 0               #$t0 is used as i
    
    ILoop:
        sll $t2,$t0,2           # pos = i (scaled for word elements)
        addiu $t5,$t2,4         # j = i+1 (scaled for word elements)
    
    JLoop:
        lw $t3, array($t2)      # array[pos]
        lw $t4, array($t5)      # array[j]
        ble $t3, $t4, JElse
        move $t2,$t5            # pos = j
    JElse:
        addiu $t5,$t5,4
        blt $t5,20,JLoop        # 20 = array_length * sizeof(word)
    
        # if (pos != i) swap(array[pos], array[i])
        sll $t1,$t0,2
        beq $t2,$t1,SkipSwap    # skip if pos==i
        lw $t3, array($t2)      # $t3 = array[pos]
        lw $t4, array($t1)      # $t4 = array[i]
        sw $t4, array($t2)      # array[pos] = array[i]      
        sw $t3, array($t1)      # array[i] = array[pos]     
    SkipSwap:
    
        addi $t0, $t0, 1
        blt $t0, 4, ILoop       # run ILoop while i<array_length-1
    

    【讨论】:

    • 您的意思是选择排序吗?它假设是选择排序..哈哈
    • 哎呀,一定是早上太早了。我已经更新了我的答案。
    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 2020-12-14
    • 2014-10-31
    • 2017-04-07
    • 2012-03-29
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多