TEST START
RPUSH
LAD GR1,1;GR1に1を読み込む
;<<市松模様の描画ループ>>
LOOP LD GR2,GR1;GR2にGR1をコピー
SRL GR2,1;GR2を右に1ビットシフト
JOV ODD;オーバーフローしたら奇数なので、ODDに分岐する
EVEN OUT EVENA,LEN;偶数だったら「 X X 」を出力
JUMP SKIP;奇数の出力をスキップする
ODD OUT ODDA,LEN;奇数だったら「X X X」を出力
SKIP LAD GR1,1,GR1;GR1をインクリメント
CPL GR1,=5;GR1を5と比較
JPL FIN;5を超えた場合はFINへ分岐
JUMP LOOP;ループ先頭へ分岐
FIN RPOP
RET
EVENA DC ' X X '
ODDA DC 'X X X'
LEN DC 5
END
TEST START
RPUSH
LAD GR1,1;GR1に1を読み込む
;<<市松模様の描画ループ>>
;GR2にGR1をコピー
;GR2を右に1ビットシフト
;オーバーフローしたら奇数なので、ODDに分岐する
;偶数だったら「 X X 」を出力
;奇数の出力をスキップする
;奇数だったら「X X X」を出力
;GR1をインクリメント
;GR1を5と比較
;5を超えた場合はFINへ分岐
;ループ先頭へ分岐
FIN RPOP
RET
EVENA DC ' X X '
ODDA DC 'X X X'
LEN DC 5
END
TEST START
RPUSH
LAD GR1,1;GR1に1を設定
;<< ここからループ >>
LOOP LD GR2,GR1;GR2にGR1の数を読み込む
ADDL GR2,='0';GR2の値に文字コード「'0'」を加算
ST GR2,SARA;GR2の値をSARAに格納
OUT SARA,LEN;皿の枚数を出力
LAD GR1,1,GR1;GR1をインクリメント
CPL GR1,=10;GR1が10まで達したのか比較(ループを続けるか否かの判断)
JMI LOOP;GR1が10未満であれば、ループは続行
OUT MOJI,LEN2;「サラ割れた」のメッセージ出力
RPOP
RET
SARA DS 1;皿に文字数1枠を確保する
TANI DC 'MA-I';皿の単位の数え方は「枚(まーい)」
LEN DC 5;1枚は「1MA-I」と5文字で表示
MOJI DC 'SARA WARETA!';「皿割れた」の文字列
LEN2 DC 12;上記の皿の文字列の字数
END
TEST START
RPUSH
;GR1に1を設定
;<< ここからループ >>
;GR2にGR1の数を読み込む
;GR2の値に文字コード「'0'」を加算
;GR2の値をSARAに格納
;皿の枚数を出力
;GR1をインクリメント
;GR1が10まで達したのか比較(ループを続けるか否かの判断)
;GR1が10未満であれば、ループは続行
;「サラ割れた」のメッセージ出力
RPOP
RET
SARA DS 1;皿に文字数1枠を確保する
TANI DC 'MA-I';皿の単位の数え方は「枚(まーい)」
LEN DC 5;1枚は「1MA-I」と5文字で表示
MOJI DC 'SARA WARETA!';「皿割れた」の文字列
LEN2 DC 12;上記の皿の文字列の字数
END
TEST START
RPUSH
OUT MOJI,LEN
;GR1にMOJIの先頭アドレスを指定
;GR2に文字数を格納
;大文字に変換するサブルーチンUPPERを呼び出す
OUT MOJI,LEN
RPOP
RET
MOJI DC 'Social Distance'
LEN DC 15
;大文字に変換するサブルーチンUPPER
UPPER RPUSH
;<<大文字判定ループ>>
;GR3に配列MOJIの文字を読み込む
;その文字の文字コードを小文字の「a」と比較
;文字コードがaより小さかったらSKIPへ分岐
;小文字の「z」と比較
;文字コードがzより大きかったらSKIPへ分岐
;文字コードを20引いて「小文字 → 大文字」に変換
;上で大文字にした文字を配列MOJIに格納
;配列MOJIを1つ先に進める
;ループカウンタにしているGR2から1を引く
;ループカウンタがプラスであればLOOPへ
RPOP
RET
END
TEST START
RPUSH
OUT NAME,LEN ;OUT命令で「Enter your favorite name(推しの名前を入力)」を出力
IN OSHI,LENO ;IN命令で推しの名前を入力
OUT OSHI,LENO ;入力した名前を出力
LAD GR1,5 ;GR1に5を読み込む(GR1をループカウンタに使用)
;<<ここからループ>>
LOOP LD GR2,='0' ;GR2に'0'を読み込む
ADDL GR2,GR1 ;出力する為、文字コード'0'(0030)が入っているGR2にGR1を加算
ST GR2,DAYS ;ST命令でGR2の日数をDAYSに格納する
OUT DAYS,LEND ;OUT命令でDAYSに入っている日数を出力
SUBL GR1,=1 ;GR1をデクリメント
CPL GR1,=1 ;GR1の値と1を比較
JPL LOOP ;GR1が1より大きい間はループを繰り返す
;<<ループここまで>>
OUT DAY1,LEND1 ;OUT命令であと1日と出力
OUT MSG,LENM ;OUT命令で推しに「DAISUKI!!」と出力
RPOP
RET
NAME DC 'Enter your favorite name!';文字列「Enter your favorite name!」
LEN DC 25 ;その文字数
OSHI DS 256 ;推しの名前の領域を確保
LENO DS 256 ;推しの名前の文字数の領域を確保
DAYS DS 1 ;日数の領域を確保
LEND DC 7 ;日数の文字数
DAYCOUNT DC 'days.' ;出力する日数の単位
DAY1 DC '1-DAY!! TOMORROW!!' ;あと1日の文字列
LEND1 DC 18 ;あと1日の文字数
MSG DC 'DAISUKI!!' ;文字列「DAISUKI!!」
LENM DC 9 ;その文字数
END
TEST START
RPUSH
;OUT命令で「Enter your favorite name(推しの名前を入力)」を出力
;IN命令で推しの名前を入力
;入力した名前を出力
;GR1に5を読み込む(GR1をループカウンタに使用)
;<<ここからループ>>
;GR2に'0'を読み込む
;出力する為、文字コード'0'(0030)が入っているGR2にGR1を加算
;ST命令でGR2の日数をDAYSに格納する
;OUT命令でDAYSに入っている日数を出力
;GR1をデクリメント
;GR1の値と1を比較
;GR1が1より大きい間はループを繰り返す
;<<ループここまで>>
;OUT命令であと1日と出力
;OUT命令で推しに「DAISUKI!!」と出力
RPOP
RET
NAME DC 'Enter your favorite name!';文字列「Enter your favorite name!」
LEN DC 25 ;その文字数
OSHI DS 256 ;推しの名前の領域を確保
LENO DS 256 ;推しの名前の文字数の領域を確保
DAYS DS 1 ;日数の領域を確保
LEND DC 7 ;日数の文字数
DAYCOUNT DC 'days.' ;出力する日数の単位
DAY1 DC '1-DAY!! TOMORROW!!' ;あと1日の文字列
LEND1 DC 18 ;あと1日の文字数
MSG DC 'DAISUKI!!' ;文字列「DAISUKI!!」
LENM DC 9 ;その文字数
END
TEST START
RPUSH
IN LOCATE,LEN ;観光地の番号を入力する
LD GR1,LOCATE ;GR1に入力した観光地の番号を読み込む
CPL GR1,='1' ;GR1と番号'1'を比較
JNZ L2 ;等しくなければL2に分岐する
OUT LOCATE1,LEN1 ;1であれば「YOKOHAMA」と出力
JUMP FIN ;ラベルFINに分岐
L2 CPL GR1,='2' ;ラベルL2ではGR1と'2'を比較する
JNZ L3 ;等しくなければL3に分岐する
OUT LOCATE2,LEN2 ;2であれば「SKYTREE」をと出力
JUMP FIN ;ラベルFINに分岐
L3 CPL GR1,='3' ;ラベルL3ではGR1と'3'を比較する
JNZ L4 ;等しくなければL4に分岐する
OUT LOCATE3,LEN3 ;3であれば「ONJYUKU」と出力
JUMP FIN ;ラベルFINに分岐
L4 CPL GR1,='4' ;ラベルL4ではGR1と'4'を比較する
JNZ OTHER ;等しくなければOTHERに分岐する
OUT LOCATE4,LEN4 ;4であれば「ODAIBA」と出力
JUMP FIN ;ラベルFINに分岐
OTHER OUT NOTHING,LEN5 ;ラベルOTHERでは文字列NOTHINGと文字数LEN5で出力
FIN RPOP
RET
LOCATE DS 256 ;場所の領域を確保
LEN DC 1 ;文字数1文字
LOCATE1 DC 'YOKOHAMA' ;最初の場所横浜
LEN1 DC 8 ;横浜の文字数
LOCATE2 DC 'SKYTREE' ;2番目の場所スカイツリー
LEN2 DC 7 ;スカイツリーの文字数
LOCATE3 DC 'ONJYUKU' ;3番目の場所御宿
LEN3 DC 7 ;御宿の文字数
LOCATE4 DC 'ODAIBA' ;4番目の場所お台場
LEN4 DC 6 ;お台場の文字数
NOTHING DC 'PREASE ENTER 1-4' ;1から4までを入力するようにメッセージ
LEN5 DC 16 ;その他の場合の文字数
END
TEST START
RPUSH
;観光地の番号を入力する
;GR1に入力した観光地の番号を読み込む
;GR1と番号'1'を比較
;等しくなければL2に分岐する
;1であれば「YOKOHAMA」と出力
;ラベルFINに分岐
;ラベルL2ではGR1と'2'を比較する
;等しくなければL3に分岐する
;2であれば「SKYTREE」をと出力
;ラベルFINに分岐
;ラベルL3ではGR1と'3'を比較する
;等しくなければL4に分岐する
;3であれば「ONJYUKU」と出力
;ラベルFINに分岐
;ラベルL4ではGR1と'4'を比較する
;等しくなければOTHERに分岐する
;4であれば「ODAIBA」と出力
;ラベルFINに分岐
;ラベルOTHERでは文字列NOTHINGと文字数LEN5で出力
FIN RPOP
RET
LOCATE DS 256 ;場所の領域を確保
LEN DC 1 ;文字数1文字
LOCATE1 DC 'YOKOHAMA' ;最初の場所横浜
LEN1 DC 8 ;横浜の文字数
LOCATE2 DC 'SKYTREE' ;2番目の場所スカイツリー
LEN2 DC 7 ;スカイツリーの文字数
LOCATE3 DC 'ONJYUKU' ;3番目の場所御宿
LEN3 DC 7 ;御宿の文字数
LOCATE4 DC 'ODAIBA' ;4番目の場所お台場
LEN4 DC 6 ;お台場の文字数
NOTHING DC 'PREASE ENTER 1-4' ;1から4までを入力するようにメッセージ
LEN5 DC 16 ;その他の場合の文字数
END
TEST START
RPUSH
LAD GR2,0 ;GR2に目印の0を設定
PUSH 0,GR2 ;スタックにGR2の値を積む
LAD GR1,BEFORE ;GR1に配列BEFOREの先頭アドレスを設定
OUT BEFORE,LEN ;配列BEFOREを出力
;<<スタックに積むループPUSH>>
LOOPPUSH LD GR2,0,GR1 ;GR2に配列BEFOREのGR1が指し示す文字を読み込む
CPL GR2,=0 ;目印の0まで到達したか、GR2の文字と目印0を比較する
JZE PREPOP ;目印0まで到達したら配列AFTERの準備でPREPOPまで分岐する
PUSH 0,GR2 ;処理中の場合は読み込んだ文字をスタックに積む
LAD GR1,1,GR1 ;配列BEFOREの位置を1つ先に進めるのでGR1をインクリメントする
JUMP LOOPPUSH ;読み込みとスタックに積む処理が完了するまでLOOPPUSHを繰り返す
;配列AFTERの出力準備
PREPOP LAD GR1,AFTER ;GR1に配列AFTERのアドレスを設定
;<<スタックから取り出すループPOP>>
LOOPPOP POP GR2 ;スタックから1文字取り出してGR2に格納
CPL GR2,=0 ;文字の取り出しが最後の目印まで到達したか確認
JZE FIN ;等しい(取り出し処理が終了)場合はFINラベルへ
ST GR2,0,GR1 ;処理中ならGR2で取り出した文字をGR1を使って配列AFTERに格納
LAD GR1,1,GR1 ;配列AFTERの位置を1つ先に進めるのでGR1をインクリメントする
JUMP LOOPPOP ;出力処理が終わるまでLOOPPOPを繰り返す
FIN OUT AFTER,LEN ;配列AFTERを出力する
RPOP
RET
BEFORE DC 'KYMC'
END DC 0
AFTER DS 100
LEN DC 4
END
TEST START
RPUSH
;GR2に目印の0を設定
;スタックにGR2の値を積む
;GR1に配列BEFOREの先頭アドレスを設定
;配列BEFOREを出力
;<<スタックに積むループPUSH>>
;GR2に配列BEFOREのGR1が指し示す文字を読み込む
;目印の0まで到達したか、GR2の文字と目印0を比較する
;目印0まで到達したら配列AFTERの準備でPREPOPまで分岐する
;処理中の場合は読み込んだ文字をスタックに積む
;配列BEFOREの位置を1つ先に進めるのでGR1をインクリメントする
;読み込みとスタックに積む処理が完了するまでLOOPPUSHを繰り返す
;配列AFTERの出力準備
;GR1に配列AFTERのアドレスを設定
;<<スタックから取り出すループPOP>>
;スタックから1文字取り出してGR2に格納
;文字の取り出しが最後の目印まで到達したか確認
;等しい(取り出し処理が終了)場合はFINラベルへ
;処理中ならGR2で取り出した文字をGR1を使って配列AFTERに格納
;配列AFTERの位置を1つ先に進めるのでGR1をインクリメントする
;出力処理が終わるまでLOOPPOPを繰り返す
;配列AFTERを出力する
RPOP
RET
BEFORE DC 'KYMC'
END DC 0
AFTER DS 100
LEN DC 4
END
TEST START
RPUSH
LAD GR1,0 ;GR1に配列BEFOREの先頭の添え字0を読み込む
LAD GR2,0 ;GR2に配列AFTERの先頭の添え字0を読み込む
;<<ここからループ>>
LOOP CPL GR2,=7 ;GR2とAFTER(GOUKAKU)の文字数7文字を比較
JZE FIN ;等しかったらFINへ分岐
LD GR3,BEFORE,GR1 ;GR3に配列BEFOREの文字を1つずつ読み込む
ST GR3,AFTER,GR2 ;GR3の文字を配列AFTERに格納
LAD GR2,1,GR2 ;AFTERのGR2をインクリメント
LAD GR1,2,GR1 ;BEFOREのGR1を2つ増やす
JUMP LOOP ;LOOPへ分岐
;<<ここまでループ>>
FIN OUT AFTER,ALEN ;配列AFTERを出力
RPOP
RET
BEFORE DC 'GROGUBKCAMKYU' ;配列BEFOREを用意
AFTER DS 7 ;配列AFTERに領域7つ分を確保
ALEN DC 7 ;AFTERの文字数ALENを7文字とする
END
TEST START
RPUSH
;GR1に配列BEFOREの先頭の添え字0を読み込む
;GR2に配列AFTERの先頭の添え字0を読み込む
;<<ここからループ>>
;GR2とAFTER(GOUKAKU)の文字数7文字を比較
;等しかったらFINへ分岐
;GR3に配列BEFOREの文字を1つずつ読み込む
;GR3の文字を配列AFTERに格納
;AFTERのGR2をインクリメント
;BEFOREのGR1を2つ増やす
;LOOPへ分岐
;<<ここまでループ>>
;配列AFTERを出力
RPOP
RET
BEFORE DC 'GROGUBKCAMKYU' ;配列BEFOREを用意
AFTER DS 7 ;配列AFTERに領域7つ分を確保
ALEN DC 7 ;AFTERの文字数ALENを7文字とする
END
TEST START
RPUSH
LAD GR1,4;←GR1に数を指定
SRL GR1,1;1ビット右へシフト
JOV OVER;オーバーフローした場合はラベルOVERへジャンプ
OUT EVEN,LEN;偶数の旅先「北海道」を出力
JUMP FIN;ラベルFINへジャンプ
OVER OUT ODD,LEN2;奇数の旅先「沖縄」を出力
FIN RPOP;終了のFINラベル
RET
EVEN DC 'HOKKAIDO';偶数ラベル
LEN DC 8;文字数
ODD DC 'OKINAWA';奇数ラベル
LEN2 DC 7;文字数
END
TEST START
RPUSH
LAD GR1,7;←GR1に数を指定
SRL GR1,1;1ビット右へシフト
JOV OVER;オーバーフローした場合はラベルOVERへジャンプ
OUT EVEN,LEN;偶数の旅先「北海道」を出力
JUMP FIN;ラベルFINへジャンプ
OVER OUT ODD,LEN2;奇数の旅先「沖縄」を出力
FIN RPOP;終了のFINラベル
RET
EVEN DC 'HOKKAIDO';偶数ラベル
LEN DC 8;文字数
ODD DC 'OKINAWA';奇数ラベル
LEN2 DC 7;文字数
END
TEST START
RPUSH
;←GR1に数を指定
;1ビット右へシフト
;オーバーフローした場合はラベルOVERへジャンプ
;偶数の旅先「北海道」を出力
;ラベルFINへジャンプ
;奇数の旅先「沖縄」を出力
FIN RPOP;終了のFINラベル
RET
EVEN DC 'HOKKAIDO';偶数ラベル
LEN DC 8;文字数
ODD DC 'OKINAWA';奇数ラベル
LEN2 DC 7;文字数
END
TEST START
RPUSH
IN FOOD,NUM ;好きな食べ物を入力
OUT FOOD,NUM ;その食べ物を出力
OUT MOJI,LEN ;文字列「食べたい」を出力
RPOP
RET
FOOD DS 30;食べ物FOODの格納場所を確保しておく
NUM DS 1;インプットボックスに入力した、文字数NUMの格納場所を確保しておく
MOJI DC 'TABETAI!!';文字列に「食べたい」を格納しておく
LEN DC 9;「食べたい!!」の文字数を格納しておく
END
TEST START
RPUSH
;好きな食べ物を入力
;その食べ物を出力
;文字列「食べたい」を出力
RPOP
RET
;食べ物FOODの格納場所を確保しておく
;INPUTBOXに入力した文字数NUMの格納場所を確保しておく
;文字列に「食べたい(TABETAI!!)」を格納しておく
;「食べたい」の文字数を格納しておく
END