CPU-如何开始在新的CPU上编程

商务办公
新在哪里?从未接触过。比如之前一直在x86、ARM上写程序,C比较多,汇编也调过。MIPS可能零零星星也看过几篇资料。然后来了个用PowerPC的项目,或者RISC-V的项目,茫茫然无可奈何不知所措。

 新在哪里?从未接触过。比如之前一直在x86、ARM上写程序,C比较多,汇编也调过。MIPS可能零零星星也看过几篇资料。然后来了个用PowerPC的项目,或者RISC-V的项目,茫茫然无可奈何不知所措。

这里介绍CPU相关的概念,需要哪些资料,可以没有概念上的缺口,踏踏实实的开始为一个于己而言全新的CPU编写代码。

[[252410]]

一. CPU

CPU即中央处理器,执行一系列指令,完成处理任务。CPU即是指令执行器,包含了为执行各种指令所需要的模块,如数学运算单元ALU、指令编译码器、寄存器、移位寄存器、计数器等基础组成部分,还有L1/L2 Cache, MMU等现代CPU而言也算基础的单元。

二. SoC

System on Chip: 片上系统,为了提升集成度,降低PCB电路板上的芯片器件数量,把相当一部分芯片和CPU封装到一起,即成为SoC。被封装的器件成为SoC的模块,如USB, Eth MAC/PHY, WIFI(802.11), NFC, Bluetooth, GPS模块, 除了片上内存之外,Flash也可以集成进去,等等。

三. ISA

Instruction Set Architecture:指令集架构。规定了每条指令的格式和作用等。基本上,每个指令集都包含数学运算、移位、跳转、内存访问等指令,有一些还包含多媒体处理、压缩解压缩等领域能力增强指令。

ISA由以下几个模型组成:

1.Register Model

指令必然用到寄存器,寄存器有多少、如何组织等,属于寄存器模型的内容。

2.Intstruction Model

指令的种类、格式、作用等。根据指令格式是否固定,可以分为复杂指令集和精简指令集,即CISC和RISC。

3.Interrupt Model

如何响应外部世界变化?有主动和被动两种方式。具体到CPU而言:

a. 主动轮询是否存在外部事件需要响应;

b. 被外部事件中断;

细细思量之下,中断即使在一条指令未执行完成时发生,也无法立即得到响应,而是需要在当前指令执行完毕之后,去查看是否有中断发生,如果有则进行响应。所以中断其实也是轮询,只不过轮询的周期为每执行一条指令轮询一次。外因通过内因起作用,也可以理解。

中断模型定义:

a. 要处理的内部错误和外部中断的种类;

b. 处理方式是否分为常规和快速处理模式;

c. 中断是否有优先级,是否能够打断,是否能够嵌套等;

与CPU的关系

常见的ISA有x86, ARM, MIPS, PowerPC等,其他早期的有Alpha,新生的有RISC-V等。

一般而言,每种CPU只基于某一种特定的ISA,而ISA可以有很多CPU实现。如i386/i586, Core i3/i5/i7都基于x86,AMD的CPU也基于x86。

当然也有例外,比如龙心Loongson主要基于MIPS,同时也实现了x86指令的译码(揣测,未确认)。

四. ABI

Application Binary Interface 应用二进制接口。区别于Application Programming Interface(API),ABI规定了如何使用ISA规定的指令集和寄存器进行编程,如哪一个寄存器用作栈指针,哪一个传递函数返回值,哪几个传递函数入参等。

可见,ABI与ISA对应,而非CPU。

五. 开始编程

需要资料如下:

1.SoC文档:内存地址空间划分,初始化流程,各个模块的寄存器定义;

2.CPU文档:包含哪些模块以及如何配置使用:MMU如何配置,Cache怎么刷等;

3.ISA文档:寄存器模型、指令的作用等;

4.ISA对应的ABI规范:使用寄存器时有哪些注意事项;如PPCEABI,System V ABI,System V Application Binary Interface - Intel386 Architecture Processor Supplement,System V Application Binary Interface - PowerPC Processor Supplement。

5.编译工具链资料:汇编器、编译器、链接器。

责任编辑:武晓燕 来源: 故事v历史
相关推荐

2023-04-12 15:37:31

Linux系统CPU

2019-06-03 20:00:09

LinuxCPU温度GPU温度

2023-07-10 13:46:58

PythonLlama.cppLLM

2021-05-10 08:20:32

CPU 符号整数

2010-03-18 16:02:09

python 多线程

2022-09-15 08:38:39

WebCPU数量

2013-12-18 11:04:57

CPU双核

2019-07-10 05:08:05

CPU内存分页管理

2023-06-06 16:10:11

2021-04-08 09:32:17

鸿蒙HarmonyOS应用

2018-12-06 12:58:50

CPU内存模块

2022-05-05 12:01:16

压力测试Linux

2022-05-05 05:55:44

Linux 系统压力测试

2022-06-20 05:18:29

服务器CPU

2011-03-30 14:49:00

Visual C++CPU

2015-07-22 17:30:14

应用交付 太一星晨

2011-04-15 09:47:10

CentOSCPU

2010-04-06 09:22:23

CentOS系统

2012-05-16 11:03:50

微软IIS

2017-01-12 15:17:27

线程CPU定位
点赞
收藏

51CTO技术栈公众号