我正在翻译伪代码
for(i=1; i<MAX; i++)
if(split[j] = 1)
for(j=i*3; j<MAX; j=j+i)
split[j]=0
进入ARM程序集。老实说,我不知道如何做到这一点,显示我的尝试是浪费时间。
答案 0 :(得分:-1)
我在代码中发现的一个错误是你在寄存器中存储零而不是它指向的地址。
ldr R2, [R1, R0]
mov R2, #0 ; This is wrong. You are zeroing a register and not the address to
; which it points to
这是带有注释的程序集的程序集等效项
for(i=1; i<MAX; i++)
for(j=i*3; j<MAX; j=j+i)
split[j]=0
ldr r0,=split
ldr r4, =MAX
xor r5,r5 ; this is the zero we shall store into split[j]
mov r2, #1 ; i
outer_loop cmp r2,r4 ; i<MAX
bge end_loop1
add r1, r2, r2, lsl #1 ; j=i*2+i
inner_loop cmp r1, r4 ; j<MAX
bge end_loop2
str r5,[r0], r1, lsl #2 ;split[j]=0
add r1,r1,r2 ; j=j+i
b inner_loop
end_loop2 add r2,r2,#1 ; i++
b outer_loop
end_loop1 end