导航:首页 > 源码编译 > 高级编程语言都可以编译汇编吗

高级编程语言都可以编译汇编吗

发布时间:2023-05-23 00:33:59

1. 任何高级语言都是编译成汇编代码然后运行的吗

编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序。编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源程序一般为高级语言(High-level language),如Pascal,C++等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。一个现代编译器的主要工作流程如下:
源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables])工作原理
翻译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器言)。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。典型的编译器输出是由包含入口点的名字和地址以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。
肯定是要先编译成机器码,计算机才能识别。

2. 汇编语言有标准,高级语言一定会转变成汇编语言吗

1、不一定
要求编译后生成*.exe文件的都会先转成汇编语言,然后汇编成*.exe
解释语言就不会转成汇编语言,例如Java就生成*.class,然后解释执行
2、没有实质性区别
3、汇编语言由机器语言发展而来
开始人们是直接用机器语言编程的,后来有人编出了汇编程序,就可以直接用比较易用的汇编语言写程序。汇编程序负责把汇编语言写的程序转换成机器语言(*.exe)

3. 高级编程语言也要编译成汇编语言,不同的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对应的汇编码及含义

4. 编译器是将高级语言编译成汇编语言吗

一般的
编译器
,是先将
高级语言
转换成汇编语言(
中间代码
),然后在汇编的基础上优化生成OBJ
目标代码
,最后Link成可执行文件

5. C语言中高级语言通过编译器得到的是汇编语言吗

不是哦,编译得到的结果是二进制可执行文件,要得到汇编源码还需要对其进行反编译

6. 为什么高级语言要先编译成汇编语言

高级语言不会编译成汇编语言
而是直接编译成二进制语言
也就是机器语言
机器语言和汇编语言是一一对应关系
所以 从机器语言和反向得到汇编。

7. 为什么说用高级语言写的程序,执行效率没有汇编高这些高级语言不都是要先编译成汇编语言吗

高级语言主要是给人看的,即使实现的目的完全相同,不同的程序员写出来的高级语言都很可能会看起来完全不同,因此编译器在把高级语言编译为机器码的过程中,就难免会产生很多的冗余代码,比如在汇编语言中从a点到b点能够一步到达的,在高级语言编译的代码中却有可能满世界乱转把整个字母表都走一遭后才到达b,尽管结果看起来是一样的,但效率就不可同日而语了。
当然了,像js之类的脚本语言也是高级语言啊,它们是解析执行的,效率当然更加没有汇编语言高了。

8. 高级语言编译后产生的是汇编语言还是机器语言

这个不一定,可以是汇编语言,也可以是机器语言,如果你用过Linux上的gcc你就明白了。如果编译完成,链接后,能运行肯定是机器语言。另外一种情况是:如果是Java或VS支持的语言,编译后,即不是汇编语言,也不是机器语言,而是一种供运行时环境识别的中间语言。

9. 编译程序是把高级语言编译成汇编语言程序还是机器语言程序为什么王道上有两个说法啊,我纠结了!!

编程语言分为高级编程语言和低级编程语言。
汇编属于低级语言,语法更接近程序实际的运行顺序。
C/C++属于高级语言,语法更接近自然语言。

无论C/C++还是汇编语言,都是将代码编译成可被机器识别的机器语言。

阅读全文

与高级编程语言都可以编译汇编吗相关的资料

热点内容
怎么把电脑里文件夹挪出来 浏览:693
java流程处理 浏览:683
ftp创建本地文件夹 浏览:659
腰椎第一节压缩 浏览:738
xp去掉加密属性 浏览:117
2345怎么压缩文件 浏览:982
迷你夺宝新算法 浏览:407
服务器如何防止木马控制 浏览:715
压缩空气用电磁阀 浏览:742
微信为什么不能设置加密认证 浏览:672
邓伦参加密室逃脱视频 浏览:391
音频压缩编码标准 浏览:300
常提到的app是表示什么 浏览:261
天津程序员传销 浏览:349
下班之后的程序员 浏览:73
检测支持ssl加密算法 浏览:344
衢州发布新闻什么APP 浏览:85
中国移动长沙dns服务器地址 浏览:252
wifi密码加密了怎么破解吗 浏览:599
linux命令cpu使用率 浏览:70