FIELD

FIELD ディレクティブは、MAP ディレクティブを使用して定義された記憶域マップ内の空間を定義します。#FIELD と同じ意味です。

Show/hide構文

{label} FIELD expr

各パラメータには以下の意味があります。

label

ラベルを指定します(省略可)。指定されている場合は、label に記憶域マップの位置カウンタ {VAR} の値が割り当てられます。その後、記憶域マップの位置カウンタは、expr の値でインクリメントされます。

expr

記憶域マップの位置カウンタをインクリメントするバイト数を求める式を指定します。

Show/hide使用法

記憶域マップが base-register を指定する MAP ディレクティブによって設定されている場合は、次の MAP ディレクティブが出現するまで、このベースレジスタが、後続の FIELD ディレクティブで定義されるすべてのラベル内で暗黙的に使用されます。これらのレジスタ相対ラベルは、ロード命令とストア命令で使用できます。

Show/hide

以下の例は、MAP ディレクティブと FIELD ディレクティブを使用してレジスタ相対ラベルを定義する方法を示しています。

    MAP     0,r9        ; R9 にストアされるアドレスを {VAR} に設定する
    FIELD   4           ; {VAR} を 4 バイトインクリメントする
Lab FIELD   4           ; Lab にアドレス [R9 + 4] を設定する
                        ; {VAR} を 4 バイトインクリメントする
    LDR     r0,Lab      ; LDR r0,[r9,#4] と等価

MAP ディレクティブおよび FIELD ディレクティブを使用する場合は、両方のパスで値が一致していることを確認する必要があります。次の例は、MAPFIELD 使用によって、異なるシンボル x の値が発生する例を示します。最初のパスでは、sym が定義されていないので、x は 0x04+R9 にあります。2 番目のパスでは、sym が定義されているので、x は 0x00+R0 にあります。この例では、アセンブリエラーが発生します。

    MAP 0, r0
    if :LNOT::DEF:sym
      MAP 0, r9
      FIELD 4  ; 最初のパスでは、x が 0x04+R9 にある
    ENDIF
x   FIELD 4    ; 2 番目のパスでは、 x が 0x00+R0 にある
sym LDR r0, x  ; x の値が一致しないので、アセンブリエラーが発生する

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0489FJ
Non-ConfidentialID111211