首页 文章

机器代码怎么去特定的处理器? [关闭]

提问于
浏览
-4

我们知道每个 processor 都有自己的指令集(ex-8085处理器有自己的INSTRUCTION SET) . 因此,要使用该处理器执行任何指令,指令必须是其指令集之一(意味着我们只能执行该指令) 8085处理器,属于8085指令集) .

所以这里我的问题是如果我们编写任何程序(假设我们使用c语言编写程序)然后在使用编译器编译之后(因为我们知道编译器生成可在机器ex..gcc或turbo c上执行的代码)它会生成使用的代码在机器上运行,即在处理器上执行的代码(属于该处理器INSTRUCTION SET的指令集) . 我们的编译器如何知道我们正在使用哪个处理器并将整个程序转换为可由我们的处理器执行的指令 .

例如 - 1)如果我们在装有奔腾处理器的机器上安装turbo c . 如果我们在这台机器上执行我们的c程序,它必须将整个程序转换为属于奔腾处理器指令集的指令集如果我们在机器上安装turbo c哪个有i5处理器,那么它必须将整个程序转换为属于i7处理器指令集的指令集 .

那么编译器如何知道我们正在使用哪个处理器以及为什么编译器对于OS不同,根据上面的解释,它必须与处理器不同?

(我很长一段时间都找到了这个问题的答案,并且对于冗长的陈述感到抱歉)

2 回答

  • 1

    有些编译器只能为特定系统生成机器代码 . 如果要为不同的系统编译,则必须完全使用不同版本的编译器或不同的编译器 .

    其他编译器知道如何编译许多不同的处理器 . 但除非你另外说明,否则它假定你想为你正在运行的同一类型的机器生成代码 . 因此,如果您在80x86 Linux上运行编译器,它将为80x86 Linux生成机器代码 .

    编译一种类型的系统并为另一种类型生成代码称为交叉编译 . 执行此操作时,您必须告诉编译器目标体系结构是什么 .

    执行此操作的方式取决于特定的编译器 . 如果您从CLI进行编译,它可能是命令行选项,如果您使用GUI,它可能在设置对话框中 .

  • 0

    同一架构系列中不同处理器模型的指令集并不完全不同 . 该体系结构的指令集具有各种子集,并且不同的处理器将具有不同的子集选择 . 通常,随着处理器变得更复杂而存在随时间增长的基本指令的子集(或若干子集)以及包含当前可选的指令的各种额外子集,这取决于orocessor模型 .

    当编译器编译时,它会编译某个目标,其中包括允许使用的一组指令子集 . 通常,默认目标是基本指令 . 生成的编译程序可以在具有这些基本指令的任何处理器上运行,但如果使用了某些可选指令,则可能无法获得性能 .

    这种体系结构的编译器通常具有可用于告诉它们要定位哪个处理器模型或编译器可能使用哪些指令子集的开关 . 生成的程序只能在具有指定指令的处理器模型上运行 . 它可能因其使用的指令而表现更好,但如果没有这些指令则不会在处理器型号上运行 .

    编译器可能会根据其运行的系统自动调整其目标 . 有指令和系统调用报告有关当前处理器上可用的指令子集以及操作系统版本和功能的信息,因此编译器可以使用这些来定制其目标 . 因此,默认情况下,编译器可能会为您执行它的系统进行编译,但如果您为其提供请求,则可以编译其他目标 .

    最终,编译器只是一个计算机程序 . 它运行,读取输入和写入输出 . 该输出可以是编译器旨在支持的任何计算机的程序 .

相关问题