Skip to content

C语言如何编译成RISC-V机器码并运行? #7

Description

@zchliu

我用riscv64-unknown-linux-gnu-gcc -S qsort.c将.c文件转成汇编,然后导入到USTCRVSoC-tool进行转换,发现程序卡住不动了,是不是要对汇编的程序先做一些处理?

.c程序

#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);
    }
}

.s程序

	.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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions