㈠ 汇编与编译
编译(compilation
,
compile)
1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。
编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。
汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。
用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。
㈡ 什么是编译程序和汇编程序
编译程序是把用高级程序设计语言或计算机汇编语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序,属于采用生成性实现途径实现的翻译程序。编译程序以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出;编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。
汇编程序是指把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序,是为特定计算机或计算机系列设计的一种面向机器的语言,由汇编执行指令和汇编伪指令组成。汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。采用汇编语言编写程序虽不如高级程序设计语言简便、直观,但是汇编出的目标程序占用内存较少、运行效率较高,且能直接引用计算机的各种设备资源。它通常用于编写系统的核心部分程序,或编写需要耗费大量运行时间和实时性要求较高的程序段。汇编程序主要有简单汇编程序、模块汇编程序、条件汇编程序、宏汇编程序、高级汇编程序几种。
㈢ 编译程序和解释程序,汇编程序有什么区别
首先,汇编语言是一种语言,一种低级语言,和c,c++,vb......是一样的,和编译、解释不是一个概念;
关于解释程序
和编译程序的解释和关系如下:
a、解释程序
所谓解释程序是高级语言翻译程序的一种,它将源语言(如basic)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。这的确是很方便的,很适合于一些小型机的计算问题。但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。
b、编译程序
这是一类很重要的语言处理程序,它把高级语言(如fortran、cobol、pascal、c等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结果。
编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。为了完成这些分析综合任务,编译程序采用对源程序进行多次扫描的办法,每次扫描集中完成一项或几项任务,也有一项任务分散到几次扫描去完成的。下面举一个四遍扫描的例子:第一遍扫描做词法分析;第二遍扫描做语法分析;第三遍扫描做代码优化和存储分配;第四遍扫描做代码生成。
值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。
在实际应用中,对于需要经常使用的有大量计算的大型题目,采用招待速度较快的编译型的高级语言较好,虽然编译过程本身较为复杂,但一旦形成目标文件,以后可多次使用。相反,对于小型题目或计算简单不太费机时的题目,则多选用解释型的会话式高级语言,如basic,这样可以大大缩短编程及调试的时间。
㈣ 可以编译和运行汇编语言程序么
这个,你是不是补充一下问题,实在是不清楚你的问题的主题是什么。我估计没有人回答也是这个原因。
汇编语言程序当然是可以编译和运行的,这毫无疑问。
我猜你是想问如何搭建编译运行环境吧?如果是这样,有几种方案可供选择:
使用emu8086程序,不错的集成环境,缺点是需要花钱的。
使用dosbox模拟dos环境,在模拟环境中编译、运行、调试,主要用于学习。
我曾写过一个《dosbox安装使用说明与打包程序》的文档,你可以搜索一下看看。
使用vmware之类的虚拟机,在上面安装dos操作系统,在该系统中进行学习(这个比较麻烦,不推荐。好处是完全虚拟dos环境,但与外界交互文件等比较麻烦)
有些国产的集成环境,好像也是集成了dosbox,我自己没用过,有兴趣的话,你可以查找一下试试。
㈤ C++程序进行编译后会生成C语言代码还是汇编代码
不是汇编输出,更不是机器代码,而是链接器输出
当然不是机器代码,否则这个程序就可以在无操作系统环境下跑,或是在windows下编译出的exe能够在unix上跑,这当然是不对的。
(当然有直接生成机器码的编译器,不过不是我们常见的)
实际上编译出的程序是操作系统相关的,那是因为不同的操作系统的函数库是不相同的。编译器就是将程序与操作系统的函数库链接(比如屏幕的显示,键盘的输入等)。当然只会有少量机器码。
㈥ 程序的编译汇编
如何被编译的呢?
其实计算机只能识别和执行的就是0.1
编译出来的的也都是机器码 既0或1
怎么是操作系统呢 他是根据cpu而编译的
不同的CPU 都有不同的指令集
所以不同的cpu 就要选用不同的 编译器了
编译器本身又是程序,操作系统的运行又是靠什么编译的呢?
操作系统是已经被编译好的 程序 而编译器是运行在已经编译好的操作系统上的·
怎么说呢其实 以前没有编译器 都是手工汇编
就是人自己把 汇编语言转变成 2进制的可执行文件
后来程序越来越大 手工汇编 出错的几率也越来越大
所以有了编译器·
硬件上的汇编器和
硬件上没有汇编器 都是人自己写的
编译器上的汇编器什么关系?
编译器的汇编器是把 高级语言转成 计算机可执行的文件!即1.0
㈦ C语言为什么要先编译成汇编语言
C语言,具有可移植性,或者说同样的代码可以在不同cpu平台上运行得到同样的结果
汇编语言,移植性差,一般针对某型cpu,每个类型的cpu都有自己的汇编语言
为保证C语言编制的通用算法的可移植性,比如我们用C编写了一套mp3解码算法程序,要在pc机上、手机上都能用,那么我们就采用通用的C编译器,将C语言程序编译成指定CPU的汇编语言,再汇编成机器可执行程序。
另一个用途是程序优化问题,在C语言层次,由于是高级语言,不涉及底层硬件,那么底层硬件的特性不能够得到充分利用,在需要优化算法的场合,我们需要将C语言算法编译生成汇编程序,然后修改需要优化的汇编程序达到目的。比如,你在手机上经常会遇到音频解码器,需要安装,而且不同的cpu需要选择不同的解码器,这些解码器应当就是在汇编层次上优化了算法的可执行代码,关键部分经过汇编级优化,不需要优化部分仍然使用C语言编译的结果。
㈧ C语言被编译后是汇编程序吗
当然不是,编译后是OBJ文件,连接后成立可执行代码,是二进制机器码了。
㈨ 高级编程语言也要编译成汇编语言,不同的cpu汇编语言不一样,那会编译成那种汇编语言呢
高级语言一般最终不是编译成汇编语言而是机器语言,而像C#这类语言编译后为公共语言,不是机器码,运行时公共语言代码由NET框架负责进一步即时翻译即时执行为机器指令。只有C++这类语言编译后为CPU可以直接执行的机器码。
附图是VS2019中C++语言的一段调试时的反汇编窗口,其中白字是C++源代码,下面是对应的汇编码,汇编行左列为内存地址,中间是对应的机器指令和数据(内存中的实际值),右侧是对应的汇编码。
比如,定义整数变量a并赋值1的语句,被编译器编译成C7 45 F8 01 00 00 00 这样几个字节,其中C7为汇编码中的MOV指令,可以操作16位寄存器和内存以及立即数,45 F8 是当前命名空间中变量地址,即变量a的地址(F845),而01 00 00 00 为32位宽度的数值1(内存排列顺序是前低后高)。也就是说机器语言的指令格式为:指令代码,地址,数据,当然根据不同指令,有时候地址和数据是不需要的。而右侧 MOV dword ptr[a],1 是指令助记符,也就是汇编指令,而用汇编指令编写的程序也是需要编译成机器指令的。
指令C7对应的汇编码及含义
㈩ 什么是汇编,它与编译有什么不同
【汇编程序】:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。【编译程序】:把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言的目标程序的翻译程序。【解释程序】:对源程序边解释翻译成机器代码边执行的高级语言程序。高级语言的程序的执行的途径:1)源程序(高级语言)->【编译程序】->目标程序(汇编语言)->【汇编程序】->目标程序(机器语言)->计算结果2)源程序(高级语言)->【编译程序】->目标程序(机器语言)->计算结果3)源程序(高级语言)->【解释程序】(逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并不产生目标程序)->计算结果