- ベストアンサー
PICマイコンのアセンブラについて
PICマイコンのアセンブラルーチンについて PICマイコンのアセンブラについて教えていただきたく投稿しました。 http://orange.zero.jp/electronics/pic/pic.html 上記のサイトについてです。 『●「整数演算」』の 『◇8×8=16ビットの乗算』についてです。 つまり、下記リンクの演算ルーチンについて、大まかな流れだけでいいので解説していただけないでしょうか。 http://orange.zero.jp/electronics/pic/mul816.txt よろしくお願い致します。
- みんなの回答 (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進数でも、筆算でかけ算をすることができますから、やってみると事情が飲み込めると思います。 おおざっぱには、こういう計算をやっています。
お礼
解答ありがとうございます。とても分かりやすくて助かりました。 別の質問なのですが、もしよろしければ、 http://okwave.jp/qa/q7121380.html こちらにも解答をいただけるとありがたいです。 16ビットどうしの除算なのですが、乗算の場合と同じように、筆算で考えればいいのでしょうか。