アセンブリ言語

予備知識

はじめ

 この章では,コンピュータの基本的な知識を学習し,コンピュータ,ソフトウェア,アセンブリとアセンブラについて説明する.
 これらの知識は,アセンブリ言語に直接関与しないが,これからのアセンブリ言語への理解を促進させてくれると考えている.ここで,コンピュータの基礎的な知識を身につけておきたい.

コンピュータ

 コンピュータとは,物体である.あるプログラムに従って演算を行なう機械である.

メモリ

 メモリとは,プログラムのデータを記憶する場所のことである.
 メモリには,ROM(Read Only Memory)とRAM(Random Access Memory)の2つがある.ROMは読み込み専用のメモリであり,保持データの不揮発性を有する.一方でRAMは,CPUが自由にデータを書き込みと読み込みが可能であり,揮発性であるためコンピュータ起動時のみデータを保持できる.
 これらの性質の使い分けとして,ROM領域にはBIOS等のコンピュータやOSの起動に関するプログラムが書き込まれている.一方で,RAM領域には応用アプリケーションで利用されるデータに関して活用される.

アセンブリ言語とアセンブラ

 アセンブリ言語とは,マシン語(コンピュータが解釈である言語)と1対1に対応したプログラミング言語を指す.アセンブリ言語によるソースコードをオブジェクトコード(コンピュータの実行可能な形式)に変換するソフトウェアをアセンブラという.その行為をアセンブルといい,コンパイルと同義である.

ビットとバイト

 1 byte = 8 bits

レジスタ

 レジスタとは,CPU内部にある演算や実行を管理するメモリ領域.レジスタには汎用レジスタとセグメントレジスタが設けられている.  汎用レジスタ(AX, BX,...)は,機能を限定せず,メモリから直接データを読み込む回数を減らすことでプロセスの処理速度を上げることを目的に用いられる.一方で,セグメントレジスタは,セグメントという論理的な単位に分割して使用され,CS(Code Segment),SS(Stack Segment),DS(Data Segment)が主に挙げられる.

アセンブリ言語の記述法

 アセンブリ言語の記述法について以下に一例を示す.

		//Intel Style
		
		mov ax, 10  /*AXレジスタに10を代入する(転送する)*/
	    
 この命令において,コンピュータの動作を司令しているのが「mov」.movの部分をOP(Operation)コードまたはニーモニックと呼ぶ.それに続く「ax」と「10」はオペランド(oprand)と呼ばれ,10をソースオペランド,axをディスティネーションオペランドという.これらのオペランドはニーモニックが操作する対象を定義する役割をしている.
 ほとんどのアセンブラでは上記のIntel形式を採用しているが,まれにAT&T形式を採用していることもある.その場合,ソースオペランドとディスティネーションオペランドの定義する順序が逆になる.