VCのコンパイラのアセンブラ出力

ちょっと腕慣らしに簡単なCのコードがどんなアセンブラコードになるのか対比させて
みることにした。

VCのcl.exeでアセンブラのコードを出力する方法を調べる。

/FAオプションでできるらしい。

C:\temp>cl /FA /nologo hoge.c
hoge.c

if〜else文

int main()
{
  int a=0;
  int b=1;
  if(a<b)
    a++;
  else
    b++;
  return a;
}

hoge.asm抜粋

; Line 2
        push    ebp
        mov     ebp, esp
        sub     esp, 8
; Line 3
        mov     DWORD PTR _a$[ebp], 0
; Line 4
        mov     DWORD PTR _b$[ebp], 1
; Line 5
        mov     eax, DWORD PTR _a$[ebp]
        cmp     eax, DWORD PTR _b$[ebp]
        jge     SHORT $LN2@main
; Line 6
        mov     ecx, DWORD PTR _a$[ebp]
        add     ecx, 1
        mov     DWORD PTR _a$[ebp], ecx
; Line 7
        jmp     SHORT $LN1@main
$LN2@main:
; Line 8
        mov     edx, DWORD PTR _b$[ebp]
        add     edx, 1
        mov     DWORD PTR _b$[ebp], edx
$LN1@main:
; Line 9
        mov     eax, DWORD PTR _a$[ebp]
; Line 10
        mov     esp, ebp
        pop     ebp
        ret     0

これでCでの処理がアセンブラ的にどうなっているか調べられるようになった。
しかし、これは相当面倒なことになっているな。
SIMDへの道は遠い。