当编译器以文本形式编译我的代码时,它会将文本代码转换为低级代码,对于代码块中的GCC,汇编代码。
我是否可以直接在我的机器上运行此编译程序,而无需Windows操作系统?
.exe是一个带有内置汇编指令的编译文件到我的程序中吗?
如果Windows已经是巨型汇编程序,那么它如何运行汇编程序?
如果汇编语言程序是字节码,为什么当我用PIC刻录机记录PIC时,我会给它写六进制代码?
x64 architeture是一个带有新指令的新建筑,但仍然有x86指令吗?是真还是假?
如何阅读编译器生成的低级代码?
由于
答案 0 :(得分:2)
虽然我同意templatetypedef的评论,认为这应该分成更小的问题,但我会尽力在这里提出一些问题。
我可以直接在我的机器上运行这个已编译的程序,而不是 需要Windows操作系统?
从技术上讲,是的,但这将涉及修改正常启动过程。这与你的第三个问题有关。 Windows本身是一种应用程序加载器,它是一个旨在启动其他应用程序(以及做其他有用的事情)的应用程序。此时,当您的计算机启动时,其第一条指令可能是JUMP
指令,告诉计算机“跳转”到操作系统的内存位置并开始初始化。从那时起,操作系统相对独立。
.exe是一个带有内置汇编指令的编译文件 我的节目?
.exe
文件只是一种可执行文件。其他包括ELF
和Mach-O
以及其他一系列。 .exe
文件就像任何其他文件一样,除了它的'header'之外,它告诉机器以下数据是机器可执行指令(1和0)的形式。不要将汇编语言与机器指令混淆。机器不读取像mov %eax, %ebx
这样的汇编指令。首先,它通过assmebler
并转换为1和0。
如果汇编语言程序是字节码,那么为什么我记录PIC 使用PIC刻录机,我写了六进制代码吗?
如上所述。 Bytecode
是一个含义很多的词。十六进制只是表示二进制的另一种(更短的)方式。在一天结束时,一切都会减少到二进制。
x64 architeture是一个新的架构,带有新的指令但是 它还有x86指令吗?对还是错?
真。英特尔尽最大努力保持完全向后兼容性。这不一定适用于操作系统。
如何阅读编译器生成的低级代码?
低级别我认为你的意思是汇编代码,而不是1和0。最常见的方法是将-S
标志与gcc
之类的编译器一起使用。这将输出.s
程序集文件,而不是.o
对象或.exe(etc)
可执行文件。
如果您想了解有关汇编的更多信息,这是英特尔处理器的God Reference(IA-32
('x86')和x86-64
)。请注意,这是非常沉重的。你最好在Google上寻找Windows或OS X汇编教程。 NASM是一个免费的多平台汇编程序,如果你想要开始,它的语法与其他人略有不同。在你开始学习计算机系统的基础知识 - 处理器的工作原理等等之前,你可以先学习一种比DLX或MIPS更简单的汇编语言。
答案 1 :(得分:2)
我可以直接在我的机器上运行这个编译的程序,而不需要Windows操作系统吗?
一般来说,没有。程序几乎总是使用操作系统的API来执行常见任务,因此在没有操作系统的情况下无法运行它们。此外,大多数操作系统要求可执行文件采用特定的文件格式(Windows中为“PE”,Linux上为“ELF”,OS X上为“Mach-O”等),因此它们(更确切地说是loader)可以做它想要/需要做的事情。为了运行原始机器代码,您需要一种所谓的平面二进制格式。
.exe是一个带有内置汇编指令的编译文件到我的程序中吗?
是的,正如我上面提到的,它还包含操作系统所需的一些元数据。
如果装配程序已经是一个巨大的装配程序,它如何运行装配程序?
它将它加载到适当地址的内存中并跳转到其入口点。
如果汇编语言程序是字节码,为什么当我用PIC刻录机录制PIC时,我会给它写六进制代码?
没有。 PIC(以及一般的所有微控制器)以二进制形式存储原始机器代码。 .hex
文件中的十六进制表示只是一种方便的,人类可读的数据存储形式。
x64 architeture是一个带有新指令的新建筑,但仍然有x86指令吗?对还是错?
我会说它与x86向后兼容并提供一些支持。它确实有x86的指令集。
如何阅读编译器生成的低级代码?
也许在文本编辑器中打开它?这个问题太模糊了。但是,如果您打算询问如何查看生成的人工可读汇编代码,请参阅编译器手册。对于gcc
和clang
,通常使用-S
编译器标志来实现。