32汇编语言程序说明_Linux 汇编语言学习--编译和链接
上次我们提到了汇编语言的两种格式,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 汇编语言学习--编译和链接相关推荐
- 用计算机汇编语言的程序是经过,汇编语言程序
汇编语言程序也称为汇编语言源程序,就是用汇编语言编写的一种计算机程序, 属于计算机低级语言程序,是属性为ASM的源文件.汇编语言程序在经过汇编.链接后得到可执行程序即EXE文件. 汇编语言程序里面包括 ...
- win10子系统linux下cmake编译32位程序
文章目录 Ubuntu 18运行32位程序 添加软件源 安装编译环境 编写CMakeLists.txt cmake编译 运行程序 SUSE 15.0运行32位程序 m32编译 添加软件源 安装qemu ...
- Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索
初次见面 大家好,我是 ELF 文件,大名叫 Executable and Linkable Format. 经常在 Linux 系统中开发的小伙伴们,对于我肯定是再熟悉不过了,特别是那些需要了解编译 ...
- c语言编辑编译链接,C语言的“编译、链接”
我们写的代码,仅仅是文本文件(txt),不管后缀怎么变,终究是文本文件,计算机只能显示,不能做事(执行). 文本文件通过"编译.链接",成为可执行文件(windows下是exe): ...
- Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索...
初次见面 大家好,我是 ELF 文件,大名叫 Executable and Linkable Format. 经常在 Linux 系统中开发的小伙伴们,对于我肯定是再熟悉不过了,特别是那些需要了解编译 ...
- 汇编语言程序运行过程分析
实验项目 程序运行过程分析 综合性实验 2020年11月 18日 一.实验综述 1.实验目的及要求 (1)掌握程序执行具体过程 (2)构建汇编语言的运行环境 (3)掌握汇编语言的编译连接过程 (4)掌 ...
- Keils uVision5环境下STM32汇编语言程序开发
目录 一.如何在MDK5中建立工程 1建立工程 1.1创建工程 1.2选择芯片STM32F103RC 1.3运行环境选择,在CMSIS下选择CORE:Device下选择Startup 2.添加文件 ...
- 单片机程序c语言 汇编语言,C语言能够实现单片机功能,为什么还要使用汇编呢?...
如今C语言确实很强大,在嵌入式编程当中应用广泛,但是为什么还要学习汇编语言,难学又不易理解? 首先汇编语言和C语言都是编程语言,汇编是一种机器语言直接面对底层,与单片机底层硬件构架息息相关,相对于C语 ...
- 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来
试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来 DATA SEGMENT DATA ENDS STACK SEGMENT STACK ENDS CODE SEGMENT ASSUM ...
最新文章
- CI Weekly #7 | Instgram/Quora 等大公司如何做持续部署?
- iPIN CEO 杨洋:AI 还未被大规模用在工作中,缺的是认知智能
- POJ 2485 Highways (prim最小生成树)
- 12306 抢票项目霸榜 GitHub,标星即将破万
- docker如何进入后台容器
- JAVA里static 变量在程序执行结束后是否被消毁
- DB2存储过程分页测试
- 基于PHP+小程序(MINA框架)+Mysql数据库的汽车维修保养小程序系统设计与实现
- Kali最新2020.1版本之U盘启动加密与持久化存储制作流程
- 服务器固件降级需要重装系统吗,bios降级,小编教你bios可以降级吗
- 调研 微信小程序客服功能
- android 手机内存64实际不到,手机拥有64G,为何用了不到1G,就显示内存不足?是谁在搞鬼?...
- 如何评价 APICloud ?
- 蓝桥杯——种植园问题(prev54)
- 【JqGrid】JqGrid单元格合并及表头列合并,jqgrid单元格合并
- 智安新闻丨乐山西部AI算谷正式投运,与智安网络成功签署战略合作协议!
- [区间dp]涂色 洛谷P4170
- mysql怎么启用sa用户_安装SQL SERVER开启SA用户登录的方法
- 教师需要为学生的学习把握节奏
- [990]Geohash算法原理及实现
热门文章
- OpenStack绝非昨日黄花 | 人物志
- 实现 消息提醒图标_用了5年苹果手机都不知道,原来小汽车图标是这个意思 ! ! !...
- abrels.inc.php_setlist.js
- 使用手机企业微信创建自己的企业(公司)
- ETL异构数据源Datax_日期增量同步_13
- MyBatisPlus_查询篇_入门试炼_01
- phppython混合开发_如何让python嵌入html实现类似php的快速开发,十分有价值
- python画两条曲线_python – 在Matplotlib中绘制两个图之间的线
- 保镖机器人作文_关于机器人作文400字
- android图标错误的是什么意思啊,Android错误:找不到与给定名称匹配的资源(在icon处,值为@drawable/icon) - Android - srcmini...