[今日の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)

f:id:y-mos:20210818230054p:plainf:id:y-mos:20210818230132p:plain
push

出力:なし

説明:引数で与えた正の整数値Nをプッシュします。

引数はpushの文字列の直後に数字のみで記入します。

pushと引数の間を、半角スペース、タブなどの区切り文字で区切ってはいけません。

引数は正の整数です。0や負の数は指定できません。

あと、マニアックな注意ですが、引数は10進数で指定してください。

例:push10push4など

dup命令

概要:コピー

書き方:dup

入力:なし

スタック変化:あり(1→2)

f:id:y-mos:20210818230353p:plainf:id:y-mos:20210818230335p:plain
dup

出力:なし

説明:スタック最上部の値をコピーして、コピーをスタックにプッシュします。

実行時にスタックに値がない場合は、実行時エラーとなります。

(この命令は無視されて次の命令が実行されます。)

mul命令

概要:乗算

書き方:mul

入力:なし

スタック変化:あり(2→1)

f:id:y-mos:20210818230721p:plainf:id:y-mos:20210818230728p:plain
mul

出力:なし

説明:スタック最上部の2つの値をポップして、最上部にあった値と、その下にあった値を掛け算し、結果をスタックにプッシュします。

実行時にスタックに1つ以下の値しかない場合は、実行時エラーとなります。

(この命令は無視されて次の命令が実行されます。)

if命令

概要:条件分岐

書き方:if:ラベル1:ラベル2、または、if::ラベル2、または、if:ラベル1:

入力:なし

スタック変化:あり(1→0)

f:id:y-mos:20210818232159p:plainf:id:y-mos:20210818232220p:plain
if

出力:なし

説明:スタックの最上部から値をひとつポップします。

その値が、

  • 0でないなら、1つめのラベルにジャンプします。
    • 1つめのラベルが明記されている場合は、そのラベル:ラベル1にジャンプします。
    • 1つめのラベルが省略されている場合は、if命令の直後の命令が実行されます。
  • 0なら、2つめのラベルにジャンプします。
    • 2つめのラベルが明記されている場合は、そのラベル:ラベル2にジャンプします。
    • 2つめのラベルが省略されている場合は、if命令の直後の命令が実行されます。

ラベルの省略は片方のみ可能です。両方同時に省略することはできません。

if命令に続くコロン:の前後に、半角スペースなどの区切り文字を入れてはいけません。

補足:書いていて気づきましたが、if命令の実行時にスタックに値がない場合の動作は未定義です。

何が起こるかわかりません。実装の都合上、今から規定するのは難しいため、ご注意ください。

sub命令

概要:減算

書き方:sub

入力:なし

スタック変化:あり(2→1)

f:id:y-mos:20210818230721p:plainf:id:y-mos:20210818220402p:plain
sub

出力:なし

説明:スタック最上部の2つの値をポップして、最上部にあった値、その下にあった値から引いて、結果をスタックにプッシュします。

実行時にスタックに1つ以下の値しかない場合は、実行時エラーとなります。

(この命令は無視されて次の命令が実行されます。)

pop命令

概要:ポップ

書き方:pop

入力:なし

スタック変化:あり(1→0)

f:id:y-mos:20210818230132p:plainf:id:y-mos:20210818230054p:plain
pop

出力:なし

説明:スタック最上部の値を1つだけポップします。

実行時にスタックに値がない場合は、実行時エラーとなります。

(この命令は無視されて次の命令が実行されます。)

end命令

概要:プログラム終了

書き方:end

入力:なし

スタック変化:なし

出力:なし

説明:プログラムを停止します。

outn命令

概要:数値出力

書き方:outn

入力:なし

スタック変化:あり(1→0)

f:id:y-mos:20210818231650p:plainf:id:y-mos:20210818230054p:plain
outn

出力:数値N

説明:スタック最上部の値Nをポップし、ポップした値を数値として出力します。

実行時にスタックに値がない場合は、実行時エラーとなります。

(この命令は無視されて次の命令が実行されます。)

おわりに

まあ今日はこの程度で。

チートシート的に使っていただけるとありがたいです。

では。