-6

ここ数日、ここの何人かの助けを借りてソフトウェアを作成してきましたが、コードは完成しましたが、想定どおりに動作しないため、エラーが発生しているようです。

コードは次のとおりです。

            add r3,#1
            b .loop_ini

        .add_row:
            add r2,#1
            mov r3,#0
            b .loop_ini



            LDR r2,=0x0019660D
            umull r4,r5,r1,r2   @;RLo,RHi,N,M; r5 contains 32low bits from 
        .while_end:
            mov r0,r2           @;Movemos el resultado del modulo a r0
            pop {r1-r2,pc}          @;restores modified registers and returns

.end

誰かがエラーを見つけますか? ランダムな値をマトリックスに挿入するときにエラーが発生する可能性があると思いますが、確かにはわかりません。

ありがとう

4

1 に答える 1

1

さて、コードの意図された機能について多くの情報を提供していないので、推測する必要がありますが、最初に私の目を引くのは次のとおりです。

str r6, [r0]

コードに従うことができる限り、r0 はランダムな値であると想定され、r6 は保存先のアドレスである必要があります。

strr0 がアドレスとして使用され、r6 が格納される値として使用されるようになったため、 でこれら 2 つを交換する必要があります。

strbまた、代わりにを使用する必要がありstrます。少なくとも、完全な 32 ビット ワードではなく、バイトで作業したいようです。

私はそれ以上調べませんでした。もっと問題があるかもしれません。一般に、コードは ARM アセンブリの経験がある人によって書かれたものではないようで、最適化の余地がたくさんあります。TBH、アセンブリを使用する正当な理由がない限り、C または別の高級言語への切り替えを検討する必要があります。適切なコンパイラは、頭を悩ませることなく、より優れたコードを生成します。

于 2013-10-04T07:06:52.110 に答える