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

时间:2021-02-17 01:09:38

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

汇编语言学习系列 for循环实现
#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循环实现
  • 代码for.s
汇编语言学习系列 for循环实现
.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
汇编语言学习系列 for循环实现
  • 编译

 as for.s -o for.o

  • 链接

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

  • 执行

 ./for