程序与技术分享: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

相关文章
|
2月前
|
监控 Java 持续交付
深入理解微服务架构及其在现代应用开发中的应用
深入理解微服务架构及其在现代应用开发中的应用
66 1
|
1月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
2月前
|
机器学习/深度学习 自然语言处理 分布式计算
大规模语言模型与生成模型:技术原理、架构与应用
本文深入探讨了大规模语言模型(LLMs)和生成模型的技术原理、经典架构及应用。介绍了LLMs的关键特点,如海量数据训练、深层架构和自监督学习,以及常见模型如GPT、BERT和T5。同时,文章详细解析了生成模型的工作原理,包括自回归模型、自编码器和GANs,并讨论了这些模型在自然语言生成、机器翻译、对话系统和数据增强等领域的应用。最后,文章展望了未来的发展趋势,如模型压缩、跨模态生成和多语言多任务学习。
297 3
|
17天前
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
2月前
|
Cloud Native 安全 持续交付
深入理解微服务架构及其在现代软件开发中的应用
深入理解微服务架构及其在现代软件开发中的应用
94 32
|
2月前
|
存储 监控 API
深入解析微服务架构及其在现代应用中的实践
深入解析微服务架构及其在现代应用中的实践
86 12
|
1月前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
2月前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
2月前
|
监控 持续交付 API
深入理解微服务架构及其在现代应用开发中的应用
深入理解微服务架构及其在现代应用开发中的应用
40 4
|
2月前
|
存储 人工智能 编译器
【AI系统】CPU 指令集架构
本文介绍了指令集架构(ISA)的基本概念,探讨了CISC与RISC两种主要的指令集架构设计思路,分析了它们的优缺点及应用场景。文章还简述了ISA的历史发展,包括x86、ARM、MIPS、Alpha和RISC-V等常见架构的特点。最后,文章讨论了CPU的并行处理架构,如SISD、SIMD、MISD、MIMD和SIMT,并概述了这些架构在服务器、PC及嵌入式领域的应用情况。
138 4

热门文章

最新文章