| <program> | ::= | <decl><body> |
| <decl> | ::= | VAR_SET (ENTER) ((id)=(num))+ |
| <body> | ::= | PROGRAM (ENTER)<command>+ |
| <command> | ::= | (label): | INC X | DEC X | MOV X Y | BRANCH X L | INPUT X | OUTPUT X | ADD X Y | ALLOC X Y | STOREI X | LOADI X | STOP |
※「#」を記述すると,以降は改行されるまでコメントとなり無視される.
入力となる高級アセンブリプログラムは変数宣言部と本体部からなる
“VAR_SET”と記述することで変数宣言部を開始する.
各変数の宣言は,“(id)=(num)”の一行で行われる.
(id)は英文字から始まる任意の文字列とする.
(num)は10進数もしくは3進数20桁の値とする.3進数の場合最後にtをつける(例:00000000111111112222t).
“PROGMRA”と記述することで本体部を開始する.
本体部には,ラベルを複数付加可能な命令を次の形で一行に一命令ずつ記述する.
“(label:)* command”
labelは英文字から始まる任意の文字列とする.
commandの詳細は以下の表の通り.
ただし,X,Y,Lは変数宣言部で宣言された変数で,IPはプログラムカウンタとする.
| command | 操作 | 備考 |
| INC X | X++, IP++ | インクリメント |
| DEC X | X--, IP++ | デクリメント |
| MOV X Y | Y:=X, IP++ | 変数コピー |
| BRANCH X L | if X=0 then IP:=L else IP++ | ゼロ判定分岐 |
| INPUT X | X:=input(), IP++ | 入力 |
| OUTPUT X | output(X), IP++ | 出力 |
| ADD X Y | Y:=X+Y, IP++ | 加算 |
| STOP | halt | 停止命令 |
| ALLOC X Y | X:=VAR_ALLOC, VAR_ALLOC:=VAR_ALLOC+Y, IP++ | 領域確保 |
| STOREI X | [INDEX]:=X, IP++ | ストア |
| LOADI X | X:=[INDEX], IP++ | ロード |