gpt4 book ai didi

c - C语言嵌入ARM汇编

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:25 26 4
gpt4 key购买 nike

我的目标是用C语言实现排序算法。我必须制作一个 C 代码,在 ARM 机器中通过 gcc -O0(无优化选项)编译时转换为最少数量的指令。所以,我的想法是将汇编中实现的快速排序直接嵌入到 C 代码中。我引用了以下几个文件并试图实现我的目标。但是,我不知道如何将 intarray 作为参数放入我的汇编函数“QuickSort”中。

引用资料1. https://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Quicksort#ARM_Assembly2. http://forum.falinux.com/zbxe/index.php?mid=lecture_tip&comment_srl=517498&sort_index=readed_count&order_type=asc&l=fr&page=58&document_srl=567970 (抱歉非英文网站)

我是 assembly 新手。请帮助我..

#include <stdio.h>
#include <stdint.h>
int Quicksort(uint32_t intarray[]);

asm(
".global Quicksort\n\
Quicksort:\n\
qsort:\n\
stmfd sp!,{r4, r6, lr} \n\
mov r6,r2 \n\
qsort_tailcall_entry:\n\
sub r7,r6,r1\n\
cmp r7,#1\n\
ldmlefd sp!,{r4,r6,pc}\n\
ldr r7,[r0,r1,asl#2]\n\
add r2,r1,#1\n\
mov r4,r6\n\
partition_loop:\n\
ldr r3,[r0, r2, asl #2]\n\
cmp r3,r7\n\
addle r2,r2, #1\n\
ble partition_test\n\
sub r4,r4, #1\n\
ldr r5,[r0, r4, asl #2]\n\
str r5,[r0, r2, asl #2]\n\
str r3,[r0, r4, asl #2]\n\
partition_test:\n\
cmp r2,r4\n\
blt partition_loop\n\
partition_finish:\n\
sub r2,r2,#1\n\
ldr r3,[r0,r2,asl #2]\n\
str r3,[r0,r1,asl #2]\n\
str r7,[r0,r2,asl #2]\n\
bl qsort\n\
mov r1,r4\n\
b qsort_tailcall_entry\n\
"
);


int main(void){
uint32_t intarray[10] = {5,2,5,1,7,5,7,2,3,8};
Quicksort(intarray);
return 0;
}

最佳答案

由于您提到您正在使用 gcc 进行编译,因此您可以使用 gcc asm 扩展(顾名思义,它是一个 gcc 扩展,可能与其他编译器不兼容)。看看basic asmextended asm .由于您可能会从 C 代码访问数据,我建议您坚持使用允许您指定内存操作数的高级版本。

关于c - C语言嵌入ARM汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43159797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com