コードを gcc でコンパイルしてアセンブリを確認していますが、このコードは正確には何をしているのですか?
shrl $20, %edx
leal (%edx,%eax), %eax
sarl 1, %eax
変数 X が edx レジスタにあり、Y が eax にあり、両方が (32 ビット int) であるとします。ここで何が起こっているのですか??
'shrl $20, %edx' は %eax を 20 ビット右にシフトしているので、eax/(2^20) と同じで、sarl も同じなので 'sarl 1, %eax' = eax/(2^1 )。そうですか、もしそうなら、leal は何をしますか?