ilasmでstack machine その7
3465 ワード
概要
ilasmでstack machineやってみた。
俺言語、コンパイラを考えてみた。
3段階です。
1回目をハンドコンパイルしてみた。
10 a=1
pushi 1
set a
30 b=a%15
loop:
get a
pushi 15
%
40 #=b=0*120
if fizzbuzz
50 b=a%5
get a
pushi 5
%
60 #=b=0*140
if buzz
70 b=a%3
get a
pushi 3
%
80 #=b=0*160
if fizz
90 ?=a
get a
call printi
100 #=a<100*30
tugi:
get a
pushi 100
if< loop
110 #=255
jp ext
120 ?="fizzbuzz "
fizzbuzz:
push "fizzbuzz"
call prints
130 #=180
jp tugi
140 ?="buzz "
buzz:
push "buzz"
call prints
150 #=180
jp tugi
160 ?="fizz "
fizz:
push "fizz"
call prints
180 a=a+1
tugi:
get a
pushi 1
+
set a
190 #=30
jp loop
ext:
ret
pushi 1
set a
loop:
get a
pushi 15
%
40 #=b=0*120
if fizzbuzz
50 b=a%5
get a
pushi 5
%
60 #=b=0*140
if buzz
70 b=a%3
get a
pushi 3
%
80 #=b=0*160
if fizz
90 ?=a
get a
call printi
100 #=a<100*30
tugi:
get a
pushi 100
if< loop
110 #=255
jp ext
120 ?="fizzbuzz "
fizzbuzz:
push "fizzbuzz"
call prints
130 #=180
jp tugi
140 ?="buzz "
buzz:
push "buzz"
call prints
150 #=180
jp tugi
160 ?="fizz "
fizz:
push "fizz"
call prints
180 a=a+1
tugi:
get a
pushi 1
+
set a
190 #=30
jp loop
ext:
ret
if fizzbuzz
get a
pushi 5
%
60 #=b=0*140
if buzz
70 b=a%3
get a
pushi 3
%
80 #=b=0*160
if fizz
90 ?=a
get a
call printi
100 #=a<100*30
tugi:
get a
pushi 100
if< loop
110 #=255
jp ext
120 ?="fizzbuzz "
fizzbuzz:
push "fizzbuzz"
call prints
130 #=180
jp tugi
140 ?="buzz "
buzz:
push "buzz"
call prints
150 #=180
jp tugi
160 ?="fizz "
fizz:
push "fizz"
call prints
180 a=a+1
tugi:
get a
pushi 1
+
set a
190 #=30
jp loop
ext:
ret
if buzz
get a
pushi 3
%
80 #=b=0*160
if fizz
90 ?=a
get a
call printi
100 #=a<100*30
tugi:
get a
pushi 100
if< loop
110 #=255
jp ext
120 ?="fizzbuzz "
fizzbuzz:
push "fizzbuzz"
call prints
130 #=180
jp tugi
140 ?="buzz "
buzz:
push "buzz"
call prints
150 #=180
jp tugi
160 ?="fizz "
fizz:
push "fizz"
call prints
180 a=a+1
tugi:
get a
pushi 1
+
set a
190 #=30
jp loop
ext:
ret
if fizz
get a
call printi
100 #=a<100*30
tugi:
get a
pushi 100
if< loop
110 #=255
jp ext
120 ?="fizzbuzz "
fizzbuzz:
push "fizzbuzz"
call prints
130 #=180
jp tugi
140 ?="buzz "
buzz:
push "buzz"
call prints
150 #=180
jp tugi
160 ?="fizz "
fizz:
push "fizz"
call prints
180 a=a+1
tugi:
get a
pushi 1
+
set a
190 #=30
jp loop
ext:
ret
tugi:
get a
pushi 100
if< loop
jp ext
120 ?="fizzbuzz "
fizzbuzz:
push "fizzbuzz"
call prints
130 #=180
jp tugi
140 ?="buzz "
buzz:
push "buzz"
call prints
150 #=180
jp tugi
160 ?="fizz "
fizz:
push "fizz"
call prints
180 a=a+1
tugi:
get a
pushi 1
+
set a
190 #=30
jp loop
ext:
ret
fizzbuzz:
push "fizzbuzz"
call prints
jp tugi
140 ?="buzz "
buzz:
push "buzz"
call prints
150 #=180
jp tugi
160 ?="fizz "
fizz:
push "fizz"
call prints
180 a=a+1
tugi:
get a
pushi 1
+
set a
190 #=30
jp loop
ext:
ret
buzz:
push "buzz"
call prints
jp tugi
160 ?="fizz "
fizz:
push "fizz"
call prints
180 a=a+1
tugi:
get a
pushi 1
+
set a
190 #=30
jp loop
ext:
ret
fizz:
push "fizz"
call prints
tugi:
get a
pushi 1
+
set a
190 #=30
jp loop
ext:
ret
jp loop
ext:
ret
以上。
Author And Source
この問題について(ilasmでstack machine その7), 我々は、より多くの情報をここで見つけました https://qiita.com/ohisama@github/items/44c3b6f561e335166a9d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .