F4 状态机模型

keyword:

模型;状态机;指令;C语言;寄存器

abstract:

f4讲了关于状态机的事情,有指令编码,然后是寄存器,还有高级语言及其编译。CPU设计-指令状态机-C语言状态机之间的对应关系。重点是状态机模型:状态-激励-执行(?)

处理器的组成和工作原理

指令及其编码

指令包含:加工["操作码"(opcode)字段] + 原料["操作数"(operand)字段]

so编码是什么?指令格式很重要!

这里的"编码"通常指的是计算机指令二进制层面的表示形式,它涉及如何将操作码和操作数转换为机器能执行的二进制代码。

为什么需要编码?

  • 指令在硬件中不能直接使用文本(如"ADD R1, R2"),++必须转换为二进制,CPU才能通过电路识别和执行。++ 例如:
    • 文本指令:ADD R1, R2(意为"将R1和R2寄存器相加,结果存到R1")。
    • 对应编码:操作码部分表示"加法",操作数部分表示"R1"和"R2"的编号。
  • 编码长度:取决于指令集。一些简单架构(如RISC)有固定长度指令(例如32位),而复杂架构(如x86)可能有变长指令。

二进制表示:操作码定义操作是add,还是lim;操作数部分则是指明原料在哪里,具体在哪个通用寄存器里。

编码表:汇编器或编译器会根据指令集手册(如Intel或ARM手册)将文本指令转换为二进制。

假设一个简单的RISC指令集,其中指令格式为:

操作码(6位) | 目的寄存器(5位) | 源寄存器1(5位) | 源寄存器2(5位) | ...(其他字段)

存储程序

计算机就是靠不断执行一条条指令来完成各种复杂任务的.程序的本质 就是 ++一段指令序列++.(就是一堆二进制码)。有两个问题,什么地方存储,指令执行的顺序呢(更确切是状态)?

1. 是存储器(如现代计算机的内存)中
2. 能让计算机知道下一条指令在哪 里, 还需要有一个用于指示 当前执行到哪条指令的部件, 这个部件称为"程序计数器"(Program Counter, PC).

从此以后,计算机只需要做一件事情:

重复以下步骤:

PC 指示的存储器位置取出指令

执行指令

更新PC

PC总不能一直顺序执行,于是有了判断类型的指令,bner0

Branch if Not Equal r0 的缩写, 如果执行这条指令的时候 R[rs2] 与 R[0] 不相等, 则将PC寄存器更新为 addr , 即让PC指向 addr 处的指令.

主频很快巴拉巴拉

审视编程

上述的 add 和 li 等指令, 在计算机领域里面属于汇编语言的范畴. 汇编语言 是指令的符号化 表示. 与汇编语言相比, 还有更底层的机器语言, 它就是指令的二进制表示, 可以被通过数字电路 实现的处理器直接执行.

处理问题的,先把输入和输出扒出来,

输入输出? → 数学描述? → 匹配算法模式? → 边界在哪? → 写测试用例!

指令集架构的状态机模型

指令及其执行过程, 在计算机领域中属于指令集架构(Instruction Set Architecture, 缩写为ISA, 也简称指令集)的范畴.ISA的本质是一系列规范, 这些规范通常记录在相应的手册中, 它们定义了一台模型机的功能和 行为.

状态机模型

定义:

状态机延伸:

一定要记住需要哪些材料,以及指令存放的位置

C语言及其状态机模型

C语言中一些关键的组成要素:

  1. 变量, 它们是C程序处理的对象

  2. 语句, 它们是C程序处理的操作流程

  3. 输出函数, 它们是C程序中让变量与外界交互的桥梁

这里C语言比指令阶段的更加抽象了,但其实就是换了一种人类更能理解的方式,比如就是value变量,

数字电路的状态机模型

  • 状态集合:只有时序逻辑电路才能存储信息, 因此一个状态是时序逻辑元件所 存储的具体信息, 而全体状态的集合 则是时序逻辑元件所能存储信息的所有组合.

  • 激励事件集合:让时序逻辑元件的状态发生变化的, 其实是组合逻辑电路输出的信号, 因此组合逻辑电 路就是这个状态机的激励事件.

  • 状态转移规则. 时序逻辑元件的状态具体应如何变化, 是由组合逻辑电路的具体逻辑决定的.

  • 初始状态. 即电路在复位时, 时序逻辑元件的状态.

程序, ISA和CPU之间的联系

到此, 我们可以来简单梳理程序, ISA和CPU之间的联系:

1.根据ISA手册的功能描述, 画一张CPU的结构图 -> 处理器微结构设计

  1. 根据结构图设计具体的电路 -> 逻辑设计

  2. 开发程序 -> 软件编程

  3. 将程序翻译成ISA手册中描述的指令序列 -> 编译

  4. 在CPU上执行程序 = 用程序编译出的指令序列控制CPU电路进行状态转移

是一个硬件到软件,最后再有硬件执行的过程。

Ending

怎么说呢,感觉没必要太纠结这些基础的,我感觉还是孰能生巧。当然状态机的思维要有,这是最顶层的,条理的思路。

piano:最左键是A ,最右键是C

|2 |3 黑键,C|D|E F|G|A|B

D is sort like of den(槽)

A is the middle of three black key,G is left

C is the left of two black key,so do the F,all the left

F is simlar with C,all the left ,but three black key

E and B, all the right ,but two for E,three for B

相关推荐
Fish41741 天前
《C语言程序设计》琐碎知识点总结笔记
c语言·命令行参数·c语言程序设计·变量存储类型·函数存储类型·编译预处理
长安第一美人1 天前
C 语言可变参数(...)实战:从 logger_print 到通用日志函数
c语言·开发语言·嵌入式硬件·日志·工业应用开发
superman超哥1 天前
仓颉语言中基本数据类型的深度剖析与工程实践
c语言·开发语言·python·算法·仓颉
不爱吃糖的程序媛1 天前
Ascend C开发工具包(asc-devkit)技术解读
c语言·开发语言
李绍熹1 天前
c语言字符串操作示例
c语言
Damon_X1 天前
extern “C“
c语言
GoWjw1 天前
在C&C++指针的惯用方法
c语言·开发语言·c++
Coding Peasant1 天前
GD32E230 I2C从机功能深度解析与实现指南
c语言·stm32·单片机·mcu·arm
superman超哥1 天前
仓颉语言中错误恢复策略的深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
玖剹1 天前
记忆化搜索题目(二)
c语言·c++·算法·leetcode·深度优先·剪枝·深度优先遍历