汇编-递归
递归
递归子例程(recursive subroutine) 是指直接或间接调用自身的子例程。
在处理具有重复模式的数据结构时,是一个强大的工具。
示例1:无限递归
.386 .model flat,stdcall option casemap:none .stack 4096 Include Irvine32.inc ExitProcess PROTO,dwExitCode:DWORD .data endlessStr BYTE "本例程无限递归", 0 .code func Proc enter 0,0 ;=========================== mov edx,OFFSET endlessStr call WriteString call func ;递归-调用自身 ;============================= leave ret func endp main PROC invoke func INVOKE ExitProcess,0 main ENDP END main
该例没有任何实用价值。每次过程调用自身时,都会占用4个字节的堆栈空间,使CALL指令将返回地址压入堆栈。RET指令永远不会执行, 堆栈溢出时程序终止。
示例:递归求和
执行整数1到n 的求和, 其中n是通过ECX传递的输入参数。用EAX返回和数:
.386 .model flat,stdcall option casemap:none .stack 4096 Include Irvine32.inc ExitProcess PROTO,dwExitCode:DWORD .data .code func Proc enter 0,0 ;=========================== cmp ecx,0 ;检查ecx的值 jz L2 ;若为零,则退出 add eax,ecx ;累加 dec ecx; call func ;递归调用 ;============================= L2: leave ret func endp main PROC mov ecx,5 mov eax,0 ;初始化和数 invoke func call WriteDec ;显示eax的值 call Crlf INVOKE ExitProcess,0 main ENDP END main
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2020-01-09 python--AES加密
2020-01-09 python--cryptography加密