C言語

プログラムの挙動がおかしいと思って調べてたら、以下のコードを実行した際にbの結果が違っていることがある…

WORD a;
DWORD b;

b = a * 0x1000;

ディスアセンブルしたら、a*0x1000の結果をワード長のレジスタに入れられてた。正しい結果はでないね… Cって、そういう仕様なんだっけか。