程序与技术分享:CPU0处理器的架构及应用

简介: 程序与技术分享:CPU0处理器的架构及应用

CPU0 处理器的架构及应用


简介


CPU0 是一个 32 位的处理器,包含 R0..R15, IR, MAR, MDR 等缓存器,结构如下图所示。


图 1 :CPU0 处理器的结构


其中各个缓存器的用途如下所示:


IR


指令缓存器


R0


常数缓存器, 值永远为 0。


R1~R11


通用型缓存器。


R12


状态缓存器 (Status Word : SW)


R13


堆栈指针缓存器 (Stack Pointer : SP)


R14


链接缓存器 (Link Register : LR)


R15


程序计数器 (Program Counter : PC)


MAR


地址缓存器 (Memory Address Register)


MDR


数据缓存器 (Memory Data Register)


CPU0 的指令集


CPU0 的指令分为三种类型,L 型通常为加载储存指令、A 型以算术指令为主、J 型则通常为跳跃指令,下图显示了这三种类型指令的编码格式。


图 2:CPU0 的三种指令格式


以下是 CPU0 处理器的指令表格式


表 1 :CPU0 的指令表


在第二版的 CPU0_v2 中,补上了以下指令:


类型


格式


指令


OP


说明


语法


语意


浮点运算


A


FADD


41


浮点加法


FADD Ra, Rb, Rc


Ra = Rb + Rc


浮点运算


A


FSUB


42


浮点减法


FSUB Ra, Rb, Rc


Ra = Rb + Rc


浮点运算


A


FMUL


43


浮点乘法


FMUL Ra, Rb, Rc


Ra = Rb Rc


浮点运算


A


FADD


44


浮点除法


FDIV Ra, Rb, Rc


Ra = Rb / Rc


中断处理


J


IRET


2D


中断返回


IRET


PC = LR; INT 0


状态缓存器


CPU0 的状态缓存器,包含 N, Z, C, V 等状态,以及 I, T 等中断模式位。结构如下图所示。


图 3:CPU0 的状态缓存器


当 CMP Ra, Rb 指令执行时,状态标志会因而改变。


假如 Ra > Rb, 则会设定状态 N=0, Z=0


假如 Ra < Rb, 则会设定状态 N=1, Z=0


假如 Ra = Rb, 则会设定状态 N=0, Z=1


于是条件式跳跃的 JGT, JLT, JGE,


JLE, JEQ, JNE 等指令,就可以根据状态缓存器中的 N, Z 标志进行跳跃操作。


指令的执行步骤


CPU0在执行一个指令时,必须经过取指、译码与执行等三大阶段。


提取阶段


操作1、提取指令 :IR = 【PC】


操作2、更新计数器 :PC = PC + 4


解碼阶段


操作3、解碼 :控制单元对IR进行译码后,设定数据流向开关与 ALU 的运算模式


运行时间


操作4、执行 :数据流入 ALU,经过运算后,流回指定的缓存器


V-OS:


横跨操作系统与硬件的虚拟机系统


设计一个虚拟机系统,可以将 CPU A, B, C, D, E … 模拟成另外任何一种 CPU,这样是否能解决所有的跨平台问题呢?


QEMU 其实可以做到类似的操作,想法与 QEMU 不同点在于 QEMU 是在操作系统层次之上的,做法是在操作系统层次之下的。


这样子就可以将在任何一个 CPU 上,跑另一个操作系统的程序,但是,不知速度会比 QEMU 快还是慢呢?


这种做法姑且可以想象为「云端虚拟机」!


不知大家觉得可能吗?有用吗?


图一:V-OS 系统的架构图


CC1


编译程序


为了说明编译程序是如何设计出来的,在开放计算机计划中,设计了一个功能完备,简化过的 C 语言,这个语言称为 C1 语言,是


C0 语言的扩充版。


CC1 编译程序是一个 C1 语言的编译程序,具有完成的编译程序功能。在程序设计上,CC1 又被进一步拆解为 1. 词汇分析


2. 语法分析 3. 语意分析 4. 中间码产生 5. 汇编语言产生 等阶段,这所有的阶段,都会存取一个共同的数据结构,就是符号表。


因此,整个 CC1 编译程序,进一步分解为下列程序模块。


模块


核心对象


程序


词汇分析 (Lexical Analysis)


Scanner


Scanner.c, Scanner.h


语法分析 (Syntax Analysis)


Parser


Parser.c, Parser.h


语意分析 (Semantic Analysis)


Semantic


Semantic.c, Semantic.h


中间码产生 (Intermediate


Code)


PCode


PCode.c, PCode.h


汇编语言产生 (Code Generation)


Generator


Generator.c, Generator.h


符号表 (Symbol Table)


SymTable


SymTable.c, SymTable.h


Lua


Lua 的 BNF


chunk ::= {stat 【;′】} 【laststat 【;′】】


block ::= chunk


stat ::= varlist =′ explist | </p> <p> functioncall | </p> <p> do block end | </p> <p> while exp do block end | </p> <p> repeat block until exp | </p> <p> if exp then block {elseif exp then block} 【else block】 end | </p> <p> for Name=′ exp ,′ exp 【,′ exp】 do block end |


for namelist in explist do block end |


function funcname funcbody |


local function Name funcbody |


local namelist 【=′ explist】 </p> <p> laststat ::= return 【explist】 | break</p> <p> funcname ::= Name { .′ Name} 【:′ Name】</p> <p> varlist ::= var { ,′ var}


