プロが教える店舗&オフィスのセキュリティ対策術

PICマイコンのアセンブラルーチンについて

PICマイコンのアセンブラについて教えていただきたく投稿しました。

http://orange.zero.jp/electronics/pic/pic.html
上記のサイトについてです。

『●「整数演算」』の
『◇8×8=16ビットの乗算』についてです。

つまり、下記リンクの演算ルーチンについて、大まかな流れだけでいいので解説していただけないでしょうか。
http://orange.zero.jp/electronics/pic/mul816.txt

よろしくお願い致します。

A 回答 (1件)

1234×4567 の計算(ただし、10進数)



まず、筆算で、1234×4567 の計算をしてみてください。
乗数(4567)の下の方の桁から、ひとつずつ掛けて、しかも、その結果を、一桁ずつずらして書きますよね。
それは、実は、以下のような計算をしていることになります。

1)4567 最下位を見る → 7
2) 1234 と 7 を掛ける 1234×7 = 8638
3) この答えを保持しておく s ← 8638

4) 被乗数(1234)を、一桁左側にシフトする(つまり、10倍する)12340
5) 乗数(4567)を、一桁右にシフトする(つまり、10で割る) 456
6)新しくできた、乗数と(被乗数の最下位)を掛ける 12340×6 = 74040
7) この結果を s に足し込む s = s + 74040 = 82678
8) 4) にかえって繰り返す

以上は、10進数のお話です。
これを、2進数でやろうと思うと、
・そもそも、数字は 0 か 1 しかない。つまり、2) とか 6) は、実際にはかけ算をする必要はなく、「何も足さない」か、「そのまま(1をかけたもの)足す」かどちらかしかない。
・一桁のシフトは、文字通りシフトで実現できる。

ということになります。
2進数でも、筆算でかけ算をすることができますから、やってみると事情が飲み込めると思います。
おおざっぱには、こういう計算をやっています。
    • good
    • 0
この回答へのお礼

解答ありがとうございます。とても分かりやすくて助かりました。

別の質問なのですが、もしよろしければ、
http://okwave.jp/qa/q7121380.html
こちらにも解答をいただけるとありがたいです。

16ビットどうしの除算なのですが、乗算の場合と同じように、筆算で考えればいいのでしょうか。

お礼日時:2011/11/09 18:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!