作品プログラム
- 動作環境
- Sumire 2.0.1339
- 投稿者
- ohisama
- 投稿日
- 2025-08-07 19:15:36
- ダウンロード数
- 95
作品のプログラム
ilasmというアセンブルを作る。
ilasmをRUNする。
アセンブルとは
+コード
+コード数
+スタック1
+スタック2
+n
+i
+文字列スタック
はじめの手順
コードは{}
1を コード数に 入れる
「 ldc.i4 100 」を アセンブラし
「 stloc n 」を アセンブラし
「 ldc.i4 1 」を アセンブラし
「 stloc i 」を アセンブラし
「loop: 」を アセンブラし
「 ldloc i 」を アセンブラし
「 ldloc n 」を アセンブラし
「 bgt bye 」を アセンブラし
「 ldloc i 」を アセンブラし
「 ldc.i4 15 」を アセンブラし
「 rem 」を アセンブラし
「 brfalse fb 」を アセンブラし
「 ldloc i 」を アセンブラし
「 ldc.i4 5 」を アセンブラし
「 rem 」を アセンブラし
「 brfalse b 」を アセンブラし
「 ldloc i 」を アセンブラし
「 ldc.i4 3 」を アセンブラし
「 rem 」を アセンブラし
「 brfalse f 」を アセンブラし
「 ldloc i 」を アセンブラし
「 call void [mscorlib]System.Console::WriteLine(int32)」を アセンブラし
「 br tugi 」を アセンブラし
「fb: 」を アセンブラし
「 ldstr "fizzbuzz"」を アセンブラし
「 br print 」を アセンブラし
「b: 」を アセンブラし
「 ldstr "buzz"」を アセンブラし
「 br print 」を アセンブラし
「f: 」を アセンブラし
「 ldstr "fizz"」を アセンブラし
「print: 」を アセンブラし
「 call void [mscorlib]System.Console::WriteLine(string)」を アセンブラし
「tugi: 」を アセンブラし
「 ldloc i 」を アセンブラし
「 ldc.i4 1 」を アセンブラし
「 add 」を アセンブラし
「 stloc i 」を アセンブラし
「 br loop 」を アセンブラし
「bye: 」を アセンブラし
「 ret 」を アセンブラし
コードを報告する
コード数を報告する
終わり
[行]をアセンブラする手順
コード(コード数)は 行
コード数は コード数 + 1
終わり
[ラベル1]で行検索する手順
ラベル1は ラベル1 & 「:」
数2は 5
pcは 1
「行検索」を報告する
ラベル1を報告する
繰り返す
pc>コード数なら 繰り返しを抜け出す
文字列1は コード(pc)
文字列1を「 」で区切って、 単語とする
単語(1)が ラベル1なら
数2は pc
繰り返しを抜け出す
そして
pcは pc + 1
そして
数2を報告する
数2を 返す
終わり
自分をRUNする手順
スタック1は 0
スタック2は 0
nは 0
iは 0
pcは 1
繰り返す
pc>43なら
「終了」を表示する
繰り返しを抜け出す
そして
文字列1は、コード(pc)
文字列1を「 」で区切って、 単語とする
//単語(2)を表示する
単語(2)が「ret」なら
「ret」を報告する
繰り返しを抜け出す
他で単語(2)が「rem」なら
スタック1は スタック2 % スタック1
他で単語(2)が「add」なら
スタック1は スタック2 + スタック1
他で単語(2)が「call」なら
単語(4)が 「[mscorlib]System.Console::WriteLine(int32)」なら
スタック1を 表示する
他なら
文字列スタックを 表示する
そして
他で単語(2)が「ldloc」なら
単語(3)が「n」なら
スタック2は スタック1
スタック1は n
そして
単語(3)が 「i」なら
スタック2は スタック1
スタック1は i
そして
他で単語(2)が「stloc」なら
単語(3)が 「n」なら
nは スタック1
スタック1は スタック2
そして
単語(3)が 「i」なら
iは スタック1
スタック1は スタック2
そして
他で単語(2)が「bgt」なら
//「bgt」を報告する
//スタック1を報告する
//スタック2を報告する
//スタック1<スタック2 を報告する
スタック1<スタック2 なら
「jmp」を報告する
スタック1は 1
pcは、単語(3)で 行検索
そして
他で単語(2)が「brfalse」なら
スタック1<1 なら
pcは、単語(3)で 行検索
そして
他で単語(2)が「br」なら
pcは、単語(3)で 行検索
他で単語(2)が「ldc.i4」なら
数1は、1
数1は、単語(3)
スタック2は スタック1
スタック1は 数1 + 0
他で単語(2)が「ldstr」なら
文字列スタックは 単語(3)
そうでなければ
//単語(2)を表示する
そして
pcを報告する
文字列1を報告する
//nを報告する
//iを報告する
pcは pc + 1
そして
終わり
終わり