アセンブリについて箇条書きでメモする
プログラミングについて詳しく知ろうとすると、アセンブリの理解に行き当たりますよね。
ほとんどの言語は実行時アセンブリ言語になり実行されます。
理解していなくてもコードは書けます。
しかし、知っておくとコーディング中「こんな感じに変換されるのかな〜」と考えることができて面白いです。
今回も箇条書きでまとめている程度ですが、参考になればと思います。
アセンブリ言語について
- アセンブラ言語はマシン語と1対1で結びつく
- アセンブラ言語を利用することで、メモリの番地にデータを格納したり、CPUのレジスタにデータを入れたり、演算を実行させたりすることができる。
- マシン語は0と1の数字で表される。
- メモリの1つのアドレスに入るデータ量は決まっている。アセンブラからマシン語にされたものがそれを超える容量になると、2このアドレスを利用する。
- CPUはプログラムカウンタを持っており、1つの命令を読み込むと、自動で次の命令があるメモリのアドレスを指し示す。
- 分岐、ループは、プログラムカウンタを実行の最初に向けたり、飛ばして指定したりすることで実装される。
MAIN START LD GR0, A ;メモリのA番地のデータをCPUのレジスタGR0に持ってくる ADDA GR0, B ;GR0にメモリのB番地の値を足す ST GR0, ANS ;GR0の値をメモリのANS番地に格納する。 RET A DC 1 B DC 2 ANS DS 1 ;ANSという領域を1つ空けておく。 END
ラベルは、変数名に当たる。 先頭のラベル(今回はMAIN)は、プログラム開始時のメモリの番地に置き換わる。
アセンブリを1行ずつ上から実行する際、「次の命令の番地」をCPUのレジスタPRが保持する。 このPRレジスタの値は通常、1つ下の命令になるが、分岐やループの際は行を飛ばしたり戻ったりする。このレジスタを操作することで分岐やループが実現できる。
まだ学習中です。学んだことがあれば追記していき、その中で興味深いトピックが出てくれば記事にしたいと思います。