【问题标题】:embedding ARM assembly in C language用 C 语言嵌入 ARM 程序集
【发布时间】:2017-04-01 17:15:11
【问题描述】:

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

参考 1.https://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Quicksort#ARM_Assembly 2.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(非英文网站见谅)

我是组装新手。 请帮帮我..

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

【问题讨论】:

  • 请阅读document 我猜你需要使用寄存器 r0 到 r3 来存储函数参数。查看第 5.5 节
  • 这个link 可能会有所帮助。
  • 为什么不能使用-O0以外的优化级别?
  • 这个练习有什么意义?
  • @fuz 我想这是为了学习如何在不使用编译器优化的情况下编写大小优化的代码。

标签: c assembly arm


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 2011-09-26
  • 1970-01-01
  • 2010-10-02
  • 2010-11-15
  • 2016-12-30
  • 2022-01-06
相关资源
最近更新 更多