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

93e75cb84fb4af720ce04e4e9d073262.png

上次我们提到了汇编语言的两种格式,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条是等价的,对应前面第二条编译命令。之前也说了,这是一个对应机器位数的问题。如果混用,会出现不匹配问题,看图说话。

71082266558d63460a3ffa29a4b8acd4.png

65c2826b5d9f8efdf0c73e6ccdd5943c.png

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

AT&T

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

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

$> as -o hello.o hello.s


$> ld -o hello helle.o

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

测试一下

7fdeeb41c0046f81e1123d079177aeb1.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

占用系统资源测试_高频性能测试面试题15道

1、解释常用的性能指标名称与具体含义性能测试 通过测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试。验证软件系统是否能够达到用户提出的性能指标,发现系统中存在的性能瓶颈并加以优化。性能指标分为两个方面:系统指标&#…

ensp1.3.00.100用哪个virtualbox_virtualBox使用 Ubuntu18.0.4

一、视图进入缩放模式,虚拟机上方菜单栏无法显示?热键c,恢复。 热键默认为右边的ctrl键。开启增强功能?打开虚拟机后,点击上方设备-->安装增强功能。虚拟机里面会出现识别到光盘。先挂载光盘到指定路径:…

动态ram依靠什么存储信息_处理器内存系统1(ROM,RAM,数据存储顺序)

本篇文章主要介绍处理器中存储器:ROM和RAM以及数据在内存中的存储顺序:大/小端(Little/Big Endian)。只读存储器(ROM)ROM(Read Only Memory)用来存储和保存数据。ROM数据不能随意更新,但是在任何时候都可以读取。即使是断电,ROM也…

python中row的用法_关于Python中openpyxl使用iter_rows()的方法

之前已经对iter函数的用法有过讲解,记忆遗忘的小伙伴可以重新回顾一遍。今天就iter函数的拓展,讲讲openpyxl中导入iter_rows()的方法。 当我们使用以下代码: import openpyxl as op ms = op.load_workbook(mtest.xlsx) ws = ms.active op.worksheet.Worksheet.iter_rows() 然…

市直系统推荐市级以上表彰的_推荐市级以及以上教学方面表彰的细则

推荐市级以及以上教学方面表彰的细则为了客观、公正、合理地评价教师的德、才表现和工作实绩,用制度来激励、督促全体教职工提高政治和业务索质,认真履行好自身工作职责。避免人为因素,增强评优的透明度,有利于调动广大教职工工作…

react全局状态管理_react状态管理redux

Redux(上)结合阮老师的技术博客,将自己吸收到的内容做了个整理:曾经有人说过这样一句hua : 如果你不知道是否需要Redux,那就是不需要它。从组建层面考虑,什么样子的需要redux;某个组件的状态需要共享,某个状…

edges2shoes数据集下载_edges2cats

edges2cats是一款十分有趣味的生成猫咪的游戏,在这款游戏是以多种不同的图形相结合,来生成你所想要生成的画面,游戏的玩法非常的有趣,感兴趣的可以试玩哦!edges2cats游戏怎么玩 玩法介绍首先清除画面,根据你…

单片机机器周期怎么计算公式_单片机定时器周期计算公式

定时器是单片机的重要功能模块之一,在检测、控制领域有广泛应用。定时器常用作定时时钟,以实现定时检测,定时响应、定时控制,并且可以产生ms宽的脉冲信号,驱动步进电机。定时和计数的最终功能都是通过计数实现&#xf…

mac 下mysql工具_mysql之工具的使用总结(mac版本)

13.mysql Mac终端操作12.MySql在Mac上的安装与配置详解;11.mac下安装mysql5.7.18,连接出现Access denied for user rootlocalhost (using password: YES)13.mysql Mac终端操作1.启动mysql :brew services start mysql2.登陆mysql : mysql -u…

sqoop同步时间戳到mysql_在sqoop导入中使用24小时时间戳

