汇编语言学习系列 for循环实现
原创
©著作权归作者所有:来自51CTO博客作者每天在编程的原创作品,请联系作者获取转载授权,否则将追究法律责任
假如汇编语言要实现如下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;
}
.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