以前闲得蛋疼的时候写在自己BLOG的,新手可以看看,高手路过勿喷
一、指令集和CPU(Instruction set and central process unit)
1.计算机只认识0和1.0和1的排列组合构成指令。不一样的CPU,会有不一样的指令集构架。指令集构架分为RISC和CISC构架(RISC, reduced instruction set computer,精简指令集。CISC, complex instruction set computer,复杂指令集。)RISC 设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不常用的功能,常通过组合指令来完成。CISC指令集的指令系统比较丰富,有专用指令来完成特定的功能。常用的PC是CISC构架,也即X86指令构架集是CISC构架。
2.除了intel/AMD的x86之外,还有很多很多种CPU。如DEC的Alpha21364、IBM的Power PC G4、HP的PA—8900、SGI的R12000A和SUN Microsystem公司的Ultra SPARC。这些CPU多采用RISC构架。
3.手机之类的掌上智能用品,一般采用ARM技术的处理器。ARM处理器是RISC指令集构架。
4.除了指令集构架之外,CPU通用构架体系有冯诺依曼体系结构和哈佛结构。还有其他的结构。还有硬件支持函数式编程的CPU体系结构和指令集...
5.龙芯采用什么指令集构架?呵呵,当然不是x86,人家那个是有专利(Proprietary)的。也就是说,龙芯认识的0和1的排列组合是和Intel芯片认识的0和1的排列组合是不一样的。据说龙芯大概抄的是MIPS的方案,指令集构架也是RISC的。龙芯上面是不能跑windows操作系统的,只能跑Linux和其他的开源操作系统。为什么?因为windows系统源代码是不开放的,只有Microsoft公司自己知道,Microsoft想让windows操作系统在什么芯片上跑,那种芯片才能跑。而Linux系统的源代码是开放的,所以开发龙芯的团队可以把Linux操作系统移植到自己的芯片上去。
二、计算机怎么认识程序(Why computer can read my program)
1.由于计算机只认识0和1,所以要写一个程序让计算机认识的话,只能用二进制代码。所以最早期的程序员用0和1编程。这是真的。据说那个时代最常用的编程工具是纸带和打孔机。我没弄懂输出终端是用什么,难道是显示器吗?如果输出终端也是纸带和打孔机的话,我想发展计算机技术的美国人那时的这种举动真的是太搞笑了,哈哈。
2.用0和1编程实在令人无法忍受。于是汇编语言出现了。汇编语言允许程序员用一个助记符而不是一串0和1代表一个指令。
三、编译器(Complier)
1.汇编语言为什么能用助记符代表一串0和1?这是因为有汇编编译器。汇编编译器会将那些助记符转换为对应的0和1的串。也就是说,你可以用"mov eax, 0xa"这样的东西去代替一串形如"0011010101011100..."这样的东西。
2.汇编编译器本身也是一个程序。它只是一个特殊的程序。既然是程序,那么这个程序本身是用什么语言写的呢?答案是,第一个汇编编译器只能用机器语言写。
3.当你有了第一个汇编编译器,那么第二个汇编编译器(需要第二个汇编编译器可能是它会比第一个汇编编译器更好更强大吧)用什么来写呢?这个时候能用汇编语言了(因为你有了第一个汇编编译器了),你可以选择用汇编语言写,也可以用机器语言写。如果用汇编语言写,这是一个无穷的过程,你可以写第N个汇编编译器。这个无穷的过程叫做编译器的自举(bootstrap. 自举这个词容易让人联想到其它的东西...对不起我邪恶了)。
一、指令集和CPU(Instruction set and central process unit)
1.计算机只认识0和1.0和1的排列组合构成指令。不一样的CPU,会有不一样的指令集构架。指令集构架分为RISC和CISC构架(RISC, reduced instruction set computer,精简指令集。CISC, complex instruction set computer,复杂指令集。)RISC 设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不常用的功能,常通过组合指令来完成。CISC指令集的指令系统比较丰富,有专用指令来完成特定的功能。常用的PC是CISC构架,也即X86指令构架集是CISC构架。
2.除了intel/AMD的x86之外,还有很多很多种CPU。如DEC的Alpha21364、IBM的Power PC G4、HP的PA—8900、SGI的R12000A和SUN Microsystem公司的Ultra SPARC。这些CPU多采用RISC构架。
3.手机之类的掌上智能用品,一般采用ARM技术的处理器。ARM处理器是RISC指令集构架。
4.除了指令集构架之外,CPU通用构架体系有冯诺依曼体系结构和哈佛结构。还有其他的结构。还有硬件支持函数式编程的CPU体系结构和指令集...
5.龙芯采用什么指令集构架?呵呵,当然不是x86,人家那个是有专利(Proprietary)的。也就是说,龙芯认识的0和1的排列组合是和Intel芯片认识的0和1的排列组合是不一样的。据说龙芯大概抄的是MIPS的方案,指令集构架也是RISC的。龙芯上面是不能跑windows操作系统的,只能跑Linux和其他的开源操作系统。为什么?因为windows系统源代码是不开放的,只有Microsoft公司自己知道,Microsoft想让windows操作系统在什么芯片上跑,那种芯片才能跑。而Linux系统的源代码是开放的,所以开发龙芯的团队可以把Linux操作系统移植到自己的芯片上去。
二、计算机怎么认识程序(Why computer can read my program)
1.由于计算机只认识0和1,所以要写一个程序让计算机认识的话,只能用二进制代码。所以最早期的程序员用0和1编程。这是真的。据说那个时代最常用的编程工具是纸带和打孔机。我没弄懂输出终端是用什么,难道是显示器吗?如果输出终端也是纸带和打孔机的话,我想发展计算机技术的美国人那时的这种举动真的是太搞笑了,哈哈。
2.用0和1编程实在令人无法忍受。于是汇编语言出现了。汇编语言允许程序员用一个助记符而不是一串0和1代表一个指令。
三、编译器(Complier)
1.汇编语言为什么能用助记符代表一串0和1?这是因为有汇编编译器。汇编编译器会将那些助记符转换为对应的0和1的串。也就是说,你可以用"mov eax, 0xa"这样的东西去代替一串形如"0011010101011100..."这样的东西。
2.汇编编译器本身也是一个程序。它只是一个特殊的程序。既然是程序,那么这个程序本身是用什么语言写的呢?答案是,第一个汇编编译器只能用机器语言写。
3.当你有了第一个汇编编译器,那么第二个汇编编译器(需要第二个汇编编译器可能是它会比第一个汇编编译器更好更强大吧)用什么来写呢?这个时候能用汇编语言了(因为你有了第一个汇编编译器了),你可以选择用汇编语言写,也可以用机器语言写。如果用汇编语言写,这是一个无穷的过程,你可以写第N个汇编编译器。这个无穷的过程叫做编译器的自举(bootstrap. 自举这个词容易让人联想到其它的东西...对不起我邪恶了)。



