CASL U - プログラミングの基礎(命令) |
CALSUの命令
命令は、4種類のアセンブラ命令(START,END,DS,DC)、4種類のマクロ命令(IN,OUT,RPUSH,RPOP)及び機械語命令(COMETUの命令)からなる。ここではそれらの命令の書式を示す。プログラムは次のページから。
書式で使用されている記号等の意味は次のとおりである。r, r1, r2 | いずれもGRを示す。GRは、記号GR0〜GR7で指定する。 | |
x | 指標レジスタとして用いるGRを示す。指定できるGRはGR1 〜 GR7である。 | |
adr | アドレスを示す。アドレスは、10 進定数、16 進定数、アドレス定数又はリテラルで指定する。 リテラルは、一つの10進定数、16進定数又は文字定数の前に等号(=)を付けて記述する。CASLUは、等号の後の定数をオペランドとするDC命令を生成し、そのアドレスをadrの値とする。 |
|
[ ] | [ ]内の指定は省略できることを示す。 | |
( ) | ( )内のレジスタまたはアドレスに格納されている内容を示す。 | |
実効アドレス | adrとxの内容との論理加算値またはその値が示す番地である。 | |
← | 演算結果を、左辺のレジスタ又はアドレスに格納することを示す。 | |
+L ,−L | 論理加算、論理減算を示す。 | |
FRの設定 | ○: | 設定されることを示す。 |
○*1: | 設定されることを示す。ただし、OFには0 が設定される。 | |
○*2: | 設定されることを示す。ただし、OFにはレジスタから最後に送り出されたビットの値が設定される。 | |
−: | 実行前の値が保持されることを示す。 |
ラベル | 命令コード | オペランド | 機能 | FRの設定 | ||||||||||||||||||||||||||||
アセンブラ命令 | ||||||||||||||||||||||||||||||||
ラベル | START | [実行開始番地] | プログラムの先頭を定義 プログラムの実行開始番地を定義 他のプログラムで参照する入口名を定義 |
|||||||||||||||||||||||||||||
END | プログラムの終わりを明示 | |||||||||||||||||||||||||||||||
[ラベル] | DS | 語数 | 領域を確保 | |||||||||||||||||||||||||||||
[ラベル] | DC | 定数[,定数]… | 定数を定義 | |||||||||||||||||||||||||||||
機械語命令 (1)ロード,ストア,ロードアドレス命令 |
||||||||||||||||||||||||||||||||
[ラベル] | LD | r1, r2 r, adr [,x] |
r1 ←(r2) r ←(実効アドレス) |
○*1 | ||||||||||||||||||||||||||||
[ラベル] | ST | r, adr [,x] | 実効アドレス←(r) | − | ||||||||||||||||||||||||||||
[ラベル] | LAD | r, adr [,x] | r ← 実効アドレス | − | ||||||||||||||||||||||||||||
(2)算術,論理演算命令 | ||||||||||||||||||||||||||||||||
[ラベル] | ADDA | r1, r2 r, adr [,x] |
r1 ←(r1)+(r2) r ←(r)+(実効アドレス) |
算術加算 | ○ | |||||||||||||||||||||||||||
[ラベル] | ADDL | r1, r2 r, adr [,x] |
r1 ←(r1)+L(r2) r ←(r)+L(実効アドレス) |
論理加算 | ○ | |||||||||||||||||||||||||||
[ラベル] | SUBA | r1, r2 r, adr [,x] |
r1 ←(r1)−(r2) r ←(r)−(実効アドレス) |
算術減算 | ○ | |||||||||||||||||||||||||||
[ラベル] | SUBL | r1, r2 r, adr [,x] |
r1 ←(r1)−L(r2) r ←(r)−L(実効アドレス) |
論理減算 | ○ | |||||||||||||||||||||||||||
[ラベル] | AND | r1, r2 r, adr [,x] |
r1 ←(r1) AND (r2) r ←(r) AND (実効アドレス) |
論理積 | ○*1 | |||||||||||||||||||||||||||
[ラベル] | OR | r1, r2 r, adr [,x] |
r1 ←(r1) OR (r2) r ←(r) OR (実効アドレス) |
論理和 | ○*1 | |||||||||||||||||||||||||||
[ラベル] | XOR | r1, r2 r, adr [,x] |
r1 ←(r1) XOR (r2) r ←(r) XOR (実効アドレス) |
排他的論理和 | ○*1 | |||||||||||||||||||||||||||
(3)比較演算命令 | ||||||||||||||||||||||||||||||||
[ラベル] | CPA | r1, r2 r, adr [,x] |
(r1)と(r2)または(r)と(実効アドレス)の算術比較又は論理比較を行い、比較結果によって、FR に次の値を設定する。
|
○*1 | ||||||||||||||||||||||||||||
[ラベル] | CPL | r1, r2 r, adr [,x] |
||||||||||||||||||||||||||||||
(4)シフト演算命令 | ||||||||||||||||||||||||||||||||
[ラベル] | SLA | r, adr [,x] | 符号を除き(r)を実効アドレスで指定したビット数だけ左または右にシフトする。 シフトの結果、空いたビット位置には、左シフトのときは0、右シフトのときは符号と同じものが入る。 |
○*2 | ||||||||||||||||||||||||||||
[ラベル] | SRA | r, adr [,x] | ||||||||||||||||||||||||||||||
[ラベル] | SLL | r, adr [,x] | 符号を含み(r)を実効アドレスで指定したビット数だけ左または右にシフトする。 シフトの結果、空いたビット位置には0が入る。 |
|||||||||||||||||||||||||||||
[ラベル] | SRL | r, adr [,x] | ||||||||||||||||||||||||||||||
(5)分岐命令 | ||||||||||||||||||||||||||||||||
[ラベル] | JPL | adr [,x] | FR の値によって、実効アドレスに分岐する。分岐しないときは、次の命令に進む。
|
− | ||||||||||||||||||||||||||||
[ラベル] | JMI | adr [,x] | ||||||||||||||||||||||||||||||
[ラベル] | JNZ | adr [,x] | ||||||||||||||||||||||||||||||
[ラベル] | JZE | adr [,x] | ||||||||||||||||||||||||||||||
[ラベル] | JOV | adr [,x] | ||||||||||||||||||||||||||||||
[ラベル] | JUMP | adr [,x] | 無条件に実効アドレスに分岐する。 | |||||||||||||||||||||||||||||
(6)スタック操作命令 | ||||||||||||||||||||||||||||||||
[ラベル] | PUSH | adr [,x] | SP ←(SP)−L 1 , (SP)← 実効アドレス | − | ||||||||||||||||||||||||||||
[ラベル] | POP | r | r ←((SP)), SP ←(SP)+L 1 | |||||||||||||||||||||||||||||
(7)コール,リターン命令 | ||||||||||||||||||||||||||||||||
[ラベル] | CALL | adr [,x] | SP ←(SP)−L 1 , (SP)←(PR), PR ← 実効アドレス | − | ||||||||||||||||||||||||||||
[ラベル] | RET | PR ←((SP)), SP ←(SP)+L 1 | ||||||||||||||||||||||||||||||
(8)その他 | ||||||||||||||||||||||||||||||||
[ラベル] | SVC | adr [,x] | 実効アドレスを引数として割出しを行う。実行後のGRとFRは不定となる。 | − | ||||||||||||||||||||||||||||
[ラベル] | NOP | 何もしない。 | ||||||||||||||||||||||||||||||
(9)マクロ命令 | ||||||||||||||||||||||||||||||||
[ラベル] | IN | 入力領域,入力文字長領域 | 入力装置から文字データを入力する。 | 不定 | ||||||||||||||||||||||||||||
[ラベル] | OUT | 出力領域,出力文字長領域 | 出力装置へ文字データを出力する。 | |||||||||||||||||||||||||||||
[ラベル] | RPUSH | GRの内容をGR1,GR2,…,GR7の順でスタックに格納する。 | ||||||||||||||||||||||||||||||
[ラベル] | RPOP | スタックの内容を取り出し、GR7,GR6,…,GR1の順でGRに格納する。 |
CASL U | Copyright © 2003,2017 Hiroshi Masuda |