アセンブラの操作方法

ARM アセンブラは、アセンブリ言語のソースコードからオブジェクトコードを出力する第 2 パスアセンブラです。これは、ソースコードを 2 回読み取るという意味です。ソースコードの各読み取りは、パスと呼ばれます。

これは、アセンブリ言語のソースコードにはよく前方参照が含まれているためです。前方参照は、ラベルが分岐ターゲットなど、コード内でラベの定義より前にオペランドとして使用される場合に発生します。アセンブラは、ラベルの定義を読み取るまで前方参照ラベルのアドレスを知るとができません。アセンブラはそれぞれのパスでさまざまな機能を実行します。

最初のパスでは、次のことを実行します。

2 つ目のパスでは、次のことを実行します。

ラベルのメモリアドレスは最初のパスで決定されて最終化されます。つまり、アセンブリコードは 2 つ目のパスで変更する必要はありません。すての命令は両方のパスで表示されなければなりません。したがって、:DEF:の後は、シンボルを定義しないでください。シンボル用テストパス 1 にはなかったコードがパス 2 にある場合、アセンブラはエラーになります。Example 1 から、num EQU 42 がパス 1 にはなくパス 2 にあることがわかります。

Example 1. 行はパス 1 にありません。

    AREA x,CODE
    [ :DEF:foo
num EQU 42
    ] 
foo DCD num
    END

Example 1 のコードをアセンブルすると、次のエラーが発生します。

A1903E:最初のパスに行がありません。アセンブルできません

Example 2から、MOV r1,r2 がパス 2 にはなくパス 1 にあることがわかります。

Example 2. 行はパス 2 にありません。

    AREA x,CODE
    [ :LNOT::DEF:foo
    MOV r1, r2
    ] 
foo MOV r3, r4
    END

Example 2 のコードをアセンブルすると、次のエラーが発生します。

A1909E:第 2 パスに行がありません。アセンブルできません

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0473FJ
Non-ConfidentialID111311