#include <stdio.h>
#include <stdlib.h>
void QuickSort(int *lst, int start, int end);
int main()
{
int array[20] = {3,56,56,20,1,5,3,514,6,7,48,6,89,4,7,0,3,1,65,8};
QuickSort(array, 0, 19);
for (int i=0;i<20;i++)
{
printf("%d ",array[i]);
}
while(1);
return 0;
}
void QuickSort(int *lst, int start, int end)
{
if(end>start)
{
int i = start,j = end,key = lst[start];
while(i < j)
{
for (; i < j && key <= lst[j]; j--);
lst[i] = lst[j];
for (; i < j && key >= lst[i]; i++);
lst[j] = lst[i];
}
lst[i] = key;
QuickSort(lst, start, i - 1);
QuickSort(lst, i + 1, end);
}
}
.file "qsort.c"
.option nopic
.text
.section .rodata
.align 3
.LC1:
.string "%d "
.align 3
.LC0:
.word 3
.word 56
.word 56
.word 20
.word 1
.word 5
.word 3
.word 514
.word 6
.word 7
.word 48
.word 6
.word 89
.word 4
.word 7
.word 0
.word 3
.word 1
.word 65
.word 8
.text
.align 1
.globl main
.type main, @function
main:
addi sp,sp,-112
sd ra,104(sp)
sd s0,96(sp)
addi s0,sp,112
lui a5,%hi(.LC0)
addi a5,a5,%lo(.LC0)
ld t3,0(a5)
ld t1,8(a5)
ld a7,16(a5)
ld a6,24(a5)
ld a0,32(a5)
ld a1,40(a5)
ld a2,48(a5)
ld a3,56(a5)
ld a4,64(a5)
ld a5,72(a5)
sd t3,-104(s0)
sd t1,-96(s0)
sd a7,-88(s0)
sd a6,-80(s0)
sd a0,-72(s0)
sd a1,-64(s0)
sd a2,-56(s0)
sd a3,-48(s0)
sd a4,-40(s0)
sd a5,-32(s0)
addi a5,s0,-104
li a2,19
li a1,0
mv a0,a5
call QuickSort
sw zero,-20(s0)
j .L2
.L3:
lw a5,-20(s0)
slli a5,a5,2
addi a4,s0,-16
add a5,a4,a5
lw a5,-88(a5)
mv a1,a5
lui a5,%hi(.LC1)
addi a0,a5,%lo(.LC1)
call printf
lw a5,-20(s0)
addiw a5,a5,1
sw a5,-20(s0)
.L2:
lw a5,-20(s0)
sext.w a4,a5
li a5,19
ble a4,a5,.L3
.L4:
j .L4
.size main, .-main
.align 1
.globl QuickSort
.type QuickSort, @function
QuickSort:
addi sp,sp,-48
sd ra,40(sp)
sd s0,32(sp)
addi s0,sp,48
sd a0,-40(s0)
mv a5,a1
mv a4,a2
sw a5,-44(s0)
mv a5,a4
sw a5,-48(s0)
lw a4,-48(s0)
lw a5,-44(s0)
sext.w a4,a4
sext.w a5,a5
ble a4,a5,.L15
lw a5,-44(s0)
sw a5,-20(s0)
lw a5,-48(s0)
sw a5,-24(s0)
lw a5,-44(s0)
slli a5,a5,2
ld a4,-40(s0)
add a5,a4,a5
lw a5,0(a5)
sw a5,-28(s0)
j .L7
.L10:
lw a5,-24(s0)
addiw a5,a5,-1
sw a5,-24(s0)
.L8:
lw a4,-20(s0)
lw a5,-24(s0)
sext.w a4,a4
sext.w a5,a5
bge a4,a5,.L9
lw a5,-24(s0)
slli a5,a5,2
ld a4,-40(s0)
add a5,a4,a5
lw a4,0(a5)
lw a5,-28(s0)
sext.w a5,a5
ble a5,a4,.L10
.L9:
lw a5,-24(s0)
slli a5,a5,2
ld a4,-40(s0)
add a4,a4,a5
lw a5,-20(s0)
slli a5,a5,2
ld a3,-40(s0)
add a5,a3,a5
lw a4,0(a4)
sw a4,0(a5)
j .L11
.L13:
lw a5,-20(s0)
addiw a5,a5,1
sw a5,-20(s0)
.L11:
lw a4,-20(s0)
lw a5,-24(s0)
sext.w a4,a4
sext.w a5,a5
bge a4,a5,.L12
lw a5,-20(s0)
slli a5,a5,2
ld a4,-40(s0)
add a5,a4,a5
lw a4,0(a5)
lw a5,-28(s0)
sext.w a5,a5
bge a5,a4,.L13
.L12:
lw a5,-20(s0)
slli a5,a5,2
ld a4,-40(s0)
add a4,a4,a5
lw a5,-24(s0)
slli a5,a5,2
ld a3,-40(s0)
add a5,a3,a5
lw a4,0(a4)
sw a4,0(a5)
.L7:
lw a4,-20(s0)
lw a5,-24(s0)
sext.w a4,a4
sext.w a5,a5
blt a4,a5,.L8
lw a5,-20(s0)
slli a5,a5,2
ld a4,-40(s0)
add a5,a4,a5
lw a4,-28(s0)
sw a4,0(a5)
lw a5,-20(s0)
addiw a5,a5,-1
sext.w a4,a5
lw a5,-44(s0)
mv a2,a4
mv a1,a5
ld a0,-40(s0)
call QuickSort
lw a5,-20(s0)
addiw a5,a5,1
sext.w a5,a5
lw a4,-48(s0)
mv a2,a4
mv a1,a5
ld a0,-40(s0)
call QuickSort
.L15:
nop
ld ra,40(sp)
ld s0,32(sp)
addi sp,sp,48
jr ra
.size QuickSort, .-QuickSort
.ident "GCC: (gca312387ab1) 10.2.0"
.section .note.GNU-stack,"",@progbits
我用
riscv64-unknown-linux-gnu-gcc -S qsort.c将.c文件转成汇编,然后导入到USTCRVSoC-tool进行转换,发现程序卡住不动了,是不是要对汇编的程序先做一些处理?.c程序
.s程序