【问题标题】:RAM store binary numbers and bubble sort in assembly languageRAM存储二进制数和汇编语言冒泡排序
【发布时间】:2019-11-23 20:23:58
【问题描述】:

我必须使用 ARM v7 执行一个例程,将 10 个二进制数存储在 RAM 内存中,然后使用冒泡排序将这些数字从高到低排序,我应该如何开始?

【问题讨论】:

  • 我应该从哪里开始?注册文件?亚太经合组织?堆栈推送和弹出?循环构造?
  • 这甚至不是一个问题,它只是一个陈述。如果您添加了“告诉我如何”,那就太宽泛了。 How do I ask and answer homework questions?
  • “我应该如何开始”也好不到哪里去。我们不知道您知道/不知道多少,所以我们只能说用 C 编写并调试算法,然后在 asm 中实现它。如果您尝试在使用调试器(如 GDB)进行调试时提供minimal reproducible example,那么这可能是一个调试问题。
  • @PeterCordes 请您投票支持重新开放吗?我刚刚写了一个优化的例程,这会让他的教授发疯。你不好奇吗? :-)
  • @Jake'Alquimista'LEE:当然,如果你想在这里发帖。我发现的其他 ARM BubbleSort Q&As 是调试问题,所以这可能是最好的地方。

标签: assembly binary arm bubble-sort armv7


【解决方案1】:
.func
bubbleSortAscendingU32:
    ldr     r3, [r0], #4
    mov     r1, #9*4
    mov     r12, #9*4
1:
    ldr     r2, [r0], #4
    cmp     r2, r3
    strdlo  r2, r3, [r0, #-8]
    movhi   r3, r2
    subs    r12, r12, #4
    bgt     1b

    sub     r0, r0, r1
    subs    r1, r1, #4
    ldrgt   r3, [r0, #-4]
    movgt   r12, r1
    bgt     1b

    bx      lr
.endfunc

假设我们正在处理一个uint32_t 的数组,上面的方法可能有效。

strdlomovhi 都必须替换为其他类型:

无符号降序: strdhimovlo

有符号升序: strdltmovgt

签名降序: strdgtmovlt

函数原型:

void bubbleSortAscendingU32(uint32_t *pSrc);

void bubbleSortDescendingU32(uint32_t *pSrc);

void bubbleSortAscendingS32(int32_t *pSrc);

void bubbleSortDescendingS32(int32_t *pSrc);


  • 不要问我细节。我得写半本书来解释。逐步按照说明进行操作,直到您最终了解流程。
  • 您的教授很可能需要相当长的时间才能理解上述例程。
  • 我怀疑他会相信你自己写的。诚实。

【讨论】:

  • 整洁。预测商店很有趣。 codegolf.SE 上的Sort an Integer List 有几个针对代码大小进行了优化的 x86 asm 版本,并带有诸如内存目标旋转到交换之类的邪恶技巧。 (其中一个是 JumpDown 排序,一种介于选择和冒泡排序之间的交叉。)Bubble Sort: An Archaeological Algorithmic Analysis 也是一本很好的读物,了解为什么 BubbleSort 会流行起来,尽管它通常很慢。
猜你喜欢
  • 1970-01-01
  • 2021-03-16
  • 2015-08-06
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 2016-07-03
  • 2020-08-23
  • 2023-03-13
相关资源
最近更新 更多