邯郸做网站推广,招标网招标信息,做电商怎么找货源,百度优化seo上次我们提到了汇编语言的两种格式#xff0c;Intel 和 ATT 格式#xff0c;今天讲的是对应两种编译器的一些使用。我们知道#xff0c;编译器就是一个将一种程序语言翻译成另外一种语言的程序。编译的过程其实共有5个流程#xff1a;词法分析、语法分析、语义分析和中…上次我们提到了汇编语言的两种格式Intel 和 ATT 格式今天讲的是对应两种编译器的一些使用。我们知道编译器就是一个将一种程序语言翻译成另外一种语言的程序。编译的过程其实共有5个流程词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成。具体是怎么实现的有兴趣的话可以找一本好的《编译原理》书看一看顺便自己也尝试写一个编译器。对于汇编语言呢不同平台不同格式都有各自不同的编译器也有一些可以跨平台的编译器。那么上次我们提到的Intel 格式和ATT格式汇编使用的编译器是什么呢Linux 中编译Intel 格式使用 Nasm, 编译ATT格式使用Gas。下面以Hello World程序做个示范为了区分格式我们将Intel格式的汇编代码文件后缀名写为.asm而ATT的写为.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条是等价的对应前面第二条编译命令。之前也说了这是一个对应机器位数的问题。如果混用会出现不匹配问题看图说话。情况就是这么个情况不要问为什么。这就跟找对象一样合适是很重要了。ATT使用Gas编译ATT格式汇编。Gas 是GNU中自带的如果是Linux系统的话基本上都自带了不需要再安装。Gas编译起来没有那么多花样$ as -o hello.o hello.s$ ld -o hello helle.o通也是生成了可执行文件hello测试一下关于编译和链接的一些参数可以通过使用 --help 参数来查看一般来说掌握几个基本参数即可。到目前来说呢基本的概念和几个工具都已经简单讲完了后面将会开始正式的开始我们的汇编语言学习。为了好看吧将会以Intel格式来讲解期待一波吧。