【发布时间】:2022-12-09 20:22:23
【问题描述】:
我正在尝试编译一个包含多个 c 文件和一个用 ARMv8 编写的汇编文件的项目,这是我以前没有做过的,所以我在理解我收到的一些错误消息时遇到了一些麻烦。
对于几乎每一行,我始终收到“未知助记符”错误。例如,对于下面的 sn-p 代码,
100 ## Save oSum to the stack.
101 pushq %rdx
102
103 ## unsigned long ulCarry
104 subq $8, %rsp
105
106 ## unsigned long ulSum
107 subq $8, %rsp
108
109 ## long lIndex
110 subq $8, %rsp
111
112 ## long lSumLength
113 subq $8, %rsp
我收到以下消息,
file.s:101: Error: unknown mnemonic `pushq' -- `pushq %rdx'
file.s:104: Error: unknown mnemonic `subq' -- `subq $8,%rsp'
file.s:107: Error: unknown mnemonic `subq' -- `subq $8,%rsp'
file.s:110: Error: unknown mnemonic `subq' -- `subq $8,%rsp'
file.s:113: Error: unknown mnemonic `subq' -- `subq $8,%rsp'
我在这里做错了什么?我怎样才能解决这个问题?
非常感谢您的帮助。
【问题讨论】:
-
我不是汇编专家(尤其是 ARM),但对我来说它们看起来不像 ARM 指令。它们看起来更像是 x86-x64 代码。
-
您将无法为 armv8 汇编此代码,因为它是为 amd64 编写的。您将不得不从头开始重写它,或者找到一种不使用该文件来编译项目的方法。
-
那个手写的 asm 适用于 x86-64(又名 AMD64),而不是 AArch64。顺便说一句,它的效率低得离谱。一个
subq $32, %rsp在一条指令中具有相同的效果,为多个局部变量保留空间。如果 asm 的其余部分编写得如此低效,那么使用优化编译器编译的纯 C 回退实现可能会更好(如果项目有的话)。
标签: c assembly arm project armv8