数値を10倍する方法①

今回は5つのテーマのうちの「5. 会社では習わないけどちょっと使えるコンピュータの知恵」についてご紹介いたします。

我々人間はコンピュータに命令をして処理を実行させています。例えば1を10倍するときは電卓アプリに1*10と入力します。その入力に対してコンピュータの内部では10倍をどのように計算しているのでしょうか。

コンピュータが扱う数値

コンピュータは日本語では電子計算機というくらい計算するためにある機械です。その中でも特徴的なのはスイッチのON、OFFでデータを処理しているということです。言い換えると1と0の2進数で計算しているということです。

ですが我々人間がモニターを見たときにはしっかり10進数で表示されています。これはコンピュータが2進数のデータを10進数に変換してからモニターに表示してくれているに過ぎません。

どのように10倍しているのか

アセンブリ言語というプログラミング言語があります。アセンブリ言語はコンピュータの動きを細かく記述することができるので、コンピュータにより近い動きを見ることができます。今回はアセンブリで記述したプログラムを使って10倍の処理を解説します。

↑が1を10倍するプログラムです。(コメントでは10進数で表記していますが内部では2進数で処理されています。)

コードの内容を簡単に解説すると

  1. メモリ1に被乗数である「1」を代入。
  2. メモリ2に被乗数である「1」をコピー。
  3. メモリ1にメモリ1+メモリ2の結果を代入。
  4. これをあと8回繰り返す。
  5. メモリ1に結果がある状態。

使われている命令語の説明です。

  • GR(レジスタ):データを入れておく箱です。GRと書いてレジスタと読みます。GR1の「1」は箱の番号です。
  • START(スタート命令):プログラムの始まりを記します。
  • LD(ロード命令):レジスタ(メモリのこと)に数値を代入。GR1,=1はGR1というレジスタに1という数値を入れています。GR1,GR2はGR2の内容をGR1にコピーしています。
  • ADDA(アッド命令):レジスタに他のレジスタを足す。GR2(0が入っている)にGR1(1が入っている)を足すとGR2には1が足し込まれた状態になります。
  • RETおよびENDは処理の最後を記します。

コンピュータは掛け算ができないため愚直に足し算を繰り返します。

実はほかに「シフト」を使った方法もあります。この方法は次回ご紹介いたします。

まとめ

今回のまとめです。

  • コンピュータは2進数でしか計算できないため人間が入力した10進数を2進数に変換してから計算している。
  • コンピュータは掛け算ができないため足し算の繰り返しで答えを出す。

今回は以上です。