计算机如何仅使用1和0创建“if”语句

时间:2013-08-14 15:38:55

标签: compiler-construction binary

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

1 个答案:

答案 0 :(得分:1)

  

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

简短的回答是计算机不知道是否或同时。

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

考虑以下代码:

if( a == 0 ){
    b = 1;
}else{
    b = 2;
}

这可能会被编译成机器代码,类似于下面组成的汇编代码(我正在简化它以解释如何编译if语句):

;;(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

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

您可能会发现研究instruction set等简单CPU的Atmel AVR可以提供信息,以了解CPU本身可以执行的操作。

  

早期的程序员是如何知道要输入的内容,只使用二进制文件?

我猜他们列出了处理器知道如何解释的所有指令。或者是instruction set manual

顺便说一下,早期的程序员没有打字,他们在punch cards上输入代码,或者通过翻转交换机库。