在 ARM 汇编中实现简单的排序算法(第 1 部分)

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

不久前,我开始在 Raspberry Pi 上 学习一些 ARM 汇编 (出于好奇,没有其他更好的理由)。我认为将其与同时重新学习一些基本/标准/通用算法结合起来会很有趣,例如 通用排序算法

因此,作为我的第一步,由于事实证明这比我预期的要多得多(!),这是我到目前为止的 ARM ASM 源代码,用于遍历 4 字节整数值的列表并使用 C 的 printf 将值打印到控制台.随着我的进步,我会发布进一步的更新:


 .global main
main:
  push {ip, lr}
  MOV R6, #0 @offset to data
loop:
  LDR R0, =output @load addr of output string
  LDR R5, =nums @ addr of string to R5
  LDR R4,[R5,R6] @load current num from R5 with offset R6
  MOV R1,R4 @move num for output
  BL printf
  CMP R6,#16 @ 0 plus 4*4bytes for 5 entries in array
  ADD R6,R6, #4 @inc offset by 4 bytes
  BNE loop
_exit:
  POP {ip, lr}
  MOV R1, #0
  MOV R7, #1
  SWI 0
nums:
.word 5,2,7,1,8
.data
output:
.asciz "%d\n"

到目前为止,我确信有更好的方法可以处理这个有限的代码,但我稍后会回来重新讨论这个问题。如果有人想拉取或浏览到目前为止的源代码(和其他片段),它在 GitHub 上:https: //github.com/kevinhooke/learning-arm-asm

相关文章