1

B arm926ejs_reset_handlerラベルにジャンプarm926ejs_reset_handler:してその間のコードを無視する分岐命令を理解するのに問題があります。なぜ誰かがこれをするのだろうか?

そして、いくつかの追加の説明。ラベル__start:はプログラムのエントリポイントです。分岐命令が無視する行は、起動時に起動ISROMが取得するはずだったパラメータです。しかし、これらのパラメータを飛び越えた場合、どのようにしてISROMを起動してこれらのパラメータを取得できますか?それは私には論理を作りません。

__start:
arm926ejs_reset:
B     arm926ejs_reset_handler

    .word   0x41676d69
    .word   0,0,0,0,0
image_type:
    .word   0x0000000A
sizeOfPermanentCode:    
    .word   (__image_size)
    .word   0,0
bootparameter:  
    .word   0
    .word   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

arm926ejs_reset_handler:
4

2 に答える 2

3

データとコードには違いがあります。コードには実行される命令が含まれていますが、データはコードによって使用されます。基本的な違いは、データ(通常)を実行できないことです。

したがって、最初の部屋はデータのストレージスペースとして使用されるため、コードはデータを飛び越える必要があります。そうしないと、データがコードとして解釈され、不正な命令やクラッシュが発生する可能性があります。

もちろん、コードが現在のプログラムカウンターの前(ジャンプ後)にある場合、コードはデータにアクセスできます。コードの観点からは、データがコードの前にあるか後にあるかは関係ありません。

于 2012-03-02T09:55:57.610 に答える
2

一部のデータ__startを分岐しているだけです。コードは、ベースアドレスを使用して、またはベースアドレスとして、インデックス付きアドレス指定を介してこのデータを取得できarm926ejs_resetます。

于 2012-03-02T09:40:47.327 に答える