`
Ydoing
  • 浏览: 101054 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

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

  • 执行

./parray

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    汇编语言学习教程,包含完整教程及各章节代码

    超详细的汇编语言学习教程,适合零基础的同学 一、基础介绍 汇编语言简介 80×86 计算机组织 80×86 的指令系统和寻址方式 汇编语言程序格式 汇编语言程序的运行 子程序结构 二、汇编实验 打印输出"Hello World!" ...

    8个简单的汇编程序,数组排序、计算最大数,字符串比较,打印图形

    1、计算S=1+2+3+4+……+N直到和大于500为止 ...5、编写打印图形程序 6、用子程序结构编写程序:从键盘入一个二位十进制数的月份(01~12),然后显示相应的英文缩写名 7、数组排序 8、求三个数中最大的数

    从汇编语言到Windows内核编程

    稍显枯燥的是,它们和Windows内核无关,是纯C语言与汇编语言的关系的字节。如果读者已经精通汇编语言,并能顺利阅读汇编代码,请直接跳进本部分。 第1章 汇编指令与C语言 1.1 上机建立第一个工程 1.1.1 用Visual ...

    汇编语言程序设计.林邦杰.陈明

    1-1 汇编语言介绍 1-1-1 程序设计语言分类 1-1-2 汇编语言程序设计的意义 1-2 位及字节 1-3 二进制数 1-3-1 数字系统 1-3-2 补码 1-3-3 BCD码 1-4 十六进制表示法 1-5 ASCII码 1-6 个人计算机组成 1-6-1 处理器 1-6-...

    天书夜谈:从汇编语言到Windows内核编程

    稍显枯燥的是,它们和Windows内核无关,是纯C语言与汇编语言的关系的章节。如果读者已经精通汇编语言,并能顺利阅读汇编代码,请直接跳过本部分。  第1章 汇编指令与C语言 2  1.1 上机建立第一个工程 4  1.1.1 用...

    天书夜读:从汇编语言到Windows内核编程(完整版一)

    稍显枯燥的是,它们和Windows内核无关,是纯C语言与汇编语言的关系的章节。如果读者已经精通汇编语言,并能顺利阅读汇编代码,请直接跳过本部分。  第1章 汇编指令与C语言 2  1.1 上机建立第一个工程 4  1.1.1 用...

    天书夜读:从汇编语言到Windows内核编程(完整版 二)

    稍显枯燥的是,它们和Windows内核无关,是纯C语言与汇编语言的关系的章节。如果读者已经精通汇编语言,并能顺利阅读汇编代码,请直接跳过本部分。  第1章 汇编指令与C语言 2  1.1 上机建立第一个工程 4  1.1.1 用...

    c#学习笔记.txt

    C#学习笔记(2)【大 中 小】【打印】【加入收藏】【关闭】 【收藏到新浪ViVi】【收藏到365KEY】 浏览字号:日期:2004-07-11 人气:8092 出处: write by cash(天下第七) 2002.01.20 版权所有,翻录不究 cashcao@...

    Golang 面试题汇编

    交替打印数字和字母 判断字符串中字符是否全都不同 翻转字符串 判断两个给定的字符串排序后是否一致 字符串替换问题 机器人坐标计算 语法题目一 语法题目二 goroutine和channel使用一 实现阻塞读的并发安全Map 高...

    BinaryBomb实验-计算机系统基础-gddrxy

    为了完成二进制炸弹拆除任务,需要使用gdb调试器和objdump来反汇编炸弹的可执行文件,并单步跟踪调试每一阶段的机器代码,从中理解每一汇编语言代码的行为或作用,进而设法“推断”出拆除炸弹所需的目标字符串。...

    C语言讲义.doc

    1.13 汇编语言 18 1.13.1 I386汇编简介 18 1.13.2 VS反汇编 19 1.14 IDE工具 19 1.14.1 QT常用快捷键 19 1.14.2 VS常用快捷键 19 1.14.3 VS断点,调试 19 2 C语言中的数据类型 19 2.1 常量 19 2.1.1 #define 19 ...

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    Visual C++ 2005入门经典--源代码及课后练习答案

    他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了实时闭环工业控制系统。Horton拥有丰富的教学经验(教学内容包括C、C++、Fortran、PL/1、APL等),同时还是机械、加工...

    C#微软培训资料

    15.4 接口的实现 .182 15.5 抽象类与接口 .195 15.6 小 结 .196 第十六章 组织应用程序 .198 16.1 基 本 概 念 .198 16.2 使用名字空间 .200 16.3 使用指示符 .203 16.4 程 序 示 例 .206 16.5 小 ...

    Visual.Basic.6大学教程.pdf

    1.6 机器语言、汇编语言和高级语言 4 1.7 Visual Basic的历史 5 1.8 其他高级语言 5 1.9 结构化编程 6 1.10 什么是Visual Basic 6 1.11 关于Visual Basic和本书的一般性提示 7 1.12 本书概览 7 小结 12 自测练习 14 ...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

Global site tag (gtag.js) - Google Analytics