Assembly 试图在汇编中编译函数
所以,我有一个问题: 编写一个汇编语言函数来计算前N个数字的和 介于0和N之间。N作为参数传递给函数。该函数将被称为 如下所示 Int sumoffirstn编号(Int N) 为此,我创建了以下汇编代码: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
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]'