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

汇编语言学习系列 函数实现

 
阅读更多

以下代码示范交换a和b两个整数的函数,编译环境Ubuntu14.04(32位)

假如要实现以下C代码

复制代码
#include <stdio.h>
void swap(int *xp, int *yp)
{
    int x = *xp;
    int y = *yp;
    
    *xp = y;
    *yp = x;
}
int main()
{
    int a = 534, b = 1057;
    swap(&a, &b);
    printf("%d\n", a);
    printf("%d\n", b);
    return 0;
}
复制代码
  • 汇编代码如下:
复制代码
.section .data
        a: .int 534
        b: .int 1057
        format: .asciz "%d\n"
.section .text
.global _start
_start:
        pushl %ebp
        movl %esp, %ebp
        subl $24, %esp  #给栈分配内存24字节保存局部变量

        movl $a, %eax
        movl %eax, 4(%esp)

        movl $b, %eax
        movl %eax, (%esp)
                
        call swap  #调用swap函数
        
        pushl a  #打印a
        pushl $format
        call printf
        
        pushl b  #打印b
        pushl $format
        call printf
        
        movl $0, (%esp)
        call exit
            
swap:
        pushl %ebp  #保存调用前栈帧地址
        movl %esp, %ebp  
        pushl %ebx  #根据习惯,保存寄存器ebx
        
        movl 8(%ebp), %edx    #get xp
        movl 12(%ebp), %ecx    #get yp
        
        movl (%edx), %ebx    #get x
        movl (%ecx), %eax    #get y
        
        movl %eax, (%edx)
        movl %ebx, (%ecx)
        
        popl %ebx
        popl %ebp
        
        ret
复制代码
  • 编译

as swap.s -o swap.o

  • 链接

ld -lc -I /lib/ld-linux.so.2 swap.o -oswap

  • 执行

./swap


分享到:
评论

相关推荐

    8086/8088汇编语言程序设计教程

    本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术...

    80X86汇编语言程序设计

    本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术...

    80x86汇编语言程序设计教程

    本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术...

    The Art of Assembly Language

    本书以X86系列微机为背景,从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言编程的行种基础知识和编程技巧,内容涉及到数据表示、存储器管理、各种数据类型、过程、与汇编语言相关的体系结构、控制结构、...

    (完整版)Python基础学习笔记.docx

    汇编语言:使用助记符对应机器语言中的指令,可直接操作计算机硬件。不同计算机结构的汇编指令不同。 机器语言和汇编语言都直接操作计算机硬件并基于此设计,统称"低级语言"。 (完整版)Python基础学习笔记全文共69...

    单片机C语言入门-以最为流行的80C51 单片机为例来学习单片机的C 语言编程技术

    在学会使用汇编语言后,学习C 语言编程是一件比较容易的事,我们将通过一系列的 实例介绍C 语言编程的方法。图1-1 所示电路图使用89S52 单片机作为主芯片,这种单片 机性属于80C51 系列,其内部有8K 的FLASH ROM,...

    单片机的C语言程序设计与应用课程教学大纲.doc

    先修课 程:数字电子技术、单片机的汇编语言、汇编语言、C语言程序设计。 (二)教学目的 本课程教学所要达到的目的是:从应用为目的出发,通过对C语言基本概念、基本语 句、单片机应用系统的初步设计的学习,使学生...

    我的编程感悟(中文PDF)(共37M二分卷)分卷二

    3.4 汇编语言 54 3.4.1 概述 55 3.4.2 程序的本质 57 3.4.3 寄存器 58 3.4.4 寻址方式 60 3.4.5 汇编指令 61 3.4.6 C/C++ 语言和汇编 62 3.4.7 小结 63 3.5 其他语言 63 3.5.1 Forth 63 3.5.2 Lisp 64 3.5.3 Java 64...

    我的编程感悟(中文PDF)(共37M二分卷)分卷一

    3.4 汇编语言 54 3.4.1 概述 55 3.4.2 程序的本质 57 3.4.3 寄存器 58 3.4.4 寻址方式 60 3.4.5 汇编指令 61 3.4.6 C/C++ 语言和汇编 62 3.4.7 小结 63 3.5 其他语言 63 3.5.1 Forth 63 3.5.2 Lisp 64 3.5.3 Java 64...

    vc++ 应用源码包_6

    OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...

    vc++ 应用源码包_5

    OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...

    《linux内核注释》

    《Liunx内核注释》同样提供了对流行的功能强大的Liunx操作系统的结构和函数实现的内 幕介绍。本书的主要目标是: 1.提供一个最新的和完整的服务器版本的完整源代码。(这本书分析的版本是2.2.5版,也 是写这...

    Linux内核注释

    《Liunx内核注释》同样提供了对流行的功能强大的Liunx操作系统的结构和函数实现的内幕介绍。本书的主要目标是: 1.提供一个最新的和完整的服务器版本的完整源代码。(这本书分析的版本是2.2.5版,也是写这本书时...

    matlab集成c代码-Outline-of-computer-programming:“我确定宇宙充满了智能生命。它太聪明了,无法来到这里。

    编程涉及诸如分析,发展理解,生成算法需求(包括算法和资源消耗)以及实现(通常称为编码)的活动。 目标中的算法)。 用一个或多个写成。 编程的目的是找到一系列指令,这些指令将自动执行特定任务或解决给定问题...

    vc++ 应用源码包_1

    OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...

    STM32单片机的入门教程总结

    源代码是公开的库函数,使得我们可以摒弃晦涩难懂的汇编语言,在不需要了解底层寄存器的操作细节的情况下,用C语言就可以完成我们需要的功能。所有这些特点使得我们学习ARM处理器的门槛得以降低。同时建议大家尽量去...

    vc++ 应用源码包_2

    OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...

    vc++ 应用源码包_3

    OD反汇编引擎(带VC修改版和原版) 如题。主要文件就4个,非常适合学习,详细见源码。 OPENG开发的示例代码c++版 演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology文档。 ...

    嵌入式系统设计实战.王宜怀(带详细书签).pdf

    3.6 第一个汇编语言工程:控制小灯闪烁 117 3.6.1 汇编工程文件的组织 118 3.6.2 Light构件汇编程序 122 3.6.3 Light测试工程主程序 124 3.6.4 理解第一个汇编工程的执行过程 126 第4章 基于硬件构件的嵌入式...

Global site tag (gtag.js) - Google Analytics