VCのコンパイラのアセンブラ出力
ちょっと腕慣らしに簡単な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への道は遠い。