←前ページへ :  INDEX :  次ページへ→


9-1.LEA ( Load Effective Address ) :実効アドレスの取得

  実行アドレスを計算します。

LEA ( Load Effective Address ) :実効アドレスの取得

LEA	DEST,SRC

   動作:SRCの実行アドレスを計算し、DESTに代入
  影響を受けるフラグ:なし
    SRC1:メモリー
    DEST:16bitもしくは32bitレジスタ
  これは機能を解説するのはわかりにくいので、例を紹介します。
lea	ax,[si+bx]	; AX←SI+BX
lea	ax,[si+bx+5]	; AX←SI+BX+5
lea	edx,[eax+eax×2]	;EAX←EAX×3(80386以上)
[ ]で囲まれているので、基本的にはSRCは下記のものしか書けません。
[BX]、[SI]、[DI」
[BX+SI]、[BX+DI]、[BP+SI]、[BP+DI]
[BX+disp]、[SI+disp]、[DI+disp」
[BX+SI+disp]、[BX+DI+disp]、[BP+SI+disp]、[BP+DI+disp]

  ※disp : 即値

  しかし、80386以上では、EAX,EBX,ECX,EDXなどすべての32bitレジスタで間接アドレス法が使えます。しかもかけ算(ただし、1,2,4,8倍のみ)が書けるのです。 (16bitレジスタは使用できない)
[ 32bitレジスタ + 32bitレジスタ × 1 or 2 or 4 or 8 + 既値 ]
  したがって、簡単な計算ができるわけです。

  また、すべてのCPUで「mov bx,offset DATA」を「lea bx,DATA」と書くこともできます(一般的でないが)。


命令のオペランド部分に記述するアドレス指定の方法を アドレッシング と言います。 代表的な用語を次に示します。

ディスプレースメント(displacement:変位) 基本的には、ある基準に対する目的のアドレスとの差を意味しますが、実際には種々の値が使用可能です。
直接(Direct) disp16, disp32でオフセット アドレスを直接指定します。
レジスタ間接 インデックス(index)、ベース(base)指定など、レジスタ内の値をオフセット アドレスとします。
ディスプレースメント付きレジスタ間接 レジスタ間接でdisp8, disp16, disp32の値を更に加えます。
即値(イミディエイト:immediate) 数値そのものです。

これらで最終的に決定されたアドレスを実効アドレス(effective address)と言います。


←前ページへ :  INDEX :  次ページへ→