上次我们提到了汇编语言的两种格式,Intel 和 AT&T 格式,今天讲的是对应两种编译器的一些使用。

我们知道,编译器就是一个将一种程序语言翻译成另外一种语言的程序。编译的过程其实共有5个流程:词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成。具体是怎么实现的,有兴趣的话,可以找一本好的《编译原理》书看一看,顺便自己也尝试写一个编译器。

对于汇编语言呢,不同平台不同格式都有各自不同的编译器,也有一些可以跨平台的编译器。那么上次我们提到的Intel 格式和AT&T格式汇编使用的编译器是什么呢?

Linux 中编译Intel 格式使用 Nasm, 编译AT&T格式使用Gas

下面以Hello World程序做个示范,为了区分格式,我们将Intel格式的汇编代码文件后缀名写为.asm,而AT&T的写为.s.

Intel:

$> nasm -f elf hello.asm

或者

$> nasm -f elf64 hello.asm

上面的两条命令都会生成一个hello.o目标文件,下面的那条命令可以对上兼容。elf64相当于说是说明64位机器,elf是32位。看我们的代码可以知道,如果寄存器中使用的rax之类的,那么一定是64位的。当然,这个问题都不大,不管使用那一条命令,其实都能通过。

生成.o文件之后,我们就需要用链接器(linker)将目标文件链接起来,生成可执行文件

$> ld -m elf_i386 -o hello hello.o  $> ld -o hello hello.o $> ld -o -m elf_x86_64 -o hello hello.o

上面的第1条链接命令对应前面的第一条编译命令,第2,3条是等价的,对应前面第二条编译命令。之前也说了,这是一个对应机器位数的问题。如果混用,会出现不匹配问题,看图说话。

情况就是这么个情况,不要问为什么。这就跟找对象一样,合适是很重要了。

AT&T

使用Gas编译AT&T格式汇编。Gas 是GNU中自带的,如果是Linux系统的话,基本上都自带了,不需要再安装。

Gas编译起来没有那么多花样

$> as -o hello.o hello.s

$> ld -o hello helle.o

通也是生成了可执行文件hello

测试一下

关于编译和链接的一些参数,可以通过使用 --help 参数来查看,一般来说掌握几个基本参数即可。

到目前来说呢,基本的概念和几个工具都已经简单讲完了,后面将会开始正式的开始我们的汇编语言学习。为了好看吧,将会以Intel格式来讲解,期待一波吧。

32汇编语言程序说明_Linux 汇编语言学习--编译和链接相关推荐

  1. 用计算机汇编语言的程序是经过,汇编语言程序

    汇编语言程序也称为汇编语言源程序,就是用汇编语言编写的一种计算机程序, 属于计算机低级语言程序,是属性为ASM的源文件.汇编语言程序在经过汇编.链接后得到可执行程序即EXE文件. 汇编语言程序里面包括 ...

  2. win10子系统linux下cmake编译32位程序

    文章目录 Ubuntu 18运行32位程序 添加软件源 安装编译环境 编写CMakeLists.txt cmake编译 运行程序 SUSE 15.0运行32位程序 m32编译 添加软件源 安装qemu ...

  3. Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索

    初次见面 大家好,我是 ELF 文件,大名叫 Executable and Linkable Format. 经常在 Linux 系统中开发的小伙伴们,对于我肯定是再熟悉不过了,特别是那些需要了解编译 ...

  4. c语言编辑编译链接,C语言的“编译、链接”

    我们写的代码,仅仅是文本文件(txt),不管后缀怎么变,终究是文本文件,计算机只能显示,不能做事(执行). 文本文件通过"编译.链接",成为可执行文件(windows下是exe): ...

  5. Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索...

    初次见面 大家好,我是 ELF 文件,大名叫 Executable and Linkable Format. 经常在 Linux 系统中开发的小伙伴们,对于我肯定是再熟悉不过了,特别是那些需要了解编译 ...

  6. 汇编语言程序运行过程分析

    实验项目 程序运行过程分析 综合性实验 2020年11月 18日 一.实验综述 1.实验目的及要求 (1)掌握程序执行具体过程 (2)构建汇编语言的运行环境 (3)掌握汇编语言的编译连接过程 (4)掌 ...

  7. Keils uVision5环境下STM32汇编语言程序开发

    目录 一.如何在MDK5中建立工程 1建立工程 1.1创建工程 1.2选择芯片STM32F103RC ​ 1.3运行环境选择,在CMSIS下选择CORE:Device下选择Startup 2.添加文件 ...

  8. 单片机程序c语言 汇编语言,C语言能够实现单片机功能,为什么还要使用汇编呢?...

    如今C语言确实很强大,在嵌入式编程当中应用广泛,但是为什么还要学习汇编语言,难学又不易理解? 首先汇编语言和C语言都是编程语言,汇编是一种机器语言直接面对底层,与单片机底层硬件构架息息相关,相对于C语 ...

  9. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来

    试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来 DATA SEGMENT DATA ENDS STACK SEGMENT STACK ENDS CODE SEGMENT ASSUM ...

最新文章

  1. CI Weekly #7 | Instgram/Quora 等大公司如何做持续部署?
  2. iPIN CEO 杨洋:AI 还未被大规模用在工作中,缺的是认知智能
  3. POJ 2485 Highways (prim最小生成树)
  4. 12306 抢票项目霸榜 GitHub,标星即将破万
  5. docker如何进入后台容器
  6. JAVA里static 变量在程序执行结束后是否被消毁
  7. DB2存储过程分页测试
  8. 基于PHP+小程序(MINA框架)+Mysql数据库的汽车维修保养小程序系统设计与实现
  9. Kali最新2020.1版本之U盘启动加密与持久化存储制作流程
  10. 服务器固件降级需要重装系统吗,bios降级,小编教你bios可以降级吗
  11. 调研 微信小程序客服功能
  12. android 手机内存64实际不到,手机拥有64G,为何用了不到1G,就显示内存不足?是谁在搞鬼?...
  13. 如何评价 APICloud ?
  14. 蓝桥杯——种植园问题(prev54)
  15. 【JqGrid】JqGrid单元格合并及表头列合并,jqgrid单元格合并
  16. 智安新闻丨乐山西部AI算谷正式投运,与智安网络成功签署战略合作协议!
  17. [区间dp]涂色 洛谷P4170
  18. mysql怎么启用sa用户_安装SQL SERVER开启SA用户登录的方法
  19. 教师需要为学生的学习把握节奏
  20. [990]Geohash算法原理及实现

热门文章

  1. OpenStack绝非昨日黄花 | 人物志
  2. 实现 消息提醒图标_用了5年苹果手机都不知道,原来小汽车图标是这个意思 ! ! !...
  3. abrels.inc.php_setlist.js
  4. 使用手机企业微信创建自己的企业(公司)
  5. ETL异构数据源Datax_日期增量同步_13
  6. MyBatisPlus_查询篇_入门试炼_01
  7. phppython混合开发_如何让python嵌入html实现类似php的快速开发,十分有价值
  8. python画两条曲线_python – 在Matplotlib中绘制两个图之间的线
  9. 保镖机器人作文_关于机器人作文400字
  10. android图标错误的是什么意思啊,Android错误:找不到与给定名称匹配的资源(在icon处,值为@drawable/icon) - Android - srcmini...