0

疑似コードを翻訳しています

for(i=1; i<MAX; i++)
    if(split[j] = 1)
        for(j=i*3; j<MAX; j=j+i)
            split[j]=0

ARMアセンブリに。正直なところ、これを行う方法がわかりません。私の試みを示すのは時間の無駄です。

4

1 に答える 1

-1

あなたのコードで見つけた間違いの 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
于 2012-04-18T10:28:26.580 に答える