码迷,mamicode.com
首页 > 编程语言 > 详细

汇编语言中概念

时间:2021-02-22 12:06:29      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:文件中   目标   源文件   作用   编写   指令   连接   aot   预编译   

汇编语言中概念

指令与指令系统

指令是计算机能识别的一组二进制代码,该CPU能识别的所有指令的集合,是该CPU的指令系统,所以不同CPU的指令系统是不同的。但是指令都是二进制代码组成的。

机器语言

编写程序直接使用计算机识别的语言,也叫指令代码语言,输入计算机后,CPU能直接执行,但是用户编写十分复杂,可读性和维护性差,就引出了汇编语言。

汇编语言

一种符号化语言,把计算机识别的指令用符号和数字替代。

用汇编语言源程序,CPU不能直接执行,必须先把她翻译成机器语言程序。把汇编语言翻译成机器语言的这个过程,就叫做汇编。

汇编代码的文件后缀是.ASM, 汇编后是.OBJ文件(目标码格式)但是在PC上OBJ文件也不能执行,因为多文件汇编后把程序放到存储器时,地址是浮动的,不连续。

这时,需要链接文件——LINK.EXE,链接后地址是连续的,把obj文件再连接成后缀为.EXE可执行文件(exe形式的机器语言程序),PC才能执行。

链接文件

以下转自 陶通宁https://blog.csdn.net/taotongning/article/details/106382171

在多文件编程时,所以各个文件汇编后需要合在一起,合在一起的过程就是链接的过程。

在实际开发中,我们一定是多文件编程,所有文件在编译后,需要合在一起,合在一起的过程就是链接的过程。

技术图片

? 每一个源文件(就是.c文件,上图中的程序1)都有对应的零碎文件(就是.h文件),通过预编译(通过#include实现)把.c和.h文件整合成一个组合C文件,这个组合C文件的扩展名为.i。把组合C文件编译成汇编文件.s,目标文件为机器指令(放在一个.o文件当中),单个目标文件是不能工作的,因为各个目标文件是相互支撑工作的。

? 把各个目标文件整合的过程就叫链接过程。整合后的文件就叫可执行程序,windows后缀为.exe,Linux后缀为.out

链接过程都干了什么事

? 目标文件主要分为两个区域:数据区域和指令区域。 每一个指令和数据都被安排了地址。

? (1)地址重定位: 目标文件被整合的时候,每个目标文件的数据区被整合到一起,每个目标文件的指令区被整合到一起。假如目标文件1被整合前指令的地址是00000001,目标文件n整合前指令的地址也是00000001,整合到一起后,他们的地址是要重新编排的,这个叫地址重定位。数据区域的地址相应的也要重新编排。

? 重定位地址的作用:CPU会通过这个重定位的地址进行寻址,找到在内存中要执行的指令和数据,然后取出指令执行,并按照指令要求处理数据。重定位以后,会给执行文件中的计算机指令数据,重新安排地址,CPU会通过这些地址取指令执行,并处理这些数据。最终需要通过这些地址找到内存中的指令和数据。

? 链接脚本:重定位时,这个重定位的地址是如何安排的呢,需要使用一个链接脚本文件,这个文件中会有重定位地址的说明,重定位时,会按照这个脚本的重定位地址的要求,来进行地址重定位工作。

技术图片

? (2) 符号统一 : 直接举个C语言中的例子,假设程序有两个.c文件,分别是a.c和b.c,这两个文件中都有名叫var的变量,a.c被编译得到a.o,b.c被编译得到b.o,将a.o和b.o链接到同一个文件时,var命名重复了,需要根据规则对着两个符号进行统一,与此相似的还有函数名的“符号统一”问题。

汇编语言中概念

标签:文件中   目标   源文件   作用   编写   指令   连接   aot   预编译   

原文地址:https://www.cnblogs.com/ckk-blog/p/14423251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!