はじめてのアセンブラー
本日は、インテルCPUの歴史から始まり、16進数と2進数の関係、文字、文字列、8080CUPのアーキテクチャ、そしてアセンブラーを学習。
○インテルCPUの歴史
現在主流のインテルCPU。Windows,Mac,Unix問わず利用されており、現在一番普及してるCPU。
サーバーサイドなどで独自のCPUがある。
CPUが違うと、機械語が違う。
嶋 正利さんという方が4040,8080の開発にかかわっており、CPUの発展には日本人が大いにかかわっていたようだ。
現在はPentiumなどが主流であるが、80386の上位互換。Athlon や Celelonなど80386の上位互換。ほとんど80386の上位互換である。
○16進数と2進数の関係
2進数は分かりにくいので、16進数を利用する。
○文字
コンピュータは数値しか扱えない。では、どうやって文字をあわすのだろう。
文字に特定の数値(コード)を割り当ててそれで判断する。
例:Aというコードは「41(16進数)」で割り当てる。
現在のシステムのほとんどは、「ASCIIコード」を利用している。
ASCIIコードは7bitコードである。情報を表すのに7桁の2進数(10進数では0〜127)を用いる。
8bitで表現される残りの128文字分のエリアに言語独自の文字を収録することがある。(日本では、JIS X 0201としてこのエリアの一部(A1〜DF)に片仮名と日本語用の句読点などを収録して使用されることが一般的であった。)
○文字列
文字は、文字列として使われる場合が多い。
文字か、文字列かの判断方法は、
1.最初に長さを持つ。
2.終わりに終わりマーク(0が多い)をおく。
○8080CUPのアーキテクチャ
現在のCPUはだいぶ発達しているが、基本は同じである。
レジスタの要素(役割)はある程度決まっている。
たとえば8080CPUのレジスタAは演算用。
PSW(flg)は・・・うーん。なれないせいか、CPUのアーキテクチャはもう少し理解というか「なれ」が必要なようだ。「プログラムはなぜ動くのか」をもう一度よく読み来週質問してみよう。
○アセンブラー
機械語に近い言語。シンプルだけど、少々めんどい・・・(^^;
でも、メモリやCPUを意識したプログラムを書くので、プログラム理解にはもってこい!
簡単なことはできるけど、複雑なことをアセンブラーで書こうとしたら相当時間かかる。
今回は8080のCPUをエミュレートしたソフトを使用。8080を使っているつもりでプログラム!
8080に理解できる機械語を作成するため、アセンブラーを書く。
8080命令表
「アセンブル」すると、アセンブラーで書いた命令が機械語になる。
「逆アセンブル」は機械語をアセンブラーにする。
※参考
Windows には16進数が計算できる計算機が搭載されている。
プログラム → アクセサリ → 電卓
また、会話の中で「インタプリタ」という言葉も出てきた。
Perl , Ruby , PHPなどは「インタプリタで実行されることが一般的なプログラミング言語」である。
C言語はコンパイルして(機械語にして)プログラムを走らせるので、変換作業がなく早い。
Perlなどは機械語に変換しながら実行(インタプリタを実行しながら動作)するので、少々動作が遅い。