zoukankan      html  css  js  c++  java
  • 汇编语言学习系列 递归实现

    假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位)。

    #include<stdio.h>
    int refact(int n){
        if(n == 1)
            return 1;
        else
            return n * refact(n - 1);
    }
    
    int main(){
        int a = 4;
        printf("%d
    ", refact(a));
        return 0;
    }

    无论对于递归实现还是循环实现,汇编都是将转换为跳转语句实现。可以把上面的代码转换为

    refact:
        if((n-1) <= 0)
        goto done;
    
        body-statement
            
    done:
    • 汇编代码refact.s
    .section .data
            a: .int 4
            format: .asciz "%d
    "
    .section .text
    .global _start
    _start:
            pushl %ebp
            movl %esp, %ebp
            subl $8, %esp #allocate storage space
            
            movl a, %edx    #get a
            movl %edx, (%esp)    #save value of a on stack
            
            call refact
            
            pushl %eax
            pushl $format
            call printf
            movl $0, (%esp)
            call exit                    
            
    refact:
            pushl %ebp
            movl %esp, %ebp
            pushl %ebx
            subl $4, %esp    #allocate storage space
            
            movl 8(%ebp), %ebx    #get n
            cmpl $1, %ebx    
            jle done    #test (n-1) >= 0
            
            leal -1(%ebx), %eax    #(n-1)
            movl %eax, (%esp)  #save (n-1) on the stack
            call refact
            imul %ebx, %eax  #use %eax to save result 
            
    done:    
            addl $4, %esp    #release space
            popl %ebx
            popl %ebp
            ret
            
    • 编译

     as refact.s -o refact.o

    • 链接

    ld -lc -I /lib/ld-linux.so.2 refact.o -o refact

    • 执行

     ./refact

  • 相关阅读:
    python set
    python中%d %2d %02d %-2d% %.2d的区别
    python dict(字典)
    python 300本电子书合集
    python tuple元组
    python end用法
    python 找出第二大值
    GPU大百科全书 第二章 凝固生命的光栅化
    GPU大百科全书 第一章:美女 方程与几何
    Notepad++中调试用心lua程序
  • 原文地址:https://www.cnblogs.com/csu_xajy/p/4273463.html
Copyright © 2011-2022 走看看