アセンブリ言語とは

計算機は機械語というもので動いているということは理解したとして、人がい ちいち機械の動きと、その命令がおかれるべき番地を計算して0と1の並びを 書く、というのははなはだ非効率です。そこで、アセンブリ言語 (assembly language) というものが出来ました。

これは、機械語命令( インストラクション(コード)とか、 オ ペコード (opcode) とか言ったりします)にほぼ対応した命令を文字 列(アルファベット、数字)で書き表し(これをニーモニック (mnemonic) といいます)その引数( オペランド (operand) と いうことがあります)も、レジスタ番号(記号)やアドレスに名前をふったも の(ラベルといいます)で書き表すことで、生の機械語を書くよりは数段楽に プログラミングすることができます。

ちなみに、アセンブリ言語を機械語に変換するのは(計算機が発明された当初 は人間が手でやっていましたが) アセンブラ (assembler, assemble する もの、の意) というプログラム(ソフト ウェア) でおこなうのが一般的です。このことから、アセンブリ言 語のことをアセンブラ(ル)言語とか、あるいは略してア センブラと言うこともあります。

まずは、例

ということで、まずは例です。
     MOV A 1
     MOV B A
     ADD B 1
     OUT B
L0:  JMP L0
これの読み方の詳細は TD4 と GMC4 の違いの解説(?) 等をみてみてください(ぺこり)
  1. まず、
    
        MOV A 1
    
    
    で、Aレジスタに1という値をムーブ(移動、つまり代入)します。レジスタ (メモリ)の内容を、そのまま1にする、ということです。

  2. 次に、
    
        MOV B A
    
    
    で、Aレジスタの値をBレジスタに代入する、ということでBレジスタの値も1になるわけです。

  3. 次に、
    
        ADD B 1
    
    
    で、Bレジスタの値に1を加える、ということでBレジスタの値は2になるわけです。

  4. つぎの
    
       OUT B
    
    
    でBレジスタの値を出力します。具体的には出力用 LED をBレジスタの 0/1 に応じて光らせます。
    このCPUにおいて、Bレジスタはデータ処理と出力用の作業領域の役目、と覚えておけ ばよいでしょう。Aレジスタは直接出力できない仕様です。

  5. 最後に
    
    L0: JMP L0
    
    
    これは、「ラベル L0 が示すアドレスに制御を移す」ということは、自分自身 を再度実行せよ、ということになります。つまりここで無限ループに入ること になり、実質的なプログラムの終了です。
    TD4 には終了命令が無いので(ある CPU も勿論あります)、処理が 終了したら何もしない無限ループにする、ということでした。

ということで、実はこれは 生の計算機での 例 をアセンブリ言語で書いたものでした。 命令を 数値ではな く 文字列(ニーモニック といいます)で書けたり、また アド レス も数値ではなく ラベル という文字列で書けたりするこ とで、かなり読み書きしやすいのが分かると思います。

おまけ


目次にもどる
講義用スタイル
印刷用スタイル