1

I understand that programming languages translate certain keywords in computer-readable code, but how can a computer understand it is executing an "if" or a "while" statement when it can only handle ones and zeros? And how did the early programmer's know what to type, using only binary?

4

1 回答 1

3

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

简短的回答是计算机不理解 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

所以机器知道如何测试值并设置状态寄存器中的位(这是存储零位的地方)。并且它知道如何在指令流中有条件地前后跳转(你大概可以猜到while循环是如何实现的:你做一个测试,然后在指令列表中向后跳转做一个循环)。我猜你可以说机器内置了一种“如果”,但它很简单:它只能向前或向后跳跃。

您可能会发现研究简单 CPU 的指令集(例如Atmel AVR )会提供有用的信息,以了解 CPU 本身可以做什么。

早期的程序员怎么知道只用二进制输入什么?

我猜他们有一个处理器知道如何解释的所有指令的大列表。或者也许是指令集手册

顺便说一句,早期的程序员不打字,他们在打孔卡上输入代码,或者通过拨动开关。

于 2013-08-14T16:02:47.793 回答