计算机如何理解它正在执行“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上输入代码,或者通过翻转交换机库。