プログラムはなぜ動くのか 知っておきたいプログラムの基礎知識を読んだ。
あまりPGしないので深くまでは理解できなかったが、良かった。知らなかったことをメモ。
・プログラムが実行される仕組みは、プログラムがコンパイルされてマシン語(レジスタを利用した演算処理)になり、マシン語がCPUによって実行される。
・アセンブリとマシン語は1対1で対応している。(マシン語にエイリアスとして英字を割り当てたものがアセンブリ)
・8桁の2進数をバイト(byte)と呼び、メモリやディスクはバイト単位で処理される。
・ICのもつピンは直流電流0Vか5Vのいずれかの状態になっている。
・マイナスは補数で表される。補数は反転して1を足した数。マイナスは同じ絶対値の正の数を足すと0になるという考え方。
・0.1という2進数は10進数だと0.5となる。10進数の0.1は2進数では表せない。
・プログラムでは小数点数を浮動小数点数として処理する。
・メモリはメモリICにアドレス信号、データ信号、制御信号を意味する足が複数あり、アドレスを指定してデータを読み書きする。
・スタックは干し草を積んだ山という意味で、つまりLIFO(LastIn FirstOut)形式。
・単なる配列を利用するよりも、リストを使ったほうがメモリの使い方がよいため、実行速度が高速になる。
・ランレングス法(Run Length Encoding)は、データと繰り返し数で圧縮する。(AABBBBCCCC→A2B4C4)
画像ファイルなど同じデータが続く場合に高い圧縮率となる。
・ハフマン法は圧縮対象のファイルごとに符号体系を構築して、それをもとにして圧縮する。
・画像ファイルは非可逆圧縮であることが多い。
・動作環境に影響するのはOSとマイクロプロセッサの種類。OSごとに命令を受けるAPIが異なり、マイクロプロセッサごとに処理できるマシン語は異なるため。
・ソースコードをネイティブコードへ翻訳するのがコンパイラの仕事。
・インタプリタは実行時にソースコードを1行ずつネイティブコードへ翻訳する。
・コンパイルしただけではプログラムとしては利用できない。ソースコードで利用しているオブジェクトをまとめる作業(リンク)を実施する必要がある。
(Windowsはこの作業をすることでEXEファイルとなる)
・EXEが実行されると、変数領域、関数領域、スタック領域、ヒープ領域(プログラム実行時に動的に作成される配列やオブジェクトを格納)がメモリに割り当てられる。
・1人前のプログラマとして、ハードを理解して、OSがハードを抽象化していることを理解するべき。
・OSがなかったころは、ディスプレイの表示や印刷のプログラムも自分で書く必要があった。
・C言語はコンパイルだけでなく、アセンブリに変換することもできる。
・アセンブリはネイティブコードに変換される命令と、_TEXTなどのプログラムの構造やアセンブル方法を表す疑似命令の2種類がある。
・アセンブリ言語の構文はオペコード(命令の動作)とオペランド(命令の対象)の組み合わせ。
・例えばキーボードは割込要求の01、マウスは02といった識別番号が割り振られており、割込が発生するとまずは割込コントローラーが処理を受け付け、順番にCPUに伝える。
・VRAMというメモリ領域にデータをINすると、ディスプレイに表示される。現在はVRMA用メモリと専用マイクロチップが載っているグラフィックカードがよく利用されている。