167

これらの指示の違いを知りたい:

MOV AX, [TABLE-ADDR]

LEA AX, [TABLE-ADDR]
4

12 に答える 12

211
  • LEAロード実効アドレスを意味します
  • MOV負荷値を意味します

つまり、LEAアドレス指定しているアイテムへのポインターをロードしますが、MOV はそのアドレスに実際の値をロードします。

の目的は、LEA自明でないアドレス計算を実行し、結果を [後で使用するために] 保存できるようにすることです。

LEA ax, [BP+SI+5] ; Compute address of value

MOV ax, [BP+SI+5] ; Load value at that address

定数のみが含まれる場合、MOV(アセンブラの定数計算によって) の使用の最も単純なケースと重複するように見えることがありますLEA。複数のベースアドレスなどを含むマルチパート計算がある場合に役立ちます。

于 2009-11-09T08:40:21.303 に答える
55

NASM 構文:

mov eax, var       == lea eax, [var]   ; i.e. mov r32, imm32
lea eax, [var+16]  == mov eax, var+16
lea eax, [eax*4]   == shl eax, 2        ; but without setting flags

MASM 構文でOFFSET varは、ロードの代わりに mov-immediate を取得するために使用します。

于 2013-06-27T14:37:58.167 に答える
33

命令 MOV reg,addr は、アドレス addr に格納されている変数をレジスタ reg に読み込むことを意味します。命令 LEA reg,addr は、アドレス (アドレスに格納されている変数ではない) をレジスタ reg に読み込むことを意味します。

MOV 命令のもう 1 つの形式は、MOV reg,immdata です。これは、即値データ (つまり、定数) immdata をレジスタ reg に読み込むことを意味します。LEA reg,addr の addr が単なる定数 (つまり、固定オフセット) である場合、その LEA 命令は、同じ定数を即値データとしてロードする同等の MOV reg,immdata 命令と本質的にまったく同じであることに注意してください。

于 2009-11-09T09:03:50.953 に答える
10

リテラルのみを指定する場合、違いはありません。ただし、LEAにはさらに多くの機能があり、それらについてはここで読むことができます:

http://www.oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_6/CH06-1.html#HEADING1-136

于 2009-11-09T08:38:24.220 に答える
9

使用するアセンブラに依存します。

mov ax,table_addr

MASMでは次のように機能します

mov ax,word ptr[table_addr]

したがってtable_addr、オフセットではなく、からの最初のバイトをロードしますtable_addr。代わりに使用する必要があります

mov ax,offset table_addr

また

lea ax,table_addr

これは同じように機能します。

leaversiontable_addrがローカル変数の場合も正常に動作します。

some_procedure proc

local table_addr[64]:word

lea ax,table_addr
于 2009-11-09T08:44:24.650 に答える
1

MOV は LEA [ラベル] と同じことを行うことができますが、MOV 命令には命令自体の内部に実効アドレスが即値定数として含まれています (アセンブラーによって事前に計算されます)。LEA は、PC 相対を使用して、命令の実行中に実効アドレスを計算します。

于 2020-06-22T05:59:43.110 に答える
0

LEA (LoadEffective Address) は、シフトアンド加算命令です。8086 に追加されたのは、アドレス指定モードをデコードして計算するためのハードウェアがあるためです。

于 2019-11-21T15:39:59.817 に答える
-1

違いは微妙ですが重要です。MOV 命令は、事実上、TABLE-ADDR ラベルが表すアドレスのコピーである「MOVe」です。LEA 命令は、間接命令である「ロード有効アドレス」です。つまり、TABLE-ADDR は、ロードするアドレスが見つかったメモリ位置を指します。

LEA を効果的に使用することは、C などの言語でポインターを使用することと同等であり、強力な命令です。

于 2009-11-09T08:46:29.757 に答える