一段反汇编的代码谁帮我解释下!特别是里面几个左右移的命令!
linux下的gaz格式代码一个函数的汇编码:
函数头为 int decode2 (int x, int y, int z);
参数x y z分别放在相对于寄存器%ebp中的地址偏移量为8 12 16 的地方返回值 放在%eax
1 movl 16(%ebp), %eax
2 movl 12(%ebp), %edx
3 subl %eax, %edx
4 movl %edx, %eax
5 imull 8(%ebp), %edx
6 sall $31, %eax
7 sarl $31, %eax
8 xorl %edx, %eax
前面挺好理解就是最后三句 左移31位 接着算术右移31位 是为了让eax全为1吗? 但是好像最低的一位是不能清为0的吧?
谁能给我解释下最后三句的含义!如果有人能给我反汇编成c代码最好了 谢谢啊!