首页新闻找找看学习计划

第四五周疑问总结

0
悬赏园豆:10 [待解决问题]

第四周:《深入理解计算机系统》第二章

1.P63:

通过类似的推理,我们可以得出,对于一个位模式为[x(w-1),x(w-2),……,0,……,0]的补码数x,以及在0<=k<=w范围内的任一k,位模式为[x(w-k-1),x(w-k-2),……,0,……,0]就是x*2^k的补码表示

为什么截断前面的k位、后面补上0之后,就是一个乘式结果的补码表示?

P66练习题2.42

写一个函数div16,对任何整数参数,返回x/16的值。不能使用四则运算和任何条件运算符、比较运算符。(假设你的机器是32位,使用补码表示,右移都是算术右移)

int div16(int x)
{
    int bias = (x>>31)&0xf;//如果是负数,bias就会变成f
    return (x+bias)>>4;
}

不太理解如何证明负数运算时,加上bias(即f)之后就可以直接右移四位?

P67练习题2.44

E.x>0||-x>0

假。设x=-2147483648(Tmin32),则x和-x都为负数

如何判断x的相反数是多少?

 

 

第五周:《深入理解计算机系统》第三章

1.既然leal是mov的变形,那么所有可以用leal的场合都可以用mov吗?

2.(已经在后续学习中解决,可以下方3.做参考,跳转到目标值之后可能接着执行某段代码)P127中,

jmp *<操作数指示符【注意:如果形如%eax,即以%eax中的值作为跳转目标;而形如(%eax)则是以其中的值作为地址,读出跳转目标】 那么,如果程序中有这种语句,跳到目标值之后会怎么样呢?

3.P146中,图3-19的代码块第6行有:

jmp *.L7(,%eax,4)

然而,该段代码中并没有标识.L7的位置。那么jmp指令如何寻址?

4.P148练习题3.29

根据图3-20的汇编代码,填写补充C源代码.答案如下:

int switcher(int a,int b,int c)
{
    int answer;
    switch(a)
    {
        case 5 :
            c = b ^ 15;
        case 0 :
            answer = c+112;
        case 2 :
        case 7 :
            answer = c+6;
            break;
        case 4 :
            answer = a;
            break;
        default :
            answer = b;
    }
    return answer;
}

其中,关于

case 4 :
    answer = a;
    break;

答案中解释为:

GCC对程序进行了优化,将answer = 4优化为answer = a。

为什么?

5.

call next
next:
popl %eax

C.这段代码完成了什么功能? 【这是IA32中将程序计数器中的值放到整数计数器中的唯一办法】

这句解释是什么意思呢?

5216的主页 5216 | 初学一级 | 园豆:196
提问于:2015-10-12 17:20
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册