深入理解计算机系统(原书第2版) 9.7分
读书笔记 程序的机器级表示
傻妞

递归过程的底层实现(大概原理):

> %rdi 存放“递归深度标志”,通常是函数的第一个参数 n

> %rbx 和栈 stack 合作,存放“递归深度标志”,所以需要不停的 movq %rdi, %rbx 和 pushq %rbx

> %rax 在递归调用前,存放递归终止值,比如$0. 当递归展开结束后,递归树开始收缩时,它开始参与累积性的运算(popq %rbx 从 stack 中提取阶段值;然后%rax、%rbx开始运算不断累积结果)

汇编程序的大概结构是:

> 对%rbx压栈;准备下一次压栈;

> 比较和跳转

> 如果没有跳转,就做运算A和递归调用

> 递归返回后的累积性运算B

> 如果跳转了,就到这里来,然后对%rbx出栈、返回

之前觉得很神奇的递归调用,用汇编的表述重新看,会觉得是自然而然的事情,一点都不神秘,非常的清晰直接。

0
《深入理解计算机系统(原书第2版)》的全部笔记 265篇
豆瓣
免费下载 iOS / Android 版客户端