深入理解计算机系统的练习题
假设我们想生成下面这个C函数的汇编代码:
int shift_left2_rightn(int x,int n){
x <<=2;
x >>= n;
return ;
}
下面这段代码执行实际的移位,并将最后的结果放在寄存器%eax中。此处省略了两条重要
的指令。参数x和n分别存放在存储器中相对寄存器%ebp中地址偏移8和12的地方。
1 movl 12(%ebp),%ecx Get n
2 movl 8(%ebp),%eax Get x
3 sall $2,%eax x <<=2
4 sarl %cl,%eax x>>=2
根据右边的注释,填出缺失的指令。请用算术右移指令。
gcc编译的。
3和4行是要填的。我把答案直接写出来了。
我的疑问是:4填的为什么不是 sarl %ecx,%eax。
因为%ecx保存的才是n啊?