最近masmのアセンブリを学び始めました。私のプログラムの多くを逆アセンブルしました。私はあなたが__int16(単語)を使用するとき、その値が最初にeaxにコピーされて変数そのものになることに気がつきましたが、int(dword/32)では変数に直接コピーされます:__int16とint(32)がC++で異なるasmを生成するのはなぜですか?
int y = 5;
0040101E mov dword ptr [y],5
y += 7;
00401025 mov eax,dword ptr [y]
00401028 add eax,7
0040102B mov dword ptr [y],eax
__int16 x = 3;
0040102E mov eax,3
00401033 mov word ptr [x],ax
x += 6;
00401037 movsx eax,word ptr [x]
0040103B add eax,6
0040103E mov word ptr [x],ax
私は、__int16のサイズが16であることに気付きました。これは、eaxのサイズの半分です。この理由は、最初にeaxに入れられてからxだけになります。
また、どちらが最速ですか?
お勧めのマスコミサイトはありますか?あなたの入力のための
おかげで、あなたのCPUのアーキテクチャと一致
どのコンパイラですか?どのような最適化レベルですか? –