4

コードを 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 は何をしますか?

4

1 に答える 1

10

sarl 1, %eaxが実際にであると仮定するとsarl $1, %eax、全体は次のようになります。

x = ((unsigned int) x) >> 20;
y = (x + y) >> 1

leal命令の意味: eax = eax + edx. このリンクは、このリンクと同様に役立つ場合があります。

于 2013-03-29T01:30:25.153 に答える