Assembly 试图在汇编中编译函数

Assembly 试图在汇编中编译函数,assembly,compiler-errors,arm,Assembly,Compiler Errors,Arm,所以,我有一个问题: 编写一个汇编语言函数来计算前N个数字的和 介于0和N之间。N作为参数传递给函数。该函数将被称为 如下所示 Int sumoffirstn编号(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, [s

所以,我有一个问题: 编写一个汇编语言函数来计算前N个数字的和 介于0和N之间。N作为参数传递给函数。该函数将被称为 如下所示 Int sumoffirstn编号(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)只需要一对寄存器、计数器和累加器。如果你是向上计数而不是向下计数,那么就有一个限制。您是否在调试模式下(使用AArch64编译器)编译C,然后将其手动复制到ARM项目中?

您可能会告诉我们投诉的是哪一行。开始时间:错误:预期ARM寄存器--
str w0,[sp,12]'4>C:\Users\Alienware\Documents\SEGGER Embedded Studio for ARM Projects\Hw5\Hw5\u 824113076.S:23:错误:预期的ARM寄存器--
str wzr[sp,24]'4>C:\Users\Alienware\Documents\SEGGER Embedded Studio for ARM Projects\Hw5\Hw5\u824113076.S:25:错误:预期的ARM寄存器--
str wzr[sp,28]'4>C:\Users\Alienware\Documents\SEGGER Embedded Studio for ARM Project\Hw5\Hw5\U 824113076.S:29:错误:需要ARM寄存器--
ldr w1,[sp,28]'