中央处理器@CPU是怎么看懂代码的?
备注:这是我问答内容的一个精编版 , 增加了一些内容 , 所以和原内容略有不同 。
去年底 , 有中国开发者已经开发出文言文编程语言 , 并在GitHub上摘得了5500星 , 在国内引起不小反响 。 这件事给普通人的印象是 , 科技发展日新月异 , 电脑CPU太厉害 , 都能读懂文言文了!
CPU真的能看懂文言文代码吗?答案是CPU既看不懂文言文代码 , 也看不懂英文代码 。
现在的CPU晶体管数量动辄几十亿个 , 结构非常复杂 , 但内部传输的信号只有两种:高电压和低电压 , 分别代表数字信号“1”和“0”(也有相反的) , 因此CPU唯一能看懂的就是由“1”和“0”组成的代码 。
由于程序(代码)存储在电脑硬盘中时 , 也是“1”和“0”的形式 , 是否就意味着 , 只要程序存到硬盘中 , CPU就能认识呢?
答案是CPU仍然看不懂这些程序 , 因为以“1”和“0”位模式存储的程序和以“1”和“0”写成的机器语言完全是两回事 , 简单说 , 两者的区别类似于汉语书和英语书都用纸和油墨印制 , 但依然是两种不同的语言 , 不会英语的依然看不懂英语书 。
机器语言是CPU唯一能看懂的语言 , 也是第一代编程语言 。
本文插图
图片说明:早期的计算机程序员使用机器语言编程 , 将用0和1数字编成的程序代码打在纸带或卡片上(打孔代表1 , 不打孔代表0) , 再将它通过纸带机或卡片机输入计算机 , 进行运算 。
机器语言的最大特点是面向计算机硬件编程 , 简单说就是程序员需要通晓计算机硬件知识 , 写的程序要真实表示数据是如何被计算机操纵的 。 对程序员来说这就比较头大 , 一方面不仅需要通晓计算机硬件知识 , 另一方面如果计算机使用了不同的硬件 , 那么就得重新编程 。
毕竟上得了“厅堂”(搞掂硬件)下得了“厨房”(玩得转软件) , 只有少数大神能做到 , 加上机器语言纯用“0”和“1”序列组成 , 非常单调枯燥 , 不仅扼杀了编程的趣味 , 而且对视力也是一种考验 , 稍微一眼花 , 看错1或0的排列位置 , 就会制造一个大BUG 。
于是 , 有一帮人开始琢磨了:能不能将计算机硬件从编程中分离出来 , 让硬件知识小白也能编程?
最先开窍的是蓝色巨人IBM , 它在其System/360计算机中引入了ISA(Instruction Set Architecture)概念 , 将编程所需要了解的硬件信息从硬件中抽象出来 , 这样编程人员就可以面向ISA编程 。 由于ISA是用来描述编程时用到的抽象机器(不是具体的电脑CPU) , 包括了一套指令集和一些寄存器 , 因此 , 程序员只要知道ISA , 不需要了解具体的硬件知识 , 就可以编写程序 , 在ISA相同的电脑上运行 。
这样一来 , 就出现了汇编语言 , 但汇编语言用符号写成 , 还是不够接地气儿 , 于是高级语言就诞生了 。 高级语言的诞生 , 使程序员将精力从复杂的计算机结构转移到要解决的问题 , 从而可以专心烹调程序大餐 。
由此也可以看出 , 现在的程序员并不都是了解计算机硬件的 , 所以妹子们不要指望自己的程序员男朋友给你DIY电脑 , 或者电脑坏了 , 他能给你省下一笔修理费 。 他说不会修 , 那就是真的不会修 。
自从高级语言出现后 , 人类开始了在编程语言上的放飞自我 , 经过数十年的发明创造 , 现在的高级编程语言已超过2500种 , 像比较知名的C++和Java等 , 都属于高级语言 。
本文插图
极客漫画《编程语言之战》 , 展示的是高级编程语言之间的市场竞争 , 也揭示了高级编程语言多如牛毛 。
【中央处理器@CPU是怎么看懂代码的?】但问题出现了 , CPU能理解的机器语言还是那个机器语言 , 几十年来没有变化 , 让它读懂高级语言那是不可能的 。
推荐阅读
- 『价格』价格差 100,华为 Mate30 和 iPhone SE2 怎么选?答案简单!
- 『市场份额』鲁大师公布一季度手机排名,华为荣耀排名第一、二名,安兔兔怎么看?
- 『冬季摄影』冬天摄影:怎么拍摄以花朵为主题的冬季照片?
- 「运营商」半夜12点断我网络,一气之下换了运营商,看看怎么回事
- #外观#李现代言的荣耀30,被iPhoneSE2截胡?怎么选不用我说了吧!
- 小鱼一键重装系统@微软mse杀毒软件怎么样
- [世界]智能AI未来将全面取代人类世界?对此,你怎么认为的?
- #宅女科技范#智能AI未来将全面取代人类世界?对此,你怎么认为的?
- #轻度玩机#李现代言的荣耀30,被iPhoneSE2截胡?怎么选不用我说了吧!
- 『』洗碗机怎么选?米家互联网洗碗机8套容量更适合家用