`
haoningabc
  • 浏览: 1476586 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

汇编程序入门

阅读更多

安装ald的时候注意:
centos
需要yum install readline-devel
ubuntu需要 apt-get install libreadline-dev


64位
gcc -m64
gcc -m32

$ nasm -f elf64 -o hello32.o hello32.nasm
32 bit system:
$ nasm -f elf -o hello32.o hello32.nasm
This will translate your assembly program into x86 machine code that your processor can understand. NASM supports a variety of architectures. You can see the list by typing
$ nasm -hf

http://blog.markloiseau.com/2012/04/hello-world-nasm-linux/

参考
http://www.ibm.com/developerworks/cn/linux/l-assembly/

http://ald.sourceforge.net/
ald 汇编调试器 注意目前只支持x86

例1. AT&T 格式
#hello.s 
.data                    # 数据段声明
        msg : .string "Hello, world!\\n" # 要输出的字符串
        len = . - msg                   # 字串长度
.text                    # 代码段声明
.global _start           # 指定入口函数
        
_start:                  # 在屏幕上显示一个字符串
        movl $len, %edx  # 参数三:字符串长度
        movl $msg, %ecx  # 参数二:要显示的字符串
        movl $1, %ebx    # 参数一:文件描述符(stdout) 
        movl $4, %eax    # 系统调用号(sys_write) 
        int  $0x80       # 调用内核功能
        
                         # 退出程序
        movl $0,%ebx     # 参数一:退出代码
        movl $1,%eax     # 系统调用号(sys_exit) 
        int  $0x80       # 调用内核功能




; hello.asm 
section .data            ; 数据段声明
        msg db "Hello, world!", 0xA     ; 要输出的字符串
        len equ $ - msg                 ; 字串长度
section .text            ; 代码段声明
global _start            ; 指定入口函数
_start:                  ; 在屏幕上显示一个字符串
        mov edx, len     ; 参数三:字符串长度
        mov ecx, msg     ; 参数二:要显示的字符串
        mov ebx, 1       ; 参数一:文件描述符(stdout) 
        mov eax, 4       ; 系统调用号(sys_write) 
        int 0x80         ; 调用内核功能
                         ; 退出程序
        mov ebx, 0       ; 参数一:退出代码
        mov eax, 1       ; 系统调用号(sys_exit) 
        int 0x80         ; 调用内核功能


汇编器(assembler)的作用是将用汇编语言编写的源程序转换成二进制形式的目标代码。Linux 平台的标准汇编器是 GAS,它是 GCC 所依赖的后台汇编工具,通常包含在 binutils 软件包中。GAS 使用标准的 AT&T 汇编语法,可以用来汇编用 AT&T 格式编写的程序:
[xiaowp@gary code]$ as -o hello.o hello.s


Linux 平台上另一个经常用到的汇编器是 NASM,它提供了很好的宏指令功能,并能够支持相当多的目标代码格式,包括 bin、a.out、coff、elf、rdf 等。NASM 采用的是人工编写的语法分析器,因而执行速度要比 GAS 快很多,更重要的是它使用的是 Intel 汇编语法,可以用来编译用 Intel 语法格式编写的汇编程序:
[xiaowp@gary code]$ nasm -f elf hello.asm


2.链接器
由汇编器产生的目标代码是不能直接在计算机上运行的,它必须经过链接器的处理才能生成可执行代码。链接器通常用来将多个目标代码连接成一个可执行代码,这样可以先将整个程序分成几个模块来单独开发,然后才将它们组合(链接)成一个应用程序。 Linux 使用 ld 作为标准的链接程序,它同样也包含在 binutils 软件包中。汇编程序在成功通过 GAS 或 NASM 的编译并生成目标代码后,就可以使用 ld 将其链接成可执行程序了:
[xiaowp@gary code]$ ld -s -o hello hello.o


3.调试器
有人说程序不是编出来而是调出来的,足见调试在软件开发中的重要作用,在用汇编语言编写程序时尤其如此。Linux 下调试汇编代码既可以用 GDB、DDD 这类通用的调试器,也可以使用专门用来调试汇编代码的 ALD(Assembly Language Debugger)。
从调试的角度来看,使用 GAS 的好处是可以在生成的目标代码中包含符号表(symbol table),这样就可以使用 GDB 和 DDD 来进行源码级的调试了。要在生成的可执行程序中包含符号表,可以采用下面的方式进行编译和链接:
[xiaowp@gary code]$ as --gstabs -o hello.o hello.s
[xiaowp@gary code]$ ld -o hello hello.o
分享到:
评论

相关推荐

    windows汇编程序入门

    ### Windows汇编程序入门知识点详解 #### 一、引言 **Windows汇编语言编程**是一种在Windows操作系统下使用汇编语言进行程序开发的技术。它主要用于底层系统编程、硬件访问控制以及性能优化等方面。本文章将详细...

    零基础学习CE汇编程序入门电子书

    【零基础学习CE汇编程序入门电子书】是一本针对初学者设计的教程,旨在帮助读者从零开始掌握汇编语言的基础知识,并将其应用于游戏修改技术。教程特别关注了与游戏修改相关的20个关键汇编指令,这些指令是理解和实践...

    单片机入门汇编程序例程

    单片机入门汇编程序例程是学习单片机编程的重要途径,特别是对于初学者而言,通过实际操作和分析汇编代码,可以更好地理解和掌握单片机的工作原理以及硬件与软件的交互方式。汇编语言是单片机编程的基础,它是直接...

    GNU ARM 汇编程序设计快速入门

    **GNU ARM 汇编程序设计快速入门** 在嵌入式系统开发中,尤其是在低级编程和优化时,掌握ARM架构的汇编语言是至关重要的。GNU ARM汇编程序设计是一门技术性强、实践性高的技能,它允许开发者直接与硬件进行交互,...

    汇编语言入门例子

    每个汇编程序都是由一系列指令构成的,这些指令告诉CPU执行特定的操作。例如,`MOV`指令用于数据传输,`ADD`用于加法,`SUB`用于减法,`JMP`用于跳转,等等。汇编语言通常与特定的处理器架构相关,如x86(用于Intel...

    汇编语言入门教程[定义].pdf

    汇编语言入门教程[定义].pdf

    汇编语言入门教程

    "源码"和"工具"标签暗示了教程可能包括实际编写和编译汇编程序的过程。masm.exe和link.exe是两个关键的工具,它们在汇编语言编程中起着至关重要的作用。 1. **MASM(Microsoft Macro Assembler)**:MASM是微软提供...

    汇编程序相关的入门程序求和

    汇编入门程序设计,入门级汇编程序介绍,我亲自调试过的

    汇编语言入门教程,汇编语言程序设计基础

    在编写汇编程序时,需要注意内存管理和指令的正确性,因为错误可能难以发现且不易调试。 本教程将深入探讨以下几个主题: 1. 汇编语言的基本语法和指令系统。 2. 寄存器的使用和管理。 3. 子程序设计与调用。 4. ...

    汇编语言入门教程PPT.rar

    这一部分的学习将帮助读者编写简单的汇编程序,并理解程序的基本结构。 第三部分,汇编语言第四章详细讲解了指令系统和寻址方式。这是汇编语言的核心内容,包括各种指令的功能、格式,以及不同寻址模式如直接寻址、...

    汇编语言入门教程(PPT)

    易懂的汇编语言入门教程 汇编语言程序设计是计算机类专业的重要专业基础课,是从事计算机研究与应用,特别是软件研究的基础。虽然它并不象高级语言如VB、VC那样容易使用,但它汇编后的目标代码少,执行时间短等优点是...

    汇编快速入门简单小程序

    5. **实习一、实习二**:这些可能代表实际的汇编程序练习,旨在让学生动手实践。实习一可能涵盖了基础的屏幕输出和加法运算,而实习二可能会引入更复杂的功能,如ASCII码输入或更复杂的运算。 通过完成这样的入门...

    汇编语言入门精品教程

    4. **程序结构**:讲解如何组织汇编程序,包括子程序、循环、条件判断等控制结构,以及如何使用内存管理。 5. **汇编与高级语言的交互**:介绍如何在汇编语言中调用C/C++函数,或者在高级语言中嵌入汇编代码,以...

    汇编语言入门教程PPT

    这一章的重点是汇编语言中的指令系统,包括数据处理指令、转移指令、输入/输出指令等,并深入探讨各种寻址方式,如直接寻址、间接寻址、寄存器寻址等,这些是编写高效汇编程序的关键。 **第四章:指令系统和寻址...

    汇编语言入门(经典)

    1. **基础概念**:首先,需要了解计算机的二进制表示、基本的运算符和指令格式,以及如何编写简单的汇编程序。 2. **寄存器和内存管理**:掌握不同类型的寄存器用途,理解内存地址和数据存储方式。 3. **流程控制*...

    汇编编译器及几个小程序

    本篇将围绕“汇编编译器及几个小程序”这一主题,深入探讨汇编语言、编译器的使用以及初学者如何通过简单的汇编程序入门。 标题中的“汇编编译器”可能指的是MASM(Microsoft Macro Assembler),这是一个经典的DOS...

    汇编语言入门教程中文版

    理解如何有效利用有限的寄存器资源是编写高效汇编程序的关键。 4. **寻址模式**:不同的寻址模式决定了数据的来源或目的地。比如,立即寻址、直接寻址、间接寻址等。 5. **流程控制**:包括`JMP`(跳转)、`CALL`...

    汇编语言入门-高手经验

    通过实践编写简单的汇编程序,可以逐步掌握这些基本概念。 汇编语言的难点在于其与硬件紧密关联,因此不同的处理器架构会有不同的汇编指令集。例如,Intel x86系列和ARM架构的汇编指令就有很大的区别。这就需要学习...

    适合初学者的汇编语言入门书

    《适合初学者的汇编语言入门书》是一本旨在引导新手进入汇编语言世界的书籍。汇编语言,作为计算机科学的基础之一,对于理解计算机工作原理和底层编程具有重要意义。本书内容丰富,共分为九章,涵盖了汇编语言学习的...

Global site tag (gtag.js) - Google Analytics