假如汇编语言要实现如下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

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

.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