码迷,mamicode.com
首页 > 编程语言 > 详细

汇编语言学习系列 打印数组实现

时间:2015-02-03 22:43:44      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

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

#include<stdio.h>
int main(){

    int a[] = {3, 0, 5, 1, 4, 6, 2, 9, 8, 7};
    int i;
    for(i = 0; i< 10; i++)
        printf("%d\n", a[i]);
    return 0;
}
  • 代码
.section .data
        array: .int 3, 0, 5, 1, 4, 6, 2, 9, 8, 7
        len: .int 10
        format: .asciz "%d\n"
.section .text
.global _start
_start:
        pushl %ebp
        movl %esp, %ebp
        subl $20, %esp    #allocate space
        
        movl $array, %edx
        movl %edx, (%esp)    #store &array on the stack
        
        movl len, %ecx
        movl %ecx, 4(%esp)    #store len on the stack
        
        call parray  
        
        addl $20, %esp
        popl %ebp

        movl $0, (%esp)    #deallocate space
        call exit
parray:
        pushl %ebp
        movl %esp, %ebp
        push %ebx        
        
        movl 8(%ebp), %edx    #get &array
        movl 12(%ebp), %ebx    #get len
        
        movl $0, %ecx  #计数器i初始化为0
        cmp %ecx, %ebx
        jle .done
.loop:
        movl (%edx, %ecx, 4), %eax
        
        call print
        
        inc %ecx  #i每次加1
        cmp %ecx, %ebx
        jg .loop        
.done:
        popl %ebx
        popl %ebp
        ret
        
print:
        pushl %edx
        pushl %ecx
        
        pushl %eax
        pushl $format
        call printf
        
        addl $8, %esp
        popl %ecx
        popl %edx
        
        ret
        
  • 编译

 as parray.s -o parray.o

  • 链接

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

  • 执行

 ./parray

 

汇编语言学习系列 打印数组实现

标签:

原文地址:http://www.cnblogs.com/csu_xajy/p/4271131.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!