不久前,我开始在 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