1

当编译器以文本形式编译我的代码时,它会将文本代码转换为低级代码,在代码块中的 GCC 的情况下,汇编。

  1. 我可以直接在我的机器上运行这个编译的程序,而不需要 windows 操作系统吗?

  2. .exe 是带有内置汇编指令的编译文件吗?

  3. 如果windows已经是一个巨大的汇编程序,它如何运行汇编程序

  4. 如果汇编语言程序是字节码,为什么当我用 PIC 刻录机录制 PIC 时,我会向它写入 hexacode?

  5. x64 架构是具有新指令的新架构,但仍然具有 x86 指令?对或错?

  6. 如何读取编译器生成的低级代码?

谢谢

4

2 回答 2

2

虽然我同意 templatetypedef 的评论,即这应该分成更小的问题,但我会尽力在此处为您的每个问题提供一些指示。

我可以直接在我的机器上运行这个编译的程序,而不需要 windows 操作系统吗?

从技术上讲,是的,但这将涉及修改正常的启动过程。这与您的第三个问题有关。Windows 本身是一种应用程序加载器,它是一种旨在启动其他应用程序(并做其他有用的事情)的应用程序。目前,当您的计算机启动时,它的第一条指令可能是JUMP告诉计算机“跳转到”您的操作系统的内存位置并开始其初始化的指令。从此,操作系统相对独立。

.exe 是带有内置汇编指令的编译文件吗?

.exe文件只是一种可执行文件。其他包括ELFMach-O以及其他一系列。文件.exe就像任何其他文件一样,除了它的“标题”告诉机器以下数据是机器可执行指令的形式(1 和 0)。不要将汇编语言与机器指令混淆。mov %eax, %ebx机器不会读取类似的汇编指令。首先它通过一个assmebler并转换为 1 和 0。

如果汇编语言程序是字节码,为什么当我用 PIC 刻录机录制 PIC 时,我会向它写入 hexacode?

如上。Bytecode是一个有很多含义的词。十六进制只是表示二进制的另一种(较短)方式。在一天结束时,一切都归结为二进制。

x64 架构是具有新指令的新架构,但仍然具有 x86 指令?对或错?

真的。英特尔尽最大努力保持完全的向后兼容性。这不一定适用于操作系统。

如何读取编译器生成的低级代码?

低级别我假设您的意思是汇编代码,而不是 1 和 0。最常见的方法是将-S标志与gcc. 这将输出一个.s程序集文件而不是一个.o对象或.exe(etc)可执行文件。

如果您想了解更多关于组装的信息,这是英特尔处理器(('x86')和)的上帝参考。请注意,这是非常沉重的。您最好在 Google 上查找 Windows 或 OS X 组装教程。如果您想入门,NASM是一个免费的多平台汇编器,不过它的语法与其他汇编器略有不同。在你进行任何这些之前,我建议你学习计算机系统的基础知识——处理器是如何工作的,等等。也许首先学习一种更简单的汇编语言,比如 DLX 或 MIPS。IA-32x86-64

于 2013-01-20T07:18:34.170 回答
2

我可以直接在我的机器上运行这个编译的程序,而不需要 windows 操作系统吗?

一般来说,没有。程序几乎总是使用操作系统的 API 来执行常见的任务,因此它们不能在没有操作系统的情况下运行。此外,大多数操作系统要求可执行文件采用特定的文件格式(Windows 为“PE”,Linux 为“ELF”,OS X 为“Mach-O”等),以便它们(更准确地说loader) 可以做它想要/需要做的事情。为了运行原始机器代码,您需要一种所谓的平面二进制格式。

.exe 是带有内置汇编指令的编译文件吗?

是的,正如我上面提到的,它还包含操作系统所需的一些元数据。

如果windows已经是一个巨大的汇编程序,它如何运行汇编程序?

它将其加载到适当地址的内存并跳转到其入口点。

如果汇编语言程序是字节码,为什么当我用 PIC 刻录机录制 PIC 时,我会向它写入 hexacode?

不,PIC(以及所有一般的微控制器)以二进制形式存储原始机器代码。文件中的十六进制表示.hex只是一种方便的、人类可读的数据存储形式。

x64 架构是具有新指令的新架构,但仍然具有 x86 指令?对或错?

我会说它向后兼容 x86 并提供一些支持。它确实具有x86的指令集。

如何读取编译器生成的低级代码?

也许通过在文本编辑器中打开它?这是一个太模糊的问题。但是,如果您想问如何查看生成的人类可读的汇编代码,请查阅编译器的手册。对于gccand clang,这通常是使用-S编译器标志来实现的。

于 2013-01-20T07:22:14.607 回答