{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

是不是所有的高级编程语言都能编译成汇编语言?

cocopeakcocopeak 回答6 收藏1
问题描述:否则为什么会有反汇编一说。
收藏问题

6条回答

warmcheng

warmcheng

回答于2022-06-22 19:06



程序源码被翻译成机器码之后才能被电脑执行。通过汇编和反汇编,汇编语言和机器码可以相互转换。我的回答中就只说机器码了。按照执行方式大致可将程序语言分成三类:

  • 编译方式 将源代码翻译成机器码后执行的方式。这种方式执行速度快,但对操作系统有依存性。
  • 混合方式 将源代码翻译成中间码(如,字节码)后,在有各OS上的虚拟机翻译成其他语言或命令执行。或者,使用实时编译(JIT)转换成机器码后执行。
  • 解释方式 将源代码逐行翻译成其他语言或命令后,加载该语言或命令的机器码并执行相应的处理。该方式执行速度慢,但编码灵活,不用编译直接执行比较方便。



三种方式中以混合方式最为复杂难懂,下面着重说说混合方式

混合方式的例子

出于跨平台的需要,Java采用了混合方式,Java源代码先通过编译,被翻译成字节码。字节码不含有跟OS有关的信息。因此,编译后的Java包可以在不同的系统上执行。Java为不同的OS准备了不同的JVM(Java虚拟机)。JVM上有解释器,可将字节码逐行翻译成由JVM提供的各种函数库,并将以机器码形式存在的函数库加载到JVM的内存中并执行。由于解释方式的速度较慢,Java为循环或使用频度高的代码提供了JIT(Just In Time)的编译器。JIT可以把大段的代码一次性翻译成机器码执行,速度上要比纯粹的解释器高很多。



电脑执行的所有程序都必须是由机器码编成的。如果仅仅看程序语言的编译结果,混合方式和解释方式都可以看成没有被编译成机器码也就是汇编语言

评论0 赞同0
  •  加载中...
stormjun

stormjun

回答于2022-06-22 19:06

不是的,只要能转换成相应机器码就行。

评论0 赞同0
  •  加载中...
princekin

princekin

回答于2022-06-22 19:06

汇编有汇编的编译器!java也有java的编译器!

最终都会编译成机器码,指令 供CPU调度!

所谓反汇编 无非就是把机器语言转换为汇编语言代码!还有一种就是反编译 把编译后程序集反编译成高级语言代码,已方便阅读!

每个语言都有自己的优势和适应场景!单片机编程用汇编和C比较多,运行快,消耗硬件资源低!它可以直接操作内存地址,比较接近硬件资源!

原我的回答对你有所帮助!

评论0 赞同0
  •  加载中...
blair

blair

回答于2022-06-22 19:06

通常编译成机器码。

评论0 赞同0
  •  加载中...
lookSomeone

lookSomeone

回答于2022-06-22 19:06

原因是你对编程这件事知道的太少了!

评论0 赞同0
  •  加载中...
iKcamp

iKcamp

回答于2022-06-22 19:06

编译性语言最终都会编译成二进制执行,汇编语言讲二进制指定为简单的人类可识别助记符,所以是可直接反汇编的。

解释性语言大多依托于虚拟机这样的环境,或者运行引擎,引擎和虚拟机有自己的指令集,最终反编译出来的是环境和虚拟机的反汇编助记符

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<