title: 汇编上机涉及文件
主要用于汇编语言第四版(HUT)的复习
ASM是汇编语言源程序的扩展名,汇编语言(Assembly Language)是面向机器的程序设计bai语言。汇编语言是一种功能很强的程序设计语言,是利用计算机所有硬件特性并能直接控制硬件的语言。打开asm文件有两种方法即笔记本和MasmEdit软件。
在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因此汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。
汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。
汇编语言的特点
1、面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
2、保持了机器语言的优点,具有直接和简捷的特点。
3、可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
4、目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
5、经常与高级语言配合使用,应用十分广泛。
1、.asm文件(编辑产生文件)
汇编语言源程序文件。edit.com编译产生。
.asm文件是bai以asm作为扩展名的du文件zhi,是汇编语言的源程序文件。dao它是文本格式的文件,可以用zhuan任何文shu本编辑器(如:windows下的notepad、notepad+、editplus、ultraedit,dos下的edit.com、qe.exe等)进行创建或编辑。
这种类型的文件必须满足微软或borland或其他开源组织对汇编语言源代码的语法规则的要求。如果你写的.asm文件不满足语法规则、或者存在算法或者业务逻辑上的错误,前者将无法通过编译程序的编译,后者即使生成了可执行程序也不能得到你需要的结果。
与上节对应,.asm文件的编译器有微软的masm(masm32)、borland公司的tasm、开源组织的nasm等,通过这些编译器编译后将生成扩展名为obj的目标文件。再通过对应的链接程序(如link、tlink等)将obj文件转化为可执行的exe文件。
2、汇编产生文件
masm.exe汇编产生:.obj .lst .crf文件
Masm.exe 汇编系统程序,用于将汇编语言源程序(.asm)汇编成目标程序(.obj)。
2.1、.obj文件
.obj文件为目标文件,即汇编产生的目标文件。
编译:当前源代码编译成二进制目标文件bai(.obj文件)
链接(link):将生成的.obj文件与库文件.lib等文件链接,生成可执行文件(.exe文件)。
可以说.obj文件是.exe文件的前身;
1、obj里存的是编译后的代码跟数据,并且有名称,所以在连接时会出现未解决的外部符号一说。当连成exe后便不存在名称的概念了,只有地址。lib就是一堆obj的组合。
编译器会默认链接一些常用的库,其它的需要你自己指定。
2、目标文件,一般是程序编译后的【二进制文件】,再通过链接器和资源文件链接就成可执行文件了。OBJ只给出了程序的【相对地址】,而可执行文件是【绝对地址】。CPP对应的二进制代码格式obj,是未经重定位的!
3、编译C 程序会产生obj 文件和exe 文件,我们都知道exe 文件是可执行文件,但obj 文件是做什么用的呢?
查了下资料发现obj 文件和exe 文件都是二进制数据文件,其中obj 文件是COFF 格式,exe 文件时PE 格式。
那为什么不直接让 obj 文件作为可执行文件呢?
原来obj 文件的格式是跨平台 的,通过link 可以将obj 链接为所使用系统能够识别的格式,比如windows 系统中的exe 文件。
一个现代编译器的主要工作流程如下:
源程序(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标程序(object code)→ 连接器(链接器,Linker)→ 可执行程序(executables)
2.2、.lst文件
**.lst文件为列表文件,**左边的数字是汇编程序的二进制输出,与源代码行有关。即里面是左边为机器指令,右边为汇编指令。
2.3、.crf文件
**.crf文件为交叉索引文件,**它负责记录符号名定义的行号以及引用的行号。
3、连接产生文件
link.exe连接产生:.exe .map文件
Link.exe 连接程序,用于将汇编后的目标文件(.obj)连接生成可执行文件(.exe)。以下是它的格式:
link obj[,exe[,map[,lib]]]
3.1、.exe文件
.exe文件是可执行文件。
3.2、.map文件
.map文件是列表映像文件,负责记录段的开始、结束地址以及段的长度。
4、交叉索引产生文件
cref.exe交叉索引产生文件:ref
4.1、.ref文件
.ref文件为交叉列表文件,用于记录源程序符号名定义和引用位置行数。