汇编语言学习系列 for循环实现

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

#include<stdio.h>

int fact_for(int n)

{

    int i;

    int result = 1;

    for(i = 2; i <= n; i++)

        result *= i;

    return result;

}



int main(){

    printf("%d\n", fact_for(3));

    return 0;

}
  • 代码for.s
.section .data

        n: .int 3

        format: .asciz "%d\n"

.section .text

.global _start

_start:

        pushl %ebp

        movl %esp, %ebp

        subl $8, %esp

        

        movl n, %ecx        

        movl %ecx, (%esp)

        call fact_for



        pushl %eax

        pushl $format

        call printf

        

        movl $0, (%esp)

        call exit

        

fact_for:

        pushl %ebp

        movl %esp, %ebp

        pushl %ebx

        

        movl 8(%ebp), %edx    #get n

        movl $1, %eax        #init result

        movl $2, %ecx        #init i

        

        cmp %ecx, %edx

        jl .done

        

.loop:

        imul %ecx, %eax

        inc %ecx

        cmp %ecx, %edx

        jge .loop



.done:

        popl %ebx

        popl %ebp

        

        ret        
  • 编译

 as for.s -o for.o

  • 链接

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

  • 执行

 ./for

你可能感兴趣的:(for循环)