[今日のPiet]GridPietGenerator入門編A(命令チートシート1)
('21/8/21 追加)pop命令の解説を追加
('21/8/27 追加)チートシートその2が出来ました
どもです。
入門編「A」です。16進数ではありません。
アルファベットです。番外編その1です。
今回は、前回の解説で出てきた命令をまとめます。
ちなみに、前回の記事はこちら。
ymos-hobby-programing.hatenablog.com
('21/8/27 追記)
チートシートその2が出来ました。
ymos-hobby-programing.hatenablog.com
チートシート1・2で処理フローファイルを書くのに必要な知識は
95%くらい網羅されています(多分)。
命令解説
push命令
概要:プッシュ
書き方:push引数
入力:なし
スタック変化:あり(0→1)
出力:なし
説明:引数で与えた正の整数値Nをプッシュします。
引数はpush
の文字列の直後に数字のみで記入します。
push
と引数の間を、半角スペース、タブなどの区切り文字で区切ってはいけません。
引数は正の整数です。0や負の数は指定できません。
あと、マニアックな注意ですが、引数は10進数で指定してください。
例:push10
、push4
など
dup命令
概要:コピー
書き方:dup
入力:なし
スタック変化:あり(1→2)
出力:なし
説明:スタック最上部の値をコピーして、コピーをスタックにプッシュします。
実行時にスタックに値がない場合は、実行時エラーとなります。
(この命令は無視されて次の命令が実行されます。)
mul命令
概要:乗算
書き方:mul
入力:なし
スタック変化:あり(2→1)
出力:なし
説明:スタック最上部の2つの値をポップして、最上部にあった値と、その下にあった値を掛け算し、結果をスタックにプッシュします。
実行時にスタックに1つ以下の値しかない場合は、実行時エラーとなります。
(この命令は無視されて次の命令が実行されます。)
if命令
概要:条件分岐
書き方:if:ラベル1:ラベル2
、または、if::ラベル2
、または、if:ラベル1:
入力:なし
スタック変化:あり(1→0)
出力:なし
説明:スタックの最上部から値をひとつポップします。
その値が、
- 0でないなら、1つめのラベルにジャンプします。
- 1つめのラベルが明記されている場合は、そのラベル
:ラベル1
にジャンプします。 - 1つめのラベルが省略されている場合は、if命令の直後の命令が実行されます。
- 1つめのラベルが明記されている場合は、そのラベル
- 0なら、2つめのラベルにジャンプします。
- 2つめのラベルが明記されている場合は、そのラベル
:ラベル2
にジャンプします。 - 2つめのラベルが省略されている場合は、if命令の直後の命令が実行されます。
- 2つめのラベルが明記されている場合は、そのラベル
ラベルの省略は片方のみ可能です。両方同時に省略することはできません。
if命令に続くコロン:
の前後に、半角スペースなどの区切り文字を入れてはいけません。
補足:書いていて気づきましたが、if命令の実行時にスタックに値がない場合の動作は未定義です。
何が起こるかわかりません。実装の都合上、今から規定するのは難しいため、ご注意ください。
sub命令
概要:減算
書き方:sub
入力:なし
スタック変化:あり(2→1)
出力:なし
説明:スタック最上部の2つの値をポップして、最上部にあった値を、その下にあった値から引いて、結果をスタックにプッシュします。
実行時にスタックに1つ以下の値しかない場合は、実行時エラーとなります。
(この命令は無視されて次の命令が実行されます。)
pop命令
概要:ポップ
書き方:pop
入力:なし
スタック変化:あり(1→0)
出力:なし
説明:スタック最上部の値を1つだけポップします。
実行時にスタックに値がない場合は、実行時エラーとなります。
(この命令は無視されて次の命令が実行されます。)
end命令
概要:プログラム終了
書き方:end
入力:なし
スタック変化:なし
出力:なし
説明:プログラムを停止します。
outn命令
概要:数値出力
書き方:outn
入力:なし
スタック変化:あり(1→0)
出力:数値N
説明:スタック最上部の値Nをポップし、ポップした値を数値として出力します。
実行時にスタックに値がない場合は、実行時エラーとなります。
(この命令は無視されて次の命令が実行されます。)
おわりに
まあ今日はこの程度で。
チートシート的に使っていただけるとありがたいです。
では。