- C语言代码如下:
void fun(int n){ int x = n*12;int y = n/32;
}
请将其中计算的部分优化为位运算、移位运算和加法运算的结合。
x = n8+n4 = (n<<3)+(n<<2)
x = (n+(n>>31) & 0x1F)>>5
- 设32位的位串为x(x类型为unsigned int),现要将x的第18位(从右向左数,从0开始)设为y(y为unsigned int类型,取值范围为0或者1,y为0或者1),其他位不变请用掩码操作实现。
- 假设某程序P编译后生成的目标代码由A,B,C三类指令组成,他们在程序中所占的比例为40%,30%,30%。已知他们的CPI分别为1,2,3现将A类指令数量减少了20%请问程序P的CPI值是多少?
重新计算每种指令的比例:
40%80%=32%
A:32/(32+30+30)=32/92=16/46
B:30/(32+30+30)=30/92 =15/46
C:30/(32+30+30)=30/92 =15/46
CPI=116/46+215/46+315/46 =91/46=1.98
- 内存情况如右图所示,已知x的地址为002,数据按大端方式排列。求x的真值,y和z的地址和真值(y为字符x和z为十进制,需要写出详细计算过程,按边界对齐)。
short x;
char y;
float z;
5. 给出十六进制机器数结果
float a=E484AA20H;
float b=E6FA2920H;
float c=a+b;
6. 假设R[dl]=60H,R[al]=72H subb %dl,%al jge .L2 .L1 …………………….L2
请回答以下问题:
1)当执行subb指令后,求R[dl]和R[al]。 3分
2)当执行subb指令后,求CF,OF,SF,ZF的值。 4分
3)当执行到jge时,求跳转到.L1还是.L2?
7.
8.
9.
10.