TVアニメ『ひもてはうす』PV
アニメ『ひもてはうす』
PVやHPを全く見てなくてタイトルだけの情報だけで視聴始めました。
女子たちがモテたいと、ただお喋りするだけのアニメかと思いきや、1話の最後で全員異能を使い始めた時には本当にビビりました。なんじゃこりゃ~、カオスかっ。
いい意味で期待を裏切ってくれました。楽しめそうなので視聴続けます。
続きです。
今回は配列をアセンブラで確認してみます。
ベースのプログラムです。
takk@deb9:~/tmp$ cat -n t.c 1 int main() 2 { 3 int i; 4 int a; 5 for(i=0;i<10;i++) 6 a=50; 7 } takk@deb9:~/tmp$
アセンブル。
takk@deb9:~/tmp$ gcc -S t.c takk@deb9:~/tmp$ cat -n t.s 1 .file "t.c" 2 .text 3 .globl main 4 .type main, @function 5 main: 6 .LFB0: 7 .cfi_startproc 8 pushq %rbp 9 .cfi_def_cfa_offset 16 10 .cfi_offset 6, -16 11 movq %rsp, %rbp 12 .cfi_def_cfa_register 6 13 movl $0, -4(%rbp) 14 jmp .L2 15 .L3: 16 movl $50, -8(%rbp) 17 addl $1, -4(%rbp) 18 .L2: 19 cmpl $9, -4(%rbp) 20 jle .L3 21 movl $0, %eax 22 popq %rbp 23 .cfi_def_cfa 7, 8 24 ret 25 .cfi_endproc 26 .LFE0: 27 .size main, .-main 28 .ident "GCC: (Debian 6.3.0-18+deb9u1) 6.3.0 20170516" 29 .section .note.GNU-stack,"",@progbits takk@deb9:~/tmp$
-8(%rbp)が、a
-4(%rbp)が、iですね。
では、配列の初期化処理に改造してみます。
takk@deb9:~/tmp$ cat -n t1.c 1 int main() 2 { 3 int i; 4 int a[10]; 5 for(i=0;i<10;i++) 6 a[i]=50; 7 } takk@deb9:~/tmp$
10個の配列をすべて50で初期化する処理にしました。
アセンブルして比較。
takk@deb9:~/tmp$ gcc -S t1.c takk@deb9:~/tmp$ diff t.c t1.c 4c4 < int a; --- > int a[10]; 6c6 < a=50; --- > a[i]=50; takk@deb9:~/tmp$ diff t.s t1.s 1c1 < .file "t.c" --- > .file "t1.c" 16c16,18 < movl $50, -8(%rbp) --- > movl -4(%rbp), %eax > cltq > movl $50, -48(%rbp,%rax,4) takk@deb9:~/tmp$
movlが肝ですね。配列アクセスするために、オフセットをずらしながらメモリへ代入してくれる命令っぽいです。
謎の命令cltqは、よくわからないので、そのうち調べることにしましょう。
コメント