Skip to main content

IAR Embedded Workbench for Arm 9.70.x

Arm用IARアセンブラへの移行

このセクションの内容:

ほかのベンダーのアセンブラ用に書かれたアセンブラソースコードは、IAR アセンブラfor Arm にも使用できます。 アセンブラオプションの-j を指定すると、別のさまざまなレジスタ名、ニーモニック、および演算子を使用できるようになります。

以下のページには、他の製品から32 ビットモードのIAR アセンブラfor Armへの移行に役立つ情報が記載されています。

概要

IARアセンブラfor Arm (IASMARM) は、その他のIARアセンブラと同じルック アンド フィールを使用して設計されていますが、Arm LimitedのARMASMアセンブラ用に書かれたソースコードを変換しやすくします。

オプション-j(代替のレジスタ名、ニーモニック、およびオペランドを許可)が選択されていると、IASMARMの命令の構文はARMASMと同一になります。ただしディレクティブやマクロなど多数の機能には互換性がなく、構文エラーを引き起こします。またThumbコードのラベルにも違いがあり、エラーや警告を生成しない障害が発生することがあります。ジャンプラベル以外の状況でこのようなラベルを使用するときには、特に慎重に行ってください。

新しいコードに関して Arm用IARアセンブラのレジスタ名、ニーモニック、および演算子を使用してください。

注記

この章にある手順や説明は、 32 ビットモードのIAR アセンブラ forArmにのみ適用されます。

Thumbコードのラベル

Thumb コード中に配置されたラベル、すなわちCODE16ディレクティブの後にあらわれるものには、常にIASMARM 内でbit 0 が1 にセットされます(つまり奇数ラベル)。これに比べARMASM では、アセンブリ時に解決される式中のシンボルにはbit 0 は1 にセットされません。次の例では、シンボルTはローカルであり、Thumbコード内に配置されます。これには、IASMARMによってアセンブルされるときにbit 0が1にセットされますが、ARMASMによってアセンブルされるときには1にセットされません —ただしDCDについては再配置可能セクションがリンク時に解決されるため例外です)。したがってアセンブルされた結果の命令も異なります。

            section MYCODE:CODE(2)
            arm

以下の2つの命令は、ARMASMとIASMARMとでは解釈が異なります。ICCARMはTへの参照を奇数アドレス(Thumbモードビット設定済み)として解釈しますが、ARMASMでは偶数です(Thumbモードビットは設定されません)。

            adr     r0,T+1
            mov     r1,#T-.

ARMASMとICCARMで解釈を同じにするには、:OR:を使用してThumbモードビットを設定するか、:AND:を使用してそれを消去します。

            add     r0,pc,#(T-.-8) :OR: 1
            mov     r1,#(T-.) :AND: ~1

            thumb
T           nop
            end