我想从使用自由格式查询的oracle导入数据,并且需要以24小时格式存储时间戳。在sqoop导入中使用24小时时间戳sqoop import --connect jdbc:oracle:thin:(server credntials) \--username ***** --password ***** \--query "select emp_uid, emp_name, salary, t…

mysql权限系统的工作原理_Mysql权限系统工作原理

MySQL权限系统保证所有的用户可以严格地做他们假定被允许做的事情。当你连接一个MySQL服务器时, 你的身份由你从那连接的主机和你指定的用户名来决定,系统根据你的身份和你想做什么来授予权限。MySQL在认定身份中考虑你的主机名和用户名字,是…

mysql日志文件的类型和作用_Mysql日志文件和日志类型介绍_MySQL

日志文件类型MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情:日志文件记入文件中的信息类型错误日志记录启动、运行或停止mysqld时出现的问题。查询日志记录建立的客户端连接和执行的语句。更新日志记录更改数据的语句。不赞成使用该日志…

ruby mysql 驱动_windows下Rails安装MySql驱动的配置

1.安装ruby这我就不废话了,安装很简单,网上资料也很多。安装完后再环境变量path里加入D:ruby\bin(视你的安装路径了)安装完后在命令行输入ruby -v, 会显示版本号,表示安装成功,我的版本号是1.8.62.安装rails我建议去官…

cross join 一张表没有值关联不出来数据_你是否还在对left join、right join和join有困扰呢?...

说到SQL,很多人可能用了挺久,但依然有个问题一直困扰着,那就是 left join、 join、 right join和 inner join等等各种 join的区别。网上搜,最常见的就是一张图解图,如下:接下来就来实际自己动手实验&#x…

MySQL如何修改表的储存方式_修改mysql默认存储引擎的方法

修改mysql默认存储引擎的方法,供大家学习参考。先来了解一下mysql存储引擎:mysql服务器采用了模块化风格,各部分之间保持相对独立,尤其体现在存储架构上。存储引擎负责管理数据存储,以及mysql的索引管理。通过定义的AP…

前端判断是否安装桌面应用_前端开发人员的桌面应用神器 Electron

01为什么用 JavaScript 来开发桌面应用?曾经的 JavaScript 脆弱、简陋、甚至有被边缘化的危险,不过 JavaScript 在经过了两次飞跃后(以 V8 为首的 JavaScript 引擎和 Node.js 的问世),不再受人欺负,早已升级…

mysql 导出csv 多列_从包含300多列的csv,txt或xls文件创建MySQL表

你可以用一些langague C ,PHP解析txt文件......然后构建一个请求并执行它。PHP和PDO :: module将使这个最简单。我不知道某个程序是否已经完成这项工作。这是一个解决方案。如果您选择这样做并遇到麻烦,欢迎您。每个stackoverflow成员都会帮助您。编辑&a…

mysql error 1594_【MySQL】解决mysql的 1594 错误-阿里云开发者社区

对于主从架构的mysql,当发生主机断电或者其他原因异常crash的时候, slave的容易发生读取binlog出错的问题,最常见的是show slave status \G;Master_Log_File: mysql-bin.000029Read_Master_Log_Pos: 3154083Relay_Log_File: relay-bin.000478Relay_Log_Pos: 633Rel…

mysql innodb文件_MySQL的InnoDB文件介绍

MySQL一个显著的特点是其可插拔的存储引擎,因此MySQL文件分为两种,一种是和MySQL数据库本身相关 的文件,一种是和存储引擎相关的文件。本文主要介绍和InnoDB存储引擎相关的文件。表空间文件InnoDB在存储上也模仿了Oracle的设计,数…

python中与label类似的控件是_python中tkinter的使用(控件整理)(一)

1、使用tkinter.Tk() 生成主窗口(windowtkinter.Tk()):window.title(标题名)修改框体的名字,也可在创建时使用className参数来命名;window.resizable(0,0)框体大小可调性,分别表示x,y方向的可变性;1表示可变,0表示不可…