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?
问问题
1533 次
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 回答