アセンブリ - 定数による乗算
マルチメディアファイルはメモリが非常に大きいため、レジスタに乗算するためにeaxの値をシフトする必要があるかもしれません。また、レジスタの結果はeaxでなければならず、前の値は上書きされます。 それにもかかわらず、レジスタに定数を掛ける必要がある場合は、結果をレジスタに入れてから、命令 "lea"の付いたショートカットを使用してください。
短いイントロ
アセンブリ言語はプログラミングコンピュータ用の低レベル言語であり、1950年代に最初に開発されました。 それらは主に第二世代プログラミング言語として知られています。 アセンブリ言語の重要な機能は、第一世代のプログラミングで必要とされるエラーが発生しやすく時間のかかる操作の多くを排除したことです。
アセンブリでの乗算
アセンブリでは、命令mul(符号なしの数)とImulを使って2つの数を乗算できます。 それらは以下のように使用されます。
mul name_registry
プロセッサは、(パラメータで指定されているレジストリのサイズに応じて)eax、ax、またはalの内容を増やしてから、結果をeax、ax、edx、またはdxに格納します。
乗算した値をeax、別のレジストリに乗算する値、結果を保持しているレジストリをeaxにする必要があるため、 mulを使用するのは非常に面倒です。
ただし、レジストリに定数を乗算して結果を選択したレジストリに格納するだけの場合は、 "lea"(実効アドレスのロード)という指示のショートカットを使用できます。 この命令は、メモリ内のデータのアドレスを検索するために使用されます。
lea destination_registry、[memory_address]; destination_registryにmemory_addressを配置します。
これの大きな利点は、定数を使うことによって、余分なメモリアドレスを使い果たす必要がないということです。 ecxに7を掛けて結果をebxに保存するとします。コマンドは次のようになります。
リーebx、[ecx * 7]
注:このショートカットを使用して2つのレジストリを同時に乗算することはできません。