レジスタ相対式と PC 相対式

armasm は、PC 相対式とレジスタ相対式をサポートします。

レジスタ相対式は、数値式と組み合わせた名前付きレジスタに評価されます。

PC 相対式は、ソースコード内では、オプションで数値式と組み合わせたラベルまたは PC として記述されます。また、[PC, #number] という形式で記述することもできます。

ラベルを指定すると、アセンブラは、現在の命令の PC 値からラベルのアドレスまでのオフセットを計算します。アセンブラは、命令でオフセットをエンコードします。オフセットが大きすぎる場合、アセンブラによってエラーが生成されます。オフセットは、必要なアドレスを形成するために PC 値から加算または減算されます。

PC の値は命令セットに依存するため、PC 相対式を記述する際は、PC ではなく、ラベルを使用することを推奨します。

Note

  • A32 コードの場合、PC の値は現在の命令のアドレスに 8 バイトを加算した値になります。

  • T32 コードの場合、以下のようになります。

    • BBLCBNZ、および CBZ 命令では、PC の値は現在の命令のアドレスに 4 バイトを加算した値になります。

    • ラベルを使用するその他のすべての命令では、PC の値は現在の命令のアドレスに 4 バイトを加算し、ワード境界で整列させるために、その結果のビット [1] を 0 にクリアした値になります。

  • A64 コードの場合、PC の値は現在の命令のアドレスです。

Show/hide

        LDR     r4,=data+4*n    ; n はアセンブリ時変数
        ; コード
        MOV     pc,lr
data    DCD     value_0
        ; n-1 DCD directives
        DCD     value_n         ; data+4*n はここを指している
        ; 追加の DCD ディレクティブ

Show/hide関連項目

概念
参照

armasm リファレンスガイド:

Copyright © 2014 ARM. All rights reserved.ARM DUI 0801AJ
Non-ConfidentialID061814