これは機能を解説するのはわかりにくいので、例を紹介します。LEA ( Load Effective Address ) :実効アドレスの取得
LEA DEST,SRC 動作:SRCの実行アドレスを計算し、DESTに代入 影響を受けるフラグ:なし SRC1:メモリー DEST:16bitもしくは32bitレジスタ
[ ]で囲まれているので、基本的にはSRCは下記のものしか書けません。
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以上)
しかし、80386以上では、EAX,EBX,ECX,EDXなどすべての32bitレジスタで間接アドレス法が使えます。しかもかけ算(ただし、1,2,4,8倍のみ)が書けるのです。 (16bitレジスタは使用できない)
[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 : 即値
したがって、簡単な計算ができるわけです。
[ 32bitレジスタ + 32bitレジスタ × 1 or 2 or 4 or 8 + 既値 ]
また、すべてのCPUで「mov bx,offset DATA」を「lea bx,DATA」と書くこともできます(一般的でないが)。
命令のオペランド部分に記述するアドレス指定の方法を アドレッシング と言います。 代表的な用語を次に示します。
これらで最終的に決定されたアドレスを実効アドレス(effective address)と言います。 |