这章有的地方看第一遍的时候看的云里雾里,看第二遍的时候才看明白。
印象较深的是被调用者保存寄存器,这部分内容看的得有3遍,没看懂之前一直很迷,看懂之后只有两个感觉:一是妙,二是简单。
这章内容,让我知道了C语言的代码是如何在机器上运行的,在此过程中,我突然很好奇编译器如何把C源码翻译为汇编语言,以及如何做各种优化,真的太强了。
下面的内容只有代码部分:
3.58
long decode(long x, long y, long z) {
y = y - z;
x *= y;
y <<= 63;
y >>= 63;
y ^= x;
return y;
}
3.61
long created_alt(long *xp) {
int t = 0;
int *p = xp ? xp : &t;
return p;
}
3.63
#include <iostream>
using namespace std;
long switch_prob(long x, long n) {
long result = x;
switch(n) {
case 60:
case 62:
result = 8 * x;
break;
case 63:
result = x;
result >>= 3;
break;
case 64:
result = x;
result <<= 4;
reslut -= x;
x = reslut;
case 65:
x *= x;
default:
reslut = x + 75;
}
return reslut;
}
int main() {
int n = 0x4b;
cout << n;
}
3.71
#include <stdio.h>
#include <limits.h>
#define BUF_SIZE 10
void get_echo() {
char buf[BUF_SIZE];
while(1) {
char *p = fgets(buf, BUF_SIZE, stdin);
if(p == NULL)
break;
else
printf("%s", buf);
}
return;
}
int main() {
get_echo();
return 0;
}
3.73
find_range:
vxorps %xmm1, %xmm1, %xmm1
vucomiss %xmm0, %xmm1
ja .Neg
jb .Pos
je .zero
movl $3, %eax
.zero
movl $1, %eax
ret
.Neg
movl $0, %eax
ret
.Pos
movl $2, %eax
ret
3.74
find_range:
vxorps %xmm1, %xmm1, %xmm1
vucomiss %xmm0, %xmm1
cmova $0, %eax
cmove $1, %eax
cmovb $2, %eax
cmovp $3, %eax
rep;ret
本文详细探讨了《深入理解计算机系统》第三章的内容,尤其是被调用者保存寄存器部分,经过反复研读,作者揭示了C语言代码在机器上的运行原理。此外,作者对编译器如何将C源码转换为汇编语言以及其优化过程产生了浓厚兴趣。

9393

被折叠的 条评论
为什么被折叠?



