以下「COMETII」という仮想のコンピュータを取り上げて説明
アセンブラ言語とは?
CPUに命令を送るための、低水準言語。機械言語に近い言語。
- CPUの種類に応じて記述の仕方や文法が異なる。
- 速度が求められる場面で威力を発揮する。
- 機械言語(CPUは2進数の機械言語しか理解できない)の命令に1対1で対応させた文字列。
- コンピュータのハードウエアが動作する単位でプログラムを記述する。
- アセンブリ"assembly"は、組み立てという意味。
いつアセンブラ言語は必要?
- 現在ではアセンブラはめったに使われず、ほとんどのプログラマーがより効率の良い高水準言語を使っている。
- いろいろなサイトを見ても、「アセンブラは○○の開発に便利だよ」的な紹介のされ方はしていなかった。
ではアセンブラを勉強したほうがいい理由は?
- アセンブラさんは、機械言語にとても近い存在。
- だから勉強するとCPUやメモリなどプログラミング言語がハードウェアをどう動かしているのかよく理解できるようになり、コンピュータを見る視点がぐっと深くなる!
COMETIIの構成
COMETIIのハードウエアを構成する主要な装置は,3つ。
- CPU コンピュータの頭脳
- メモリ プログラム(命令とデータ)を記憶する
- I/O 周辺装置とコンピュータ本体を接続する
演算のプロセスは,
1. メモリ内のデータを一旦CPUに読み出し,
2. CPU内で演算を行い,
3. その結果をメモリに書き込む。
文法
文法は1つだけ!
###命令 + 目的語
例えば、
LD GR1,A
の場合
LD => 命令 ロード(装填)しなさい!
GR1,A => GR1レジスタにA番地のデータを
レジスタとは
CPU内のデータを格納する場所のこと。
COMETIIのレジスタには,
1. プログラムレジスタ(PR)(プログラムカウンタとも呼ぶ)
2. スタックポインタ(SP)
3. フラグレジスタ(FR)
4. 汎用レジスタ(GR0~GR7) <= 8つある
- レジスタのサイズはFRのみが3ビットで,他はすべて16ビットである。
アセンブラのプログラムの目的語に指定できるのは,SPとGR0~GR7だけです。
命令の種類( CPUにできること )
表1●データの入出力を行う命令
ニーモニック | 意味 | 機能 |
---|---|---|
LD | LoaD | メモリーからCPUへデータを読み込む |
ST | STore | CPUからメモリーにデータを書き出す |
LAD | Load ADdress | CPUのレジスタに値を設定する |
PUSH | PUSH | スタックにデータを書き出す |
POP | POP | スタックからデータを読み込む |
SVC | SuperVisor Call | I/Oとの入出力を行う |
表2●データの演算を行う命令
ニーモニック | 意味 | 機能 |
---|---|---|
ADDA | ADD Arithmetic | 算術加算を行う |
ADDL | ADD Logical | 論理加算を行う |
SUBA | SUBtract Arithmetic | 算術減算を行う |
SUBL | SUBtract Logical | 論理減算を行う |
AND | AND | 論理積(AND演算)を行う |
OR | OR | 論理和(OR演算)を行う |
XOR | eXclusive OR | 排他的論理和(XOR演算)を行う |
CPA | ComPare Arithmetic | 算術比較を行う |
CPL | ComPare Logical | 論理比較を行う |
SLA | Shift Left Arithmetic | 算術左シフトを行う |
SRA | Shift Right Arithmetic | 算術右シフトを行う |
SLL | Shift Left Logical | 論理左シフトを行う |
SRL | Shift Right Logical | 論理右シフトを行う |
NOP | NO Operation | 何もしない |
表3●プログラムの流れを制御する命令
ニーモニック | 意味 | 機能 |
---|---|---|
JPL | Jump on PLus | 演算結果がプラスの場合に分岐する |
JMI | Jump on MInus | 演算結果がマイナスの場合に分岐する |
JNZ | Jump on Non Zero | 演算結果がゼロでない場合に分岐する |
JZE | Jump on ZEro | 演算結果がゼロの場合に分岐する |
JOV | Jump on OVerflow | 演算結果が桁あふれの場合に分岐する |
JUMP | JUMP | 無条件で分岐する |
CALL | CALL | 主プログラムから副プログラムを呼び出す |
RET | RETurn | 副プログラムから主プログラムに戻る |
参考サイト
アセンブラを学ぶ意義
矢沢 久雄 グレープシティ アドバイザリースタッフ
情報処理入門 アセンブラ言語編 (全4レッスン)
アセンブリ言語の入門者が勉強すべきこと7つと参考書6選を紹介!
第1回「レジスタ」を知るとCPUの細かな処理が見えてくる