妙处点滴

傻妞
2018-03-07 10:27:26

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

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

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

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

汇编程序的大概结构是:

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

> 比较和跳转

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

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

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

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

0
0

查看更多豆瓣高分好书

回应(0)

添加回应

深入理解计算机系统(原书第2版)的更多书评

推荐深入理解计算机系统(原书第2版)的豆列

了解更多图书信息

豆瓣
免费下载 iOS / Android 版客户端