注:如下内容以朱老师物联网大讲堂裸机课课件为基础
第1节 可编程器件的编程原理
1.1 电子器件的发展方向
模拟器件 -> 数字器件
ASIC -> 可编程器件
ASIC
ASIC是Application Specific Integrated Circuit的英文缩写,在集成电路界被认为是一种为专门目的而设计的集成电路。
可编程器件
早期的可编程逻辑器件只有可编程只读存贮器(PROM)、紫外线可按除只读存贮器(EPROM)和电可擦除只读存贮器(EEPROM)三种。由于结构的限制,它们只能完成简单的数字逻辑功能。
20世纪80年代中期。 Altera和Xilinx分别推出了类似于PAL结构的扩展型 CPLD(Complex Programmab1e Logic Dvice)和与标准门阵列类似的FPGA(Field Programmable Gate Array),它们都具有体系结构和逻辑单元灵活、集成度高以及适用范围宽等特点。 这两种器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活。
1.2 可编程器件的特点
- CPU在固定频率的时钟控制下节奏运行。
- CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行。
- 这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者(ARM公司)定义的,本质上是一串由1和0组成的数字。这就是CPU的汇编指令集。
1.3 整个编程及运行过程
程序员用汇编指令编程 --经汇编器汇编成二进制可执行程序文件–>二进制文件被CPU读取进去–>CPU内部电路对二进制文件解码–>解码通过则CPU执行指令、完成指令动作。
如果程序员用C语言等高级语言编程,则编译器先将C语言程序编译为汇编程序,再进行上面的后续部分。
从源代码到CPU执行过程
第2节 指令集对CPU的意义
2.1 汇编语言与C等高级语言的差异
- 汇编难写,C好写
- 汇编无可移植性,C语言有一定可移植性,Java等更高级语言移植性更强。
- 汇编语言效率最高,C语言次之,Java等更高级语言效率更低。
- 汇编不适合完成大型复杂的项目,更高级语言更适合完成更大、更复杂的项目。
2.2 汇编语言的本质
- 汇编的实质是机器指令(机器码)的助记符,是一种低级符号语言。
- 机器指令集是一款CPU的编程特征,是这款CPU的设计者制定的。CPU的内部电路设计就是为了实现这些指令集的功能。机器指令集就好象CPU的API接口一样。
2.3 编程语言的发展过程
- 纯机器码编程
- 汇编语言编程
- C语言编程
- C++语言编程
- Java C#等语言编程
- 脚本语言编程
总结: 汇编语言就是CPU的机器指令集的助记符,是一款CPU的本质特征。
不同CPU的机器指令集设计不同,因此汇编程序不能在不同CPU间互相移植。
使用汇编编程可以充分发挥CPU的设计特点,所以汇编编程效率最高,因此在操作系统内核中效率极其重要处都需要用汇编处理,所以在实际编程时我们会根据实际情况选择编程语言,并不会刻意选择最新的编程语言。
第3节 RISC和CISC的区别
3.1 CISC
complex instruction set computer复杂指令集CPU
CISC体系的设计理念是用最少的指令来完成任务(譬如计算乘法只需要一条MUL指令即可),因此CISC的CPU本身设计复杂、工艺复杂,但好处是编译器好设计。CISC出现较早,至今Intel还一直采用CISC设计
3.2 RISC
Reduced Instruction-Set Computer精简指令集CPU
RISC的设计理念是让软件来完成具体的任务,CPU本身仅提供基本功能指令集。因此RISC CPU的指令集中只有很少的指令,这种设计相对于CISC,CPU的设计和工艺简单了,但是编译器的设计变难了。
3.3 CPU设计方式发展
早期简单CPU,指令和功能都很有限
CISC年代 —— CPU功能扩展依赖于指令集的扩展,实质是CPU内部组合逻辑电路的扩展。
RISC年代 —— CPU仅提供基础功能指令(譬如内存与寄存器通信指令,基本运算与判断指令等),功能扩展由使用CPU的人利用基础架构来灵活实现。