トップ «前の日記(2004-03-08) 最新 次の日記(2004-03-10)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2004-03-09

_ おそるべしgcc

通るんですか
どんなコードを生成するんだろ。って、allocaするのかな。
って言うか、こういうときのSFU.
#include 
static int size=16;
int main(int argc, char* argv[])
{
  char buff[size];
  strcpy(buff, "hello!");
  puts(buff);
  return 0;
}
をtest.cとして
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=悪魔(はいはいダエモンは妖精ですかそうですか)、という色合わせもあって購入。

しかし、相変わらず妻マシンとなっているのであった。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|

ジェズイットを見習え