假如汇编语言要实现如下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 ", fact_for(3)); return 0; }
- 代码for.s
.section .data n: .int 3 format: .asciz "%d " .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