すべてのプログラムは小さな命令から構成される【命令語】

命令語


プログラム言語を学習する際に、一番初めに作るものとして最もポピュラーなものは”Hello, world!”でしょう。この文字列をディスプレイに出すことは、ほぼすべてのプログラマが経験することだと思います。

何度か構文エラーを経験する中で自分の書いたプログラムを初めて動作させる、これはもはや「通過儀礼」といっていいかもしれません。

この”Hello, world!”は私たちが作る最も単純なプログラムだといえます。なぜなら単に文字列をディスプレイに表示させるだけのものですから。

しかし、これをさらに分割していくとさらに小さな単位に行き着きます。突き詰めていくなら、それこそマシン語です。この記事ではマシン語、もとい命令語について解説していきます。

命令語とは?


  • ワープロ、表計算ソフトなどの文書作成ソフト
  • インターネットブラウザ
  • オンラインゲーム
  • 自作プログラム

などなど………

これらはすべてごく細かな命令の集合体です。その細かな命令はコンピュータが理解できる命令語マシン語)に変換されます。

これはアセンブリというプログラム言語で英数字によって記述していくこともあるのですが、これをCPU内の解読器(デコーダ)によって変換したものが「0」と「1」の電気信号、つまり命令語というわけです。

命令語のしくみ


ここでは命令語のしくみ、つまり構文について説明します。

とはいえ、命令語の構文は以下の1通りのみです。

命令部 + オペランド部


たったこれだけですから、とてもシンプルだといえます。ただしシンプル過ぎるがゆえに記述量はその他の高級言語(Cですら)よりも多くなってしまうことは避けられません。

ちなみにオペランド部の「オペランド」とは、演算に使用する部分のことをいいます。命令を”operate“とするなら、演算対象は”operand“というわけです(オペランド部は「アドレス部」とも呼ばれます)。

命令語の構文は基本的に1通りしかありませんが、可変長の命令をとるコンピュータではオペランド部の個数によって構文の種類の数が多くなります。しかし、本質的には上の枠にある通り、命令とオペランドのみから成り立ちますから、ここでは細かく考える必要はないでしょう。

命令する部分・データを指す部分


先ほどの命令語の構文を再び載せます。

命令部 + オペランド部


この命令部にはコンピュータに対する指示そのものが入ります。

たとえば、

  • データをメモリにロードせよ
  • これとそれを足し算せよ
  • ビットをシフトせよ
  • プログラムを終えよ


などなど。命令の内容は単純なものばかりですが、ほかにも種類は多く存在します(疑似マシン語「CASL Ⅱ」を参考)。

  • 算術演算命令
  • 論理演算命令
  • 転送命令
  • 比較命令
  • 分岐命令
  • シフト命令
  • 入出力命令
  • サブルーチン呼び出し命令
  • SVC(割込み)命令


見慣れない単語が多いと思います。ただ、これらは要するに演算のための命令、メモリにロードするための命令、条件分岐割込みなどの命令です。いずれもプログラムを実現するための「最低限の」命令といえます。


そして命令語のオペランド部には、実際に処理するためのデータが入ります。

オペランド部はデータ直接入ることもあれば、データが存在するメモリの場所(「アドレス」と呼ばれます)を指すこともあるわけです。命令によってはそもそも値が入らないこともあります。

命令語を実行するサイクル


命令語はCPUで解釈され演算によって加工されます。それら命令が実行されるにあたりサイクルが存在しますが、それが命令実行サイクルというものです。このサイクルが超高速に実行されることにより、コンピュータで複雑なプログラムを動作させることができるのです。

くわしい説明はこちらの記事にありますので、ぜひ読んでみてください。





それでは、今回はここまでといたします。
最後までお読みいただきありがとうございます。


命令語
最新情報をチェックしよう!