スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

乗除算

今日は、乗算と除算
乗算の命令はMULです
mul bl
のように記述します。

加減算とは違ってオペランドは1つ(ソースオペランド)しか取りません。

AX(AL)レジスタと指定された値の演算結果が、AX(AL)レジスタに格納されます。
処理的イメージは、(addのように書くならば)
mul al, bl
でしょうか。

なぜデスティネーションオペランドを記述しないのでしょうか?
それは、MULに与えられたオペランドの桁数によって、演算結果の格納先がAXになったりALになったりするからです。
具体例を以下に示します。

2D25:0100 mov ax, 100
2D25:0103 mov bx, 2
2D25:0106 mul bl

とすると、AX=0000 となります。

2D25:0100 mov ax, 100
2D25:0103 mov bx, 2
2D25:0106 mul bx

とすると、AX=0200となります。


MULのオペランドに8bitレジスタが与えられた場合、
ALレジスタ×BLレジスタ という演算が行われ、
AX(16bit)に結果が格納されます。
演算対象がALレジスタだったため、100の下2桁だけで演算されてしまい結果が0になりました。


MULのオペランドに16bitレジスタが与えられた場合、
AXレジスタ×BXレジスタ という演算が行われ、
DX(上位16bit)とAX(下位16bit)に格納されます。
こちらはAXレジスタを演算対象としたため、200となったわけです。



除算の命令はDIVです。
div bl
のように書きます。
演算結果の格納は乗算と似ています。
除算は商と余りを格納するという点が異なります。

8bitを指定した場合、
AXの上位8bitに余りを
AXの下位8bitに商を格納します。

16bitを指定した場合、
DXに余りを
AXに商を格納します。


今日はこんなところで。

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

プロフィール

森嶋晃介

Author:森嶋晃介
社会人2年目。
独学する勉強のために、いろいろ手を出して、それについて書いていく予定です。
今年こそ、たくさん書くぞ

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。