Compiler construction 计算机如何才能创造出一个;如果;仅使用1和0的语句

Compiler construction 计算机如何才能创造出一个;如果;仅使用1和0的语句,compiler-construction,binary,Compiler Construction,Binary,我知道编程语言在计算机可读代码中翻译某些关键字,但当计算机只能处理1和0时,如何理解它正在执行“if”或“while”语句?早期的程序员如何知道只使用二进制文件来输入什么 计算机如何理解它正在执行“if”或“while”语句 简单的回答是,计算机无法理解是否或何时 计算机执行一个接一个的简单指令。每个指令都位于特定的地址。在指令列表中有特殊的“分支”(或“跳转”)指令可向前和向后跳转。其中一些跳转指令取决于CPU中某些位的值。例如,通常有一个位指示先前的计算是否为零。还有设置这些位的指令,以及只

我知道编程语言在计算机可读代码中翻译某些关键字,但当计算机只能处理1和0时,如何理解它正在执行“if”或“while”语句?早期的程序员如何知道只使用二进制文件来输入什么

计算机如何理解它正在执行“if”或“while”语句

简单的回答是,计算机无法理解是否或何时

计算机执行一个接一个的简单指令。每个指令都位于特定的地址。在指令列表中有特殊的“分支”(或“跳转”)指令可向前和向后跳转。其中一些跳转指令取决于CPU中某些位的值。例如,通常有一个位指示先前的计算是否为零。还有设置这些位的指令,以及只根据这些位的值有条件地跳转的特殊跳转指令

考虑以下代码:

if( a == 0 ){
    b = 1;
}else{
    b = 2;
}
这可能会被编译成机器代码,类似于下面的汇编代码(我正在简化它以解释如何编译if语句):

因此,机器知道如何在中测试值和设置位(存储零位的位置)。它知道如何在指令流中有条件地向前和向后跳转(您可能会猜到while循环是如何实现的:您进行测试并在指令列表中向后跳转以生成循环)。我想你可以说这台机器内置了一种“如果”,但它很简单:它只能向前或向后跳跃

您可能会发现,研究简单CPU(如)的性能,了解CPU本机可以做什么,这是非常有用的

早期的程序员如何知道只使用二进制文件来输入什么

我猜他们有一个很大的清单,上面列出了处理器知道如何解释的所有指令。或者可能是一个


顺便说一句,早期的程序员不打字,他们输入代码,或者通过翻转开关组

我建议你读一些关于计算机体系结构的书。@Shivamkara好的,好主意,你有什么建议吗?@AntonD我认为Tanenbaum的《结构化计算机组织》是一本常见的第一本书。不过我还没有读过。@AntonD Search
nptel计算机体系结构讲座视频在谷歌上。Petzold的“”是一个很好的诗意介绍,介绍了最底层的东西。非常感谢这些链接,它们真的很有帮助!你是用汇编语言写的吗?@AntonD没问题。我用的语言是一种汇编语言。通常会有一些测试、JNZ、存储和跳转指令。不过,它们的名称可能会有所不同。我使用了变量a和b,你有时可以这样做,但这是欺骗:并不是所有的汇编程序(或CPU)都使处理变量变得如此容易。我这样做是为了简化解释。运行电子存储程序的计算机相当先进。在此之前,计算机通常是用电线编程的。一个可以使用8个寄存器运行32步程序并且可以执行8个操作的程序,对于每个允许的程序步骤可能有四个连接点,对于每个寄存器(fetch op1、fetch op2和store)可能有三个连接点,对于每个允许的操作可能有一个套接字。如果步骤3应将寄存器3添加到寄存器5并将结果存储到寄存器6,则导线将“步骤3”连接点连接到“寄存器3 fetch1”、“寄存器5 fetch2”、“操作添加”和“寄存器6存储”。人们可以通过手工复制接线图或拍照来“保存”一个程序,然后通过再次串接适当的电线来“加载”一个程序。@supercat:你是说ablut吗?
;;(address instruction params ;; comments)
   10      TEST        a      ;; set the "ZERO" bit based on whether a is zero
   20      JNZ         50     ;; if ZERO bit is *not* set, jump to 50, otherwise fall through to 30
   30      STORE       b, 1   ;; store 1 in b
   40      JUMP        60     ;; jump over else branch
   50      STORE       b, 2   ;; store 2 in b
   60