TVアニメ「俺が好きなのは妹だけど妹じゃない」第1弾PV
アニメ『俺が好きなのは妹だけど妹じゃない』
作画が気になって内容が入ってこないので、何度も見ることになってしまいました。
面白くなるのかはまだ分かりませんが、作画が気になるので視聴継続しようと思ってます。
アセンブラを埋め込んだC言語関数のライブラリ化をしてみます。
最初はCだけで作成。
takk@deb9:~/tmp$ cat -n main.c 1 #include <stdio.h> 2 unsigned long my_htonl(unsigned long); 3 int main() 4 { 5 unsigned long a=0x12345678; 6 a = my_htonl(a); 7 printf("%08x\n",a); 8 } takk@deb9:~/tmp$
ファイル名は、my_htonl.cとしました。
takk@deb9:~/tmp$ cat -n my_htonl.c 1 unsigned long my_htonl(unsigned long data) 2 { 3 return data; 4 } takk@deb9:~/tmp$
今はreturnでそのまま引数を返すだけの関数です。
gcc main.c my_htonl.c でビルド後、アセンブラを確認。
takk@deb9:~/tmp$ objdump -d a.out ~省略~ 00000000000006ef <my_htonl>: 6ef: 55 push %rbp 6f0: 48 89 e5 mov %rsp,%rbp 6f3: 48 89 7d f8 mov %rdi,-0x8(%rbp) 6f7: 48 8b 45 f8 mov -0x8(%rbp),%rax 6fb: 5d pop %rbp 6fc: c3 retq 6fd: 0f 1f 00 nopl (%rax)
これを参考にしてC言語に埋め込みます。
takk@deb9:~/tmp$ cat -n my_htonl.c 1 unsigned long my_htonl(unsigned long data) 2 { 3 asm("mov -0x8(%rbp),%rax"); 4 asm("bswap %eax"); 5 asm("mov %rax, -0x8(%rbp)"); 6 return data; 7 } takk@deb9:~/tmp$
再度ビルドして確認。
takk@deb9:~/tmp$ gcc main.c my_htonl.c takk@deb9:~/tmp$ ./a.out 78563412
エンディアン変換できました。
では、my_htonl.cのみをライブラリにしてみます。-cオプションでコンパイル。
takk@deb9:~/tmp$ rm a.out takk@deb9:~/tmp$ gcc -c my_htonl.c takk@deb9:~/tmp$ ls main.c my_htonl.c my_htonl.o takk@deb9:~/tmp$
アーカイブにします。
takk@deb9:~/tmp$ ar -rc libmyhtonl.a my_htonl.o takk@deb9:~/tmp$ ls libmyhtonl.a main.c my_htonl.c my_htonl.o takk@deb9:~/tmp$
libmyhtonl.aというライブラリができました。
ビルドしてみます。
takk@deb9:~/tmp$ gcc main.c -L. -lmyhtonl takk@deb9:~/tmp$
結果です。
takk@deb9:~/tmp$ ./a.out 78563412 takk@deb9:~/tmp$
コメント