次の IA32 アセンブラー コードを解釈し、同等の効果を持つ関数を C で記述しようとしています。
parametersおよびがa
、オフセットおよびregister 内のアドレスに関連するメモリ位置に格納されており、C の適切な関数プロトタイプが次のようになるとします。b
c
8
12
16
%ebp
equivFunction(int a, int b, int c);
movl 12(%ebp), %edx // store b into %edx
subl 16(%ebp), %edx // %edx = b - c
movl %edx, %eax // store b - c into %eax
sall $31, %eax // multiply (b-c) * 2^31
sarl $31, %eax // divide ((b-c)*2^31)) / 2^31
imull 8(%ebp), %edx // multiply a * (b - c) into %edx
xorl %edx, %eax // exclusive or? %edx or %eax ? what is going on here?
まず、アセンブリを正しく解釈しましたか? もしそうなら、これをCに翻訳するにはどうすればよいですか?