著作一覧 |
#includeをtest.cとしてstatic int size=16; int main(int argc, char* argv[]) { char buff[size]; strcpy(buff, "hello!"); puts(buff); return 0; }
gcc -S test.c cat test.s ...今となってはオペランドがintelアセンブラと違って読みにくい…… .data .balign 4 _size: .long 16 ... movl _size, %eax #16をeaxに入れる decl %eax #? incl %eax #? addl $15, %eax #0mod16にする shrl $4, %eax # 続き sall $4, %eax # 続き movl %eax, -16(%ebp) # 引数を積む(?) movl -16(%ebp), %eax # ? 無駄なコード(それともレジスタ渡しかも) call __alloca # アロケーション movl %esp, %ebx # espに結果が入るのか? というかallocaはespを指定したサイズだけ下へ進めるんだろう。 subl $8, %esp # ? pushl $LC0 # "hello!" pushl %ebx # buff call _strcpy addl $16, %esp # 引数×2と、その前にsubl $8した分らしい subl $12, %esp # ? まただ pushl %ebx # buff call _puts addl $16, %esp # 引数領域が0mod16になるようにしているのかな?うーん、世の中変わったなぁ。
または黒ちゃん白ちゃん。
オキドキ系の店で見かけて、iBookのスピーカーの音があまりにひどいこともあって、外側:iBook=白、内側:BSD=悪魔(はいはいダエモンは妖精ですかそうですか)、という色合わせもあって購入。
しかし、相変わらず妻マシンとなっているのであった。
ジェズイットを見習え |