- - PR -
私たちは普段、目の前のPCで高級言語やアプリケーションを使って実数を取り扱っている。しかし、2進数の整数しか理解できないはずのCPUに、なぜ、そんなことができるのだろうか?
最終回となる今回はマイコンでの固定小数点計算を通じて、コンピュータの中の「小数点のある世界」をのぞいていく。そして、AVRアセンブラを通じて、“制御とセンシングへの道”の第一歩を確実に踏み出そう!
AVRマイコンの乗算命令
今回の題材は、2進数での小数点の取り扱いと、固定小数点と符号付き小数(注1)の乗算だ。これを理解すれば、正負の実数が取り扱えるようになり、できることの幅が大きく広がるはずだ。
| 注1:時々「実数」と表記されるが、筆者には抵抗がある。実数は、小数で表現することのできない数も含んでいるからだ。 |
AVRシリーズには、以下の6種類の乗算命令がある。
- MUL 符号なし整数×符号なし整数
- MULS 符号付き整数×符号付き整数
- MULSU 符号付き整数×符号なし整数
- FMUL 符号なし小数×符号なし小数
- FMULS 符号付き小数×符号付き小数
- FMULSU 符号付き小数×符号なし小数
整数と小数で乗算命令を分けているのは、小数には「小数点」という存在があるからだ。小数点の位置を合わせておかなければ、正しい計算はできない。小数点の取り扱いには、固定小数点と浮動小数点があるが、ここで扱うのは固定小数点である。小数点は、7ビット目と6ビット目の間にあるものとする。このことを「(1.7形式)」と表記する。
さらに、けた数を固定した世界で負の数を扱うには、「最上位ビットが符号である」という前提を設けなくてはならない。2進数の世界では、符号付き2進数表示を用いればよいのだが、「符号付き2進数であるかどうか」に関する情報がなかった場合、「11111110」は「254」でもあり、「−2」でもあり得る。
さらに、符号付き2進数の場合、最上位ビットを符号として用いるため、数値として利用できるビット数が減る。つまり、扱える数値の範囲が狭くなるということだ。符号が不要であることが分かっていれば、その分だけ扱う数値の範囲を広くできる。このような事情から、マイコンに乗算器を搭載する場合、符号の有無によって乗算器(=乗算命令)を作り分けることが多い。
今回は、被乗数と乗数の両方を「符号付き」とするFMULS命令を用いて、小数の乗算の取り扱いになじんでみよう。
サンプル−数値Aと数値Bの乗算を行うプログラム−
今回のサンプルプログラムを以下に示す(リスト1)。
; FMULS命令でAとB(固定小数点)の掛け算を行う |
| リスト1 FMULS命令で数値Aと数値Bの乗算を行うプログラム |
リスト1のコメントに記載したとおり、「FMULS命令で数値Aと数値Bの乗算を行う」だけのプログラムだ。
数値Aと数値Bは、
- A・Bとも正
- Aは正でBは負
- A・Bとも負
- A = B = −1
の4パターンとする。
取り扱う数値・計算結果は、「AVR Studio」のシミュレータの「I/O View」を用い、その場で目視で確認できるようにした。「AVR Studio」の使用方法については前シリーズ「マイコン制御基礎以前 第8回」を参照していただきたい。
では、例によって「論よりRUN」で実行してみよう。プロジェクトを作成し、プログラムのビルドが成功したら、図1のように「I/O View」の「PORT B」を表示させ、その状態でプログラムのステップ実行が行えるようにしよう。プログラムのステップ実行を行う方法については、前シリーズ「マイコン制御基礎以前 第8回」を参照していただきたい。
図1 AVR Studioの画面 ※画像をクリックすると拡大表示します |
関連記事 半導体/エレクトロニクス
- 連載:イチから作って丸ごと学ぶ! H8マイコン道
- 特集:組み込みシステムに吹く“仮想化”の風
- 連載:組み込みマルチコア進化論(連載中)
- 連載:必修! FPGAタイミング解析の基礎(全5回)
- 連載:−ザ・組み込み−ソフトウェアのハードウェア化(連載中)
- 連載:S08ではじめるマイコン制御プログラミング(全6回)
- 連載:マイコン制御基礎の次(連載中)
- 連載:マイコン制御基礎の基礎(全10回)
- 連載:マイコン制御基礎以前(全10回)
- 連載:H8で学ぶマイコン開発入門(全13回)
- 連載:触って学ぼう FPGA開発入門(全6回)
- 連載:FPGA開発テクニック、チューニングの心得(全6回)
- 特集:いまさら聞けない FPGA入門
- 連載:バラして納得! 電子部品入門(全18回)
- 連載:完全マスター! 電子回路ドリル III(全14回)
- 連載:完全マスター! 電子回路ドリル II(全25回)
- 連載:完全マスター! 電子回路ドリル(全25回)
- 目指せ! 電子回路マスターへの道
- 目指せ! 電子回路マスターへの道 Part2
- 分かっておきたい、IP活用の落とし穴
組み込み開発フォーラム 新着記事
- フルスクラッチの“Hello World”を動かしてみよう(2011/3/31)
- FlexRayプロトコルの概要(その2)(2011/3/29)
- JASA、東北地域に拠点を置く会員企業を支援(2011/3/25)
- NEC、震災の影響を受けた4拠点の生産再開を発表(2011/3/23)
- 内部ブロック図の基礎と共通要素(2011/3/22)
- インテル、被災地におけるITインフラの復旧を支援(2011/3/22)
- Facts on AUTOSAR/AUTOSAR導入の現実(2011/3/18)
- 計測器・震災被害ホットラインを開設、テクトロニクス(2011/3/18)
- ZMP、地震の揺れを多角的に計測するアプリ無償配布(2011/3/16)
- メンター、3Dテレビ・マルチメディア検証プラットフォーム(2011/3/16)
- 【番外編】タチの良い計測値、悪い計測値とは?(2011/3/15)
- tarファイルシステムをAndroidに組み込む!!(2011/3/10)













