gpt4 book ai didi

assembly - 尝试在汇编中编译功能

转载 作者:行者123 更新时间:2023-12-02 11:10:11 24 4
gpt4 key购买 nike

所以,我有这个问题:
编写汇编语言函数以计算前N个数字的总和
在0到N之间。N作为参数传递给函数。该函数将被称为
如下所示
Int sumofFirstNNumbers(int N)

为此,我创建了以下汇编代码:

sub sp, sp, #32

str w0, [sp, 12]

str wzr, [sp, 24]

str wzr, [sp, 28]

.L3:

ldr w1, [sp, 28]

ldr w0, [sp, 12]

cmp w1, w0

bgt .L2

ldr w1, [sp, 24]

ldr w0, [sp, 28]

add w0, w1, w0

str w0, [sp, 24]

ldr w0, [sp, 28]

add w0, w0, 1

str w0, [sp, 28]

b .L3

.L2:

ldr w0, [sp, 24]

add sp, sp, 32

ret

但是当我在Segger上运行该代码时,它始终显示此错误,
预期ARM寄存器
而且我不知道如何解决它。任何帮助,将不胜感激!!

最佳答案

您的代码是AArch64,而不是ARM(32位)。使用AArch64工具链而不是ARM进行构建。

或使用ARM寄存器(用r0代替w0等)。

还要注意,ARM没有体系结构的零寄存器,因此您需要使用mov指令而不是仅使用wzr创建一个清零寄存器。

或者更好的是,根本不使用内存。 sum(i = 1..n)仅需要几个寄存器,计数器和累加器。还有一个极限,如果您计数而不是计数。您是否以 Debug模式(使用AArch64编译器)编译C,然后将其手动复制到ARM项目中?

关于assembly - 尝试在汇编中编译功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58194707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com