计算机系统 Hw 03

Hw 03

1

	int a = 1, b = 1, c = 10;
	for(int i = 3; i <= 10; i++){
		int temp = a;
		a = b;
		b += temp;
	}

2

movl   $<some value>, %rdx      # int x = <some value>;
cmpl   $64, %rdx                # x : 64
jb     .L6                      # use default
cmpl   $69, %rdx                # x : 69
ja     .L6                      # use default
jmp    *.L0(64, %rdx, 8)        # goto *JTab[x]
.L64:                           # case 64
	leaq   (%rdx, %rdx), %rdi   # result = x + x;
	jmp    Done
.L66:                           # case 66
	jmp    Done
	leaq   10(%rdx), %rdi       # result = x + 10;
.L68:                           # case 68
	leaq   (, %rdx,2), %rdi     # result = x * 2;
	jmp    .L69
.L69:                           # case 69
	incl   %rdi                 # result = result + 1;
	jmp    Done
.Lde:                           # default
	movl   $3, %rdi             # result = 3;
jmp    Done
Done:

Jump table

.section    .rodata
	.align 8
.L4:
	.quad .L64     # x = 64
	.quad .Lde     # x = 65
	.quad .L66     # x = 66
	.quad .Lde     # x = 67
	.quad .L68     # x = 68
	.quad .L69     # x = 69

3

当x86-64过程需要的储存空间超出寄存器能够存放的大小时,就会在栈上分配空间。这过程成为过程的栈帧。——《深入理解计算机系统》

  • 栈帧为什么要链接?
    当描述一个方法调用了其他方法时,是通过常量池中指向方法的符号引用表示的。动态链接可以将这些符号引用转换为调用方法的直接引用。
  • 栈帧如何链接?
    被调用的方法在编译期无法确定,需要在程序运行时将符号引用转换为直接引用,这种链接方式是动态链接。

参考资料:https://www.zhihu.com/question/48267791/answer/2416886945


4

文档中没有所需调用函数
不会做

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值