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 的缩写, 如果执行这条指令的时候 Rrs2 与 R0 不相等, 则将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

相关推荐
奋斗的阿狸_19862 小时前
ESP32-S3 + ES7210 四通道麦克风录音上传方案
c语言·开发语言·fpga开发
2401_862880822 小时前
iMX6ULL 驱动工程搭建 + LED 灯驱动
c语言·驱动开发·嵌入式硬件
ACP广源盛139246256732 小时前
Type‑C 扩展坞方案选型笔记|国产 DP1.4 转 HDMI2.0 桥接芯片 GSV2201S @ACP评估
c语言·开发语言·笔记·硬件架构·硬件工程·国产芯片
沐欣工作室_lvyiyi2 小时前
超市智能货架系统设计与实现(论文+源码)
c语言·单片机·课程设计·电子信息工程毕业设计·黑龙江工商学院·广州工商学院·成都工业学院
C++ 老炮儿的技术栈3 小时前
static的作用
c语言·c++·人工智能·单片机·c
小小龙学IT5 小时前
Go 语言 cgo 与 C/C++ 互操作深度解析:从 fwlib 直连到工业数采网关实战系列
c语言·c++·golang
老王爱玩车6 小时前
动态内存管理
c语言·开发语言·学习·面试
Logic1016 小时前
C语言/数据结构数位DP题解:平滑排列数字统计——区间内相邻位差不超过K的数字个数
c语言·数据结构·动态规划·时间复杂度·数位dp·算法题·前导零处理
Zwawa7 小时前
把 AO 接回来:黑线和白底之间到底差了多少
c语言·单片机·嵌入式
C++ 老炮儿的技术栈7 小时前
char (*csConnectName)[256]; 和 char csConnectName [256] 有什么区别
java·c语言·开发语言·c++·人工智能·算法·c