# zCore **Repository Path**: finalize/z-core ## Basic Information - **Project Name**: zCore - **Description**: 使用C语言写的CPU,目前拥有32条指令 - **Primary Language**: C - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-12 - **Last Updated**: 2023-02-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: 项目 ## README # 1. zCore 本项目是一个使用C语言写的CPU,目前拥有32条指令 请注意,zCore并不是一个通用的CPU,虽然它的设计各方面都参照了现实里的CPU,但本质上它仍然只是一个程序,并且本人最初的设计意愿是设计一个能够执行位置无关代码的组件而并不是真的设计一个处理器,只是在设计的过程中意识到,这样的组件就是一个字节码解释器 - [1. zCore](#1-zcore) - [1.1. 体系结构简介](#11-体系结构简介) - [1.2. 指令集](#12-指令集) - [1.3. 调用规范](#13-调用规范) ## 1.1. 体系结构简介 12个通用寄存器`r0-r11` 链接寄存器`LR` 程序计数器`PC`,堆栈指针`SP` 程序状态字`PSR`,目前只有最低位作为条件标志位用于控制条件跳转指令 数据段寄存器`DS`,作为所内存访问的偏移基址,因此zCore的数据段具有位置无关特性 不支持未对齐访问,此操作将引起内核异常,目前,内核异常只会导致CPU退出执行,暂时还没分配异常向量 支持SVC Call,可产生软中断,需要提前配置好中断向量表 所有的的跳转都是相对寻址,因此zCore的代码也具有位置无关特性 ## 1.2. 指令集 zCore的指令集虽然只有32条指令,但涵盖了软中断、内存访问、逻辑&数学运算、条件判断、无条件分支/条件分支和二进制运算 具体的指令请参考文件[inst.c](inst.c)和[inst.h](inst.h) ## 1.3. 调用规范 1. zCore的子程序调用基于跳转指令,需要编译器处理,此编译器还正在开发中 2. zCore进行子程序跳转时,会自动保存当前的PC到LR寄存器,子程序执行完成后,可使用RET指令返回 3. 参数通过压栈传递 4. 进行系统调用时,参数依然通过堆栈传递,用于处理系统调用的函数会收到参数指针 5. 子程序若存在嵌套调用,则需要将LR寄存器压栈保存