var ::= Name | prefixexp 【′ exp】′ | prefixexp .′ Name </p> <p> namelist ::= Name { ,′ Name}


explist ::= {exp ,′} exp</p> <p> exp ::= nil | false | true | Number | String |...′ | function |


prefixexp | tableconstructor | exp binop exp | unop exp


prefixexp ::= var | functioncall | (′ exp)′


functioncall ::= prefixexp args | prefixexp :′ Name args </p> <p> args ::=(′ 【explist】 )′ | tableconstructor | String </p> <p> function ::= function funcbody</p> <p> funcbody ::=(′ 【parlist】 )′ block end</p> <p> parlist ::= namelist 【,′ ...′】 |...′


//代码效果参考:http://www.jhylw.com.cn/215437939.html

tableconstructor ::= {′ 【fieldlist】}′

fieldlist ::= field {fieldsep field} 【fieldsep】


field ::= 【′ exp】′ =′ exp | Name=′ exp | exp


fieldsep ::= ,′ |;′


binop ::= +′ |-′ | `′ | /′ |^′ | %′ |..′ |


<′ |<=′ | >′ |

and | or


unop ::= -′ | not |#′


Lua 5.1 Reference Manual —


最后有 Lua 的 BNF。


Lua Interpreter in C —


Lua Compiler in Lua —


Lua Interpreter in Lua —


— The LuaJIT Project


CC1 编译程序的符号表


#ifndef SYMTABLE_H


#define SYMTABLE_H


#include "lib.h"


#include "HashTable.h"


#include "Tree.h"


//


型态 Type 有:函数、结构与指针与基本型态


//


基本 : int x;


//


指标 : int px;


//


函数 : int total(int a【】) {...};


//


结构 : struct Person { ... };


typedef struct _Method {


char name;


char returnType;


Array params;


} Method;


typedef struct _Struct {


char name;


Array fields;


} Struct;


typedef union _Type {


Method pmethod;


Struct pstruct;


char pbtype;


} Type;


//


符号的值可能是 byte, int, float 或 pointer (包含 struct, method, type)


typedef union _Value {


BYTE bvalue;


int ivalue;


float fvalue;


void pvalue;


} Value;


//


变量符号: int x; Symbol(name=x, tag=VAR, type=int)


//


函数符号: int total(int a【】) {...}; Symbol(name=total, tag=METHOD, type=int)


//


结构符号: struct Person { ... }; Symbol(name=x, tag=ETYPE, type=int)


typedef struct _Symbol { //


符号记录


void scope; //


所属领域


char name; //


符号名称 (x, px, Person, total)


char tag; //


符号标记 (变量定义 VAR 函数定义 METHOD、结构定义 STRUCT)


Type type; //


符号的形态


Value value; //


符号的值


} Symbol;


typedef HashTable SymTable;


Symbol SymNew(void scope, char name, char tag);


void SymFree(Symbol s);


void TypeFree(Type type);


SymTable SymTableNew();


Symbol SymTablePut(SymTable table, Symbol sym);


Symbol SymTableGet(SymTable table, void scope, char name);


<code class="highlighter-hljs hljs language-cpp

相关文章
|
29天前
|
存储 弹性计算 网络协议
阿里云服务器ECS实例规格族是什么?不同规格CPU型号、处理器主频及网络性能参数均不同
阿里云ECS实例规格族是指具有不同性能特点和适用场景的实例类型集合。不同规格族如计算型c9i、通用算力型u1、经济型e等,在CPU型号、主频、网络性能、云盘IOPS等方面存在差异。即使CPU和内存配置相同,性能参数和价格也各不相同,适用于不同业务需求。
|
11月前
|
消息中间件 Java 应用服务中间件
我是如何通过火焰图分析让应用CPU占用下降近20%的
分享作者在使用Arthas火焰图工具进行Java应用性能分析和优化的经验。
|
6月前
|
存储 智能硬件
CPU的定义与功能与架构
CPU(中央处理器)是计算机的核心部件,负责执行程序指令、控制数据传输和进行运算。它能处理算术与逻辑运算,并协调其他硬件协同工作。x86架构源于英特尔,适用于PC和服务器,采用复杂指令集;ARM架构则由Acorn等公司开发,广泛用于移动设备和嵌入式系统,采用精简指令集,功耗低且能效比高。
562 5
|
11月前
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
163 0
|
C++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
127 0
|
9月前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
10月前
|
存储 人工智能 编译器
【AI系统】CPU 指令集架构
本文介绍了指令集架构(ISA)的基本概念,探讨了CISC与RISC两种主要的指令集架构设计思路,分析了它们的优缺点及应用场景。文章还简述了ISA的历史发展,包括x86、ARM、MIPS、Alpha和RISC-V等常见架构的特点。最后,文章讨论了CPU的并行处理架构,如SISD、SIMD、MISD、MIMD和SIMT,并概述了这些架构在服务器、PC及嵌入式领域的应用情况。
683 5
|
10月前
|
传感器 算法 机器人
定点 CPU 在哪些领域有应用
定点CPU主要应用于对成本和功耗敏感的嵌入式系统中,如消费电子、汽车电子、工业控制和物联网设备等,因其结构简单、效率高而受到青睐。
|
11月前
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。
361 1
|
12月前
|
存储 缓存 开发者
CPU的架构涵盖哪些方面
CPU(中央处理单元)的架构指的是CPU的设计和组织方式,包括其内部结构、数据通路、指令集、寄存器配置、存储器管理和输入输出等一系列设计原则和技术的综合体现。
303 1

热门文章

最新文章