アセンブリ - 定数による乗算

Mul name_registerのように、アセンブリ言語コードのimulやmulなどのマルチメディア命令を使用して乗算を実行できます。 プロセッサは、eax、ax、alの場合と同様に、サイズのパラメータを分離することによってプログラミングコードを乗算し、結果を "low"としてeaxまたはaxに格納し、その結果を "最も重要"としてedxまたはdxに格納します。倍数が1バイトより大きい場合は、最後に記録された値が設定されます。

マルチメディアファイルはメモリが非常に大きいため、レジスタに乗算するために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つのレジストリを同時に乗算することはできません。

前の記事 次の記事

トップのヒント