IchigoJam マシン語でフィボナッチ数列
部屋の隅からDIP ARMマイコン LPC1114が出てきたので 子供パソコンIchigoJam焼いてみた。
というわけで BTN 端子に針金を刺してタッチセンサーにするのにも飽きたのでマシン語でフィボナッチ数列を書くなど。
C言語をマシン語にするほうほうは こちらのページで知りました。
IchigoJam(4) <メモリダンプ・プログラム> (Yoshiのブログ)
必要なツールはこちらから入手
GCC ARM Embedded 4.9 series
BASICで書くとこんなん
100 x=0: y=1:z=0:n=23
110 ?0,0
120 for j=1 to n
130 x=y+z: y=z: z=x
140 ?j,x
150 next
32bitマイコンなのでBASICでもけっこう速い。一瞬で表示されます。残念ながら24番目以降を計算するには2バイト整数だと足りないので なんらかの工夫が必要になります
C言語で書く
int fib(int n)
{
int x,x1,x2,i;
x=0; x1=1; x2=0;
for(i=0;i
コンパイル結果を逆アセンブル
00000000
0: 2200 movs r2, #0
2: 2101 movs r1, #1
4: 1c13 adds r3, r2, #0
6: b510 push {r4, lr}
8: 4282 cmp r2, r0
a: da04 bge.n 16
c: 18cc adds r4, r1, r3
e: 3201 adds r2, #1
10: 1c19 adds r1, r3, #0
12: 1c23 adds r3, r4, #0
14: e7f8 b.n 8
16: 1c18 adds r0, r3, #0
18: bc10 pop {r4}
1a: bc02 pop {r1}
1c: 4708 bx r1
IchigoJamで動かせるようにBASICに書き換え
手作業でやりましたが、自動化ツールも存在します。
上のblog記事からリンクをたどってください
10 poke #700,#00,#22, #01,#21, #13,#1c, #10,#b5
20 poke #708,#82,#42, #04,#da, #cc,#18, #01,#32
30 poke #710,#19,#1c, #23,#1c, #f8,#e7, #18,#1c
40 poke #718,#10,#bc, #02,#bc, #08,#47
50 for i=0 to 23
60 ?i,usr(#700,i)
70 next0 0
結果
0 0
1 1
2 1
3 2
中略
23 28657