我自己编写了一个关于编译器的课程并制作了一个基础知识,我对第一个编译器仍然存在这种挥之不去的怀疑。
从高级别到低级别,我看到运行的代码可以说是C或C ++,它可以通过它的编译器转换为相应的汇编语言(比如说gcc)。此代码依赖于平台(假设我在intel x86架构上)。
现在问题是,硬件如何运行程序集?
我记得从我的计算机组织类中,每个汇编语句都转换为特定的格式(取决于处理器),例如,像mov ax,bx这样的语句被转换为它的操作码,比如0110 101010 101000.假设汇编程序解析汇编语言程序中的每个语句并将其转换为机器代码,那么第一个汇编程序是如何编写的?
答案 0 :(得分:10)
其实我觉得你明白了。首先是标题问题,硬件如何运行程序集。硬件运行在机器代码或机器指令或任何术语上。正如您所正确描述的那样,汇编是该机器代码的代表,并不总是接近一对一的关系,一个asm指令到一个机器指令。这些是位,1和0,硬件现在可以执行位描述的操作。
现在第一个汇编程序是如何编写的?用铅笔和纸。您通常会在某种伪程序集中写下指令,因为您可能没有完全定义语言,然后根据编码写下这些位,这与汇编程序的作用相同。然后使用某种机制将这些位提供给计算机并告诉它运行。
最终,自然,这对于较大的程序来说变得乏味,因此您决定编写一个更大的程序来解析一种更容易编写的语言,然后用更复杂的语言和程序重复该程序。
即使在今天,取决于团队和他们如何做事以及个别工程师测试指令解码器等。手工编写机器代码仍然会发生。最终创建了汇编程序并切换到该汇编程序,有时会有更高级别的编译器,您可以切换到大部分编码,但在芯片开发领域,您仍然非常了解并且不时会修改机器代码级别的指令位。
答案 1 :(得分:5)
它在front panel上“切换”或从paper tape读入。你可以计算出二进制文件并设置开关或手工制作孔,转换你脑中的操作码。传说Seymour Cray以这种方式进入了整个第一个Cray OS。
答案 2 :(得分:2)
“硬件”,主要是CPU和内存,几乎是一个有限状态机。其状态/输出和输入大致是寄存器和存储器的内容。
您的程序编译为FSM“理解”的机器代码,将FSM从一个状态驱动到另一个状态。这就是“硬件组装”的方式。
除非第一个汇编程序/编译器是交叉编译的(在不同平台上开发和编译),否则第一个汇编程序/编译器将被手动编写并转换为机器代码,然后输入。