実は足し算しかできない!? 「補数」「シフト」で四則演算しているマイコン:マイコン入門!! 必携用語集(5)(2/2 ページ)
皆さんご存じのように、マイコンはいろいろな演算を行います。でも、実は算術演算の中では足し算しかできないんです。マイコンは足し算と、論理反転とシフトを組み合わせて、その他の算術演算(引き算、掛け算、割り算)を実現しています。では、どうやって演算しているのかを説明します。
乗算(掛け算)
乗算(掛け算)はどうすればいいでしょう?
一番簡単で分かりやすい方法は、掛け算の基本理念に基づいて、掛けられる数(=被乗数)を掛ける数(=乗数)の回数だけ足せばいいのです。加算器とカウンタがあれば実現できます。しかし、乗数、被乗数が、1桁、2桁の数字なら可能ですが、32ビット(=32桁)の数字の掛け算になると、足し算の回数が最大で232すなわち42億9496万7296回も行わなくてはならず、いくらマイコンの計算が速くても、現実的ではありません。
そこで、2進数の掛け算を“筆算”で行ったときを思い出しましょう。
下の図3を見てください。これは[1010]×[10]の計算を筆算で行ったものです。図中の(1)は乗数の1桁目の乗算、(2)は乗数の2桁目の乗算です。(1)の計算は乗数の一桁目が[0]ですので、結果が[0000]になっています。(2)では乗数の二桁目が[1]ですので、被乗数が、乗数の2桁目にずれているだけになります。2進数の計算には[1]か[0]しかないので、結局、乗数の[1]の立っている桁に被乗数をずらして記述し、最後に全部足せばよいことになります。
数字をずらすことをシフトと呼び、シフトする演算器をシフタと呼びます。この演算器は反転回路のように容易に実現できますので、乗算はシフターと加算器があれば実現できることがお分かりになったと思います。
最も簡単な回路(必要最低限の回路)は1ビット(1桁)のシフタと加算器です。例えば2進数の32ビット(32桁)の数でも、32回シフトして、1が立っていれば最大32回の加算で掛け算を実現できることになります。42億9496万7296回も足し算をする必要はありません。
除算(割り算)
除算(割り算)も一番簡単で分かりやすい方法は、割り算の基本理念に基づいて、割られる数から割る数を引いていき、商が[1]以下になるまで何回引いたかをカウントする方法です。しかし、これも掛け算と同じように32ビット(32桁)データだと最大で42億9496万7296回も引き算を行わなくてはならず、引き算が必要な分、掛け算よりも手間がかかります。
そこで、これも筆算をして考えてみましょう。図4に[0110]÷[011]の筆算を示します。
割る数は3桁ですので、最初、割られる数[0110]の上位3桁([011])から[011]を割る計算をします。2進数は10進数と違って、[1]か[0]しかありませんから、割られる数の上位3桁から割る数を引けばよいことになります。この計算が終わると、その次の上位3桁と引き算を行い、これを最後の桁まで繰り返せば、商と余りが求められます。図4の場合は、割られる数が4桁、割られる数が3桁ですので、2回だけ計算すれば答えがでます。もし割る数と割られる数の桁が大きく異なっていると、ずらして引き算する回数が増えますので、計算時間が長くなります。しかし、同じ桁だと1回の引き算だけで済むので、短時間で計算が終わります。このアルゴリズムを使えば、やはりシフタと減算器があれば実現できることになります。
ARMのCPUコア「Cortex-M3」にはハードウェアの除算器が内蔵されています。除算の計算時間は2〜12サイクル(1サイクル=1回の計算にかかる時間)と幅があります。除算に必要なサイクル数は、割る数と割られる数の桁に依存しています。割る数と割られる数の桁が同じ場合は2サイクルで計算が完了しますが、異なった桁の数字の計算だと最大で12サイクル必要になります。
どうですか、なんとなくメカニズムを理解できませんか?
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- マイコンのソフト開発って、どうやるの? ――「マイコン開発」で知っておきたい用語
マイコンについて、ある程度分かってきたところで、今回は、「マイコン開発」で覚えておきたいいくつかの用語を紹介します。同時に、マイコン開発で使用する開発ツール(開発環境)や全体的な開発の流れも解説します。 - マイコンの中枢「CPU」とは
お待たせしました。いよいよCPUの話です。CPUはマイコンの中枢部分に相当します。30年くらい前のマイコンはCPUだけで構成されていました。メモリや周辺機能は別のICとしてプリント基板上でマイコンの周辺装置として接続されていました。それほどマイコンにとって大切な部分です。 - のぞいてみよう、マイコンの中!! ―― 複雑な演算も簡単な動作の繰り返し
マイコンの中身って、どうなっているのでしょうか? どうやって複雑な演算を実行しているのでしょうか? その仕組みを知っておくと、いざマイコンを使う時にとても役立ちます。今回は、マイコンの内部の仕事の流れをつかんでください。