【发布时间】:2021-11-09 11:12:52
【问题描述】:
我正在为 Linux 编写“Hello World”程序的已编译 AArch64 程序集文件。
我已经成功地将它从 504 字节缩短到 124 字节。我能想到的唯一更“优化”的就是找到一些在一条指令中执行两个或多个任务的指令。
目前文件中的机器码(以asm表示)是这样的:
mov x8, 64 // __NR_write
adr x1, hello //the string, I know the exact address
mov x2, 10 //string length (actually only "HelloWorld")
j:
mov x0, 0 // write to stdin happens to work
svc 0
mov x8, 93 // __NR_exit
b j //the branching saves me one instruction to exit with status = 0
这里有什么缩短的说明吗?
【问题讨论】:
-
这是针对 Linux 的,对吧?构建到 ELF 可执行文件中?您是否将此代码打包到 ELF 标头或其他内容中,例如 muppetlabs.com/~breadbox/software/tiny/teensy.html?
-
是的,有很多重叠和写入标题
-
如果您至少使用构建命令链接完整源代码,一些未来的读者可能会喜欢它。
-
好吧,我不是在构建它,我是从手动创建的 hexdump 将原始字节写入文件
-
这听起来不方便与使用
as构建它(来自包括一些.byte和.word指令的源)并使用objcopy将 .text 部分单独放入文件中。就像那个 x86 教程/文章是用 NASM 做的一样,它可以直接组装成一个平面二进制文件。
标签: assembly optimization arm64 code-size