dev/mom0tomo

技術メモ

「低レイヤを知りたい人のための Cコンパイラ作成入門」を読む -機械語とアセンブラ①-

読んだもの

「CPUとメモリ」から。

低レイヤを知りたい人のための Cコンパイラ作成入門

プログラムカウンタ

CPUが実行するプログラムと、そのプログラムが読み書きするデータは、どちらもメモリに入っている。
メモリはCPUからみて外部の装置で、それを読み書きするには多少の時間がかかる。

CPUは「現在実行中の命令のアドレス」をCPU内部に保持していて、そのアドレスから命令を読み出して、そこに書かれていることを行い、そして次の命令を読み出して実行する。
その現在実行中の命令のアドレスのことを「プログラムカウンタ」(PC)や「インストラクションポインタ」(IP)という。
CPUが実行するプログラムの形式そのもののことを「機械語という。

分岐命令

プログラムカウンタは必ずしも直線的に次の命令だけに進んでいくわけではない。
CPUの「分岐命令」と呼ばれる命令を使うと、プログラムカウンタを、次の命令以外の任意のアドレスに設定することができる。

レジスタ

CPUはプログラムカウンタのほかにも、少数のデータ保存領域を持っている。この領域のことを「レジスタ」と呼ぶ。
レジスタはメモリと異なりCPU内部に存在しているので、遅延なしにアクセスすることができる。

プログラムを実行する際には、

  1. CPUがメモリからレジスタにデータを読み込んできて
  2. レジスタレジスタの間でなんらかの演算を行い
  3. その結果をメモリに書き戻す

このような順序で進む。


次回は「アセンブラとは」から。