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は、よくわからないので、そのうち調べることにしましょう。


コメント