タイトル通り、ARMマイコン上で走るアセンブリを学ぶための本です
4章の最初のあたりまで読んで後は放置していたのですが、それじゃもったいないので、せめて実機で走らせるくらいはしてみよう ということで遊んでみました
とりあえず手持ちのARMマイコンといえばSTM32F103くらいなので、このコードの上にデクリメントと条件分岐だけのコードを書いて、プログラムループのディレイとして遊びました
で、さすがにこれだけで終わるのもアレなので ARMマイコンを使用しているRaspberry Piでも試してみました
コード
1 #include <stdio.h>
2
3 int main(void) {
4 int var1 = 10, var2;
5
6 __asm__ (
7 " MOV
r0, #2 \n\t"
8 " MUL
%[Rw], %[Rr], r0 \n\t"
9 : [Rw] "=r" (var2)
10 : [Rr] "r" (var1)
11 : "r0"
12 );
13
14 printf("%d\n", var2);
15
16 return(0);
17 }
18
こんな感じです
期待する出力は20です
まず入力としてvar1で10を与え、中でまずr0に2をロードしてからvar2にvar1*r0で 20になるはずです
で、
$ gcc main.c
でビルドし
$ ./a.out
で起動すると 期待したとおり20と表示して終了します
以上、ARMマイコン上で動作するアセンブリのテストでした
だけだとさすがに怒られると思うので、もう一つ試してみたいと思います
Nexus7です
RasPiと同じコードで同じように動作しました
ARMのアセンブリは様々な環境で動作するので、もうちょっと深みにハマっても面白そうだと思います
P.S.
やったら起動しなくなりました
とりあえず13.04に戻しています
それとARM版13.04でChromiumが動くようになっていました
あいかわらずFlashは無く、ChromiumでもFlashのエミュレートはできないので某Flashゲーはできませんが
0 件のコメント:
コメントを投稿