深入理解计算机系统(第三版) 第三章家庭作业答案

本文详细探讨了《深入理解计算机系统》第三章的内容,尤其是被调用者保存寄存器部分,经过反复研读,作者揭示了C语言代码在机器上的运行原理。此外,作者对编译器如何将C源码转换为汇编语言以及其优化过程产生了浓厚兴趣。

这章有的地方看第一遍的时候看的云里雾里,看第二遍的时候才看明白。
印象较深的是被调用者保存寄存器,这部分内容看的得有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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值