首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编代码与机器代码还是目标代码?

汇编代码与机器代码还是目标代码?
EN

Stack Overflow用户
提问于 2009-01-21 20:17:27
回答 9查看 173.4K关注 0票数 255

目标代码、机器代码和汇编代码之间的区别是什么?

你能给出一个直观的例子来说明它们的区别吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-01-21 20:22:51

机器码是可以直接由CPU执行的二进制(1和0)代码。如果您在文本编辑器中打开机器代码文件,您将看到垃圾,包括不可打印的字符(不,不是那些不可打印的字符;)。

目标代码是尚未链接到完整程序中的机器代码的一部分。它是一个特定库或模块的机器代码,它将构成完整的产品。它还可能包含在完整程序的机器代码中找不到的占位符或偏移量。链接器将使用这些占位符和偏移量将所有内容连接在一起。

汇编代码是纯文本的,并且(在某种程度上)人类可读的源代码,它主要与机器指令直接1:1类似。这是使用实际指令、寄存器或其他资源的助记符来实现的。例如,用于中央处理器跳转和乘法指令的JMPMULT。与机器代码不同,CPU不理解汇编代码。您可以使用汇编程序编译器将汇编代码转换为机器码,尽管我们通常认为编译器与高级编程语言相关联,这些高级编程语言是从CPU指令中进一步抽象出来的。

构建一个完整的程序涉及到用汇编语言或更高级的语言(如C++ )为程序编写源代码。源代码被汇编(对于汇编代码)或编译(对于高级语言)为目标代码,并且各个模块被链接在一起,成为最终程序的机器代码。在非常简单的程序的情况下,可能不需要链接步骤。在其他情况下,例如使用IDE (集成开发环境),可以一起调用链接器和编译器。在其他情况下,可以使用复杂的make脚本或解决方案文件来告诉环境如何构建最终的应用程序。

还有一些行为不同的解释语言。解释型语言依赖于特殊解释器程序的机器代码。在基本级别,解释器解析源代码,并立即将命令转换为新的机器码并执行它们。现代解释器现在要复杂得多:一次评估整个源代码部分,在可能的情况下缓存和优化,以及处理复杂的内存管理任务。

最后一种类型的程序涉及使用runtime-environment虚拟机。在这种情况下,首先将程序预编译成较低级的中间语言字节码。然后,该字节码由虚拟机加载,它会及时将其编译为本机代码。这里的优点是虚拟机可以利用程序运行时和特定环境下可用的优化。编译器属于开发人员,因此必须生成相对通用(优化程度较低)的机器码,这些机器码可以在许多地方运行。但是,运行时环境或虚拟机位于最终用户的计算机上,因此可以利用该系统提供的所有功能。

票数 331
EN

Stack Overflow用户

发布于 2009-07-31 15:31:14

其他答案很好地描述了不同之处,但您也要求视觉效果。下面的图表显示了它们从C代码到可执行文件的过程。

票数 142
EN

Stack Overflow用户

发布于 2009-01-21 20:23:05

汇编代码是机器代码的人类可读表示:

代码语言:javascript
复制
mov eax, 77
jmp anywhere

机器代码是纯十六进制代码:

代码语言:javascript
复制
5F 3A E3 F1

我假设你指的是目标文件中的目标代码。这是机器码的一种变体,不同之处在于跳转是某种参数化的,以便链接器可以填充它们。

汇编程序用于将汇编代码转换为机器代码(目标代码)。链接器链接多个对象(和库)文件以生成可执行文件。

我曾经用纯十六进制(没有可用的汇编器)写过一个汇编程序,幸运的是,这是在好的旧的(古老的) 6502上。但我很高兴有奔腾操作码的汇编程序。

票数 53
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/466790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档