Advertisement

第五章:中央处理器(408笔记|王道笔记|计算机组成原理笔记)

阅读量:
第一节:中央处理器~~——~~ CPU的功能和基本结构
CPU的功能 指令控制 完成取指令分析指令执行指令 的操作,即程序的顺序控制 (PC IR)
操作控制 一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作(CU)
时间控制 对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号
数据加工 对数据进行算术和逻辑运算 (ALU)
中断处理 对计算机运行过程中出现的异常情况和特殊请求进行处理
控制器的功能 协调并控制计算机各部件执行程序的指令序列,基本功能包括取指令分析指令执行指令 取指令 自动形成指令地址(PC)****+1 ;自动发出取指令的命令
--- ---
分析指令 操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址。
执行指令 根据分析指令得到的“操作命令”和“操作数地址”,形成操作信号控制序列 ,控制运算器、存储器以及I/O设备完成相应的操作
中断处理 管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)
--- ---
通用寄存器组 如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址

||
|---|---|||

累加寄存器 它是一个通用寄存器,用于暂时存放ALU运算的结果信息,用于实现加法运算
程序状态字寄存器 保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如**溢出标志(OF)、符号标志(SF)、零标志(ZF)、进位标志(CF)** 。PSW中的这些位参与并决定微操作的形成 OF—overflow SF—sign flag ZF—zero flag CF—carry flag
移位器 对运算结果进行移位运算
计数器 控制乘除运算的操作步数,乘除本质是加减,通过计数器统计加减次数

| 运算器的基本结构
算数逻辑单元通用寄存器连接 | | | 专用数据通路****方式 | 根据指令执行过程中的数据和地址的流动方向安排连接线路 |
|---|---|

优点 性能较高,基本不存在数据冲突现象,但 结构复杂****,硬件量大,不易实现

|

如果直接用导线连接,相当于多个寄存器同时并且一直向ALU传输数据|

解决方法1. 使用多路选择器 根据控制信号选择一路输出|

解决方法2. 使用三态门 可以控制每一路是否输出 。如:R0out为1时R0中的数据输出到A端,R0out为0时R0中的数据无法输出到A端|
|---|---|---|

--- ---
优点 结构简单 ,容易实现,但数据传输** 存在较多冲突** 的现象,性能较低

|结构|

|通过使用暂存寄存器 ,暂存从主存读来的数据,来防止寄存器读来的数据与通用寄存器中的数据混淆,并且也可以等信号稳定后再计算 ,同理输出暂存寄存器也可以等输出信号稳定后输出结果|
|---|---|---|

||

||

--- ---
指令寄存器IR 用于保存当前正在执行的那条指令
指令译码器CU 仅对操作码字段进行译码,向控制器提供特定的操作信号
微操作信号发生器CU 根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种
时序系统CU 用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到
存储器地址寄存器 MAR用于存放所要访问的主存单元的地址
存储器数据寄存器 MDR用于存放向主存写入的信息或从主存中读出的信息

|

|
|---|
|第二节:中央处理器~~——~~ 指令执行过程|

|指令 周期|CPU从主存中每次取出并执行一条指令所需的时间长度通常用机器周期/CPU 周期来衡量。一个机器周 期/CPU 周期则由多个节拍/T 周期 或 CPU 时 钟周 期组成(其中T 是指 CPU 的最小操作 单位)

机器周期间,在功能上实现了分段处理|在每个指令周期内各段的运行时间可以不同,并且各段时间的运行频率可以在不同阶段进行调整以适应任务需求

|
|---|---|---|---|

--- ---
间址 周期

|执行 周期|负责处理IR中的指令字的操作码和操作数的执行周期的任务是利用ALU进行运算以生成执行结果。 由于不同指令的执行周期各自不同因此导致数据流向不一致。|||
|中断 周期|

|||

--- ---
方案2 多指令周期对不同类型的指令选用不同的执行步骤来完成 。指令之间串行 执行;可选用不同个数的时钟周期来完成不同指令的执行过程需要更复杂的硬件设计
方案3 流水线方案 ,在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。指令之间并行 执行**【由于不同阶段使用的硬件部件不一样,所以可以并行】**

||

|

|
|---|
|第三节:中央处理器~~——~~ 数据通路,单总线结构|

数据 通路 数据在功能部件之间传送的路径,信息从哪开始中间经过哪些部件最后传到哪里,由控制部件CU产生的控制信号建立数据通路
数据通路的基本结构 CPU内部单总线 方式 同一时刻只允许两个部件之间进行数据交换,对总线的使用是独占 式的(单总线ALU需配合暂存器使用,防止总线数据先来被后来覆盖)
--- ---
CPU内部多总线 方式 同一时刻允许多组部件之间进行数据交换
专用数据通路 方式 只要两个寄存器之间有数据流动,那就专门的建立一个数据通路
系统 总线 系统总线是指同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口间互相连接的总线
CPU内部单总线方式

|

| 例题
——
两次 大题 |

|
|汇总|

|

第四节:中央处理器~~——~~ 数据通路,专用通路结构

专用通道架构——控制周期|在专用数据总线中各组件间的连线配置采用多线选择器MUX或三态运算电路Δ

|
|---|---|

| 例题 |

| 1.d能自动“+1”,是PC,PC内容是地址,送MAR,故c是MAR,b与微操作信号发生器相连,是IR与主存相连的寄存器是MAR和MDR,c是MAR,则a是MDR (PC) → MAR M(MAR) → MDR (MDR) → IR (PC)+1→PC 2.简述数据在运算器和主存之间进行存/取访问的数据通路| 存/取的数据放到ACC中设数据地址已放入MAR 取:M(MAR) → MDR (MDR) → ALU→ ACC

存:(ACC) → MDR (MDR) → M(MAR) 3.简述完成指令LDA X的数据通路(X为主存地址,LDA的功能为(X)→ACC) X → MAR M(MAR) → MDR (MDR) → ALU→ ACC 4.简述完成指令ADD Y的数据通路(Y为主存地址,ADD的功能为(ACC)+(Y)→ACC) Y → MAR M(MAR) → MDR (MDR) → ALU, (ACC) → ALU ALU→ ACC 5.简述完成指令STA Z的数据通路(Z为主存地址,STA的功能为(ACC)→Z) Z → MAR (ACC) → MDR (MDR) → M(MAR)

||

第五节:控制器设计——硬布线控制器(非重点)

| 指令周期
机器周期
时钟周期 |

|

--- ---
---

||

采用定长机器周期还是不定长机器周期?每个机器周期安排几个节拍?

如何用3个节拍完成整个机器周期内的所有微操作?

确定每个微操作命令的逻辑表达式,并用电路实现

详细阐述各个阶段的微操作序列(取值域、间址空间、执行流程及中断处理四个维度),明确确定哪些指令在什么阶段以及特定条件下会调用到相应的微操作指令

主要考虑CPU采用定长机器周期还是不定长机器周期两种控制方案,并规划如何在每种方案下合理安排各机器周期内的节拍数目

规划如何将整个任务流程划分至3个连续的节拍时间段内,并提出具体的时序安排策略

具体实施电路设计方案时,则需将每一个微操作命令对应的逻辑表达式转化为具体的硬件电路模块

安排微操作时序的原则 原则一 微操作的先后顺序不得随意更改
--- ---
原则二 被控对象不同的微操作尽量安排在一个节拍内完成
原则三 占用时间较短的微操作尽量安排在一个节拍内完成并允许有先后顺序
注意 一个指令如果要做的微操作很少,尽量安排在末尾的节拍内完成

|例子|取指周期|

|

||
|---|---|---|---|---|

(4)(5)两个微操作可以放在一个节拍的原因:
M ( MAR ) →MDR 载荷主存数据的过程耗时较长(约需一个时钟周期),因此必须占用一个时钟周期以确保微操作得以完成。与此同时,在 CPU 内部寄存器间进行的操作(如 MDR → IR)速度极快(通常仅需一个额外的时钟周期),因此可以在下一个时钟周期内立即执行 OP ( IR ) →ID 操作(即为同一个节拍中的第二个指令)。也就是说,在同一个时钟周期内可以通过先执行 MDR → IR 后立即执行 OP ( IR ) →ID 来实现两个微操作)。

---

||

||

| 电路设计 | | 设计步骤:

列出在取指、间址、执行、中断周期,T0、T1、T2节拍内有可能用到的所有微操作

**1.**列出操作时间表

间址周期标志是存在多级间接寻址的情况,并且只有当间址周期标志为0时才允许进入执行周期

|

| **2.**写出微操作命令的最简表达式

|
|**3.**画出逻辑图

依据当前状态下的指令操作码、机器周期、节拍信号以及机器状态条件组合起来进行分析和判断,在这一时刻应输出相应的微命令序列

第六节:控制器设计——微程序控制器的基本原理 (比硬布线控制器重要)
硬布线控制器 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生【时序信息包含机器周期,节拍】

| 示例 |

①程序:由指令序列构成
微程序:包括 微指令序列每一个指令对应一个微程序
指令****是对程序执行步骤的一种表示
微指令****是对单个指令执行步骤的一种表示
⑤指令是对微指令功能的一种封装
⑥微命令与微操作一一对应关系
⑦微指令中可能包含多个微命令 | 新的微指令格式增加了对多条微命令的支持

| 微指令是指在微程序控制的计算机中同时发出信号新执行的一组微操作 |
|---|---|---|

--- ---
指令周期 从主存取出并执行一条机器指令所需的时间
微周期 (微指令周期)从控制器存储器CU取出一条微指令并执行相应操作所需的时间

|

|
|---|
|第七节:微指令 的设计|

探讨|在接收到微指令后如何制定详细的规范来确定其具体格式? 在执行过程中如何生成对应的微操作以完成相应的功能?

||
|---|---|---|---|

||

某种方案中存在一种方案设计原则:将每个操作分解为相对应的子操作序列。
一些操作具有同时执行的可能性,在这种情况下一条指令能够包含多个独立的操作。
此外,在该系统中存在两种不同类型的指令逻辑:
允许同时处理多个任务的操作特征以及无法同时处理的任务特征。
|---|
同时具备兼容特性的操作特征允许在同一时间段内完成多项任务。

||

| 微指令格式
——
大纲 新增 | | 水平型微指令 | | | 概念 | 一条微指令 能定义**多个可并行的微命令****/**微操作 |

--- ---
缺点 每条微指令长,编写微程序较麻烦

|

|

--- ---
优点 微指令短、简单、规整,便于编写微程序
缺点 微程序长(微指令条数多),执行速度慢,工作效率低

|

|

||

| 微指令的编码方式 ——
水平微指令的 | | 概念 | 微指令的编码方式 又称为微指令的控制方式 ,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长 |
|---|---|

直接编码方式 概念 又称直接控制方式,在微指令的操作控制字段中,每一位代表一个微操作命令 ,某位为“1”表示该控制信号有效
图示

| 优点 | 便捷、易懂运行效率高 ,操作并行性强 (较原文增加了细节描述) | |
| 缺点 | 微指令字长受限 ,n个微命令 要求微指令的操作字段宽度为 n位 ,导致控存规模大幅增加 |

--- ---
分段 原则 ①** 互斥性微命令分在同一段内****,相容性微命令分在不同段内** ②每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性译码时间 ③**一般每个小段还要留出一个状态****,表示本字段不发出任何微命令** 。因此,当某字段的长度为3位时,最多只能表示7个互斥的微命令,**通常用000****表示不操作**
图示

|保证互斥的微操作不可能同时发出 不互斥的微操作能够同时发出||
|---|---|||

缺点 要通过译码 电路后再发出微命令,因此比直接编码方式慢
例题 某计算机的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接编码法,共有33个微命令,构成5个互斥类,分别包含7、3、12、5和6个微命令,则操作控制字段至少有多少位? 第1个互斥类有7个微命令,要留出1个状态表示不操作 ,所以需要表示8种不同的状态,故需要3个二进制位。 以此类推,后面4个互斥类各需要表示4、13、6,7种不同的状态,分别对应2、4、3、3个二进制位。 故操作控制字段的总位数为3+2+4+3+3 = 15 位 Tips:若采用直接编码方式,则控制字段需要33位
---

||

--- ---
图示

优点:能够进一步减少微指令字长;缺点:降低了微指令的并行控制效率,并通常被视为一种辅助编码策略

||

--- ---
根据机器指令的操作码****形成 当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件 形成
增量计数器法 ( CMAR ) + 1 →CMAR
分支转移 类似JUMP,转移方式 :指明判别条件;转移地址 :指明转移成功后的去向

根据当前正在执行的一组微指令及其比特模式确定后续需存储的位置。这一部分即属于 该 测试网络。其中 测试源 即是一些特定的信息。(了解即可)

||
|---|---|||

| 例题 | 某计算机采用微程序控制器,共有32条指令,公共的取指令微程序包含2条微指令,各指令对应的微程序平均由4条微指令组成(执行周期内 的微指令序列总共有4条),采用断定法 (下地址字段法)确定下条微指令地址,则微指令中下地址字段的位数至少是多少位?(也就是总共需要存储多少条微指令?) | 总共需要存储多少条微指令?——32×4+2 = 130条 标注出130个不同的位置至少需要多少个二进制位?——2^7= 128,2^8 = 256

下地址字段的位数至少是8位

||

||

|

|
|---|
|第八节:微程序控制单元 的设计|

设计 步骤 **1.**分析每个阶段的微操作序列 **2.**写出对应机器指令的微操作命令及节拍安排 **3.**确定微指令格式 **4.**编写微指令码点

| 分析每个阶段的微操作序列
——
取址周期为例 | |

|

|
|---|---|

|

|

两种节拍安排都可以|

|
|---|---|---|

确定微指令格式 根据微操作个数决定采用何种编码方式(直接编码,字段直接编码,字段间接编码),以确定微指令操作控制字段的位数 。根据CM中存储的微指令总数,确定微指令的顺序控制字段 (下地址)的位数。最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长。
编写微指令码点 根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点

|||||
|微程序设计分类|静态微程序设计和动态微程序设计|静态|微程序无需改变,采用ROM|||
|---|---|||||
|动态|通过改变微指令和微程序改变机器指令,有利于仿真,采用EPROM|||||

|

|
|---|
|第九节:中央处理器——指令流水线**基本概念****/**性能指标|

指令流水的概念|单个指令的操作流程可以划分为若干个阶段或步骤。这取决于所使用的计算机类型。

|取指|根据PC内容访问主存储器,取出一条指令送到IR中|
|---|---|---|---|
|分析|对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数(间址)|||
|执行|根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中|||
|特点|每个阶段用到的硬件不一样|||

设定取指、解析数据以及处理指令这三个阶段所需的时间均相等,并以t作为时间单位;根据不同的处理模式计算n条指令的总处理时间。

顺序执行方式 耗时 总耗时**T=n****×**3t=3nt
图示

优点|操作简便,在设计上采用了模块化架构|||
缺点|由于其单线程设计导致指令执行速度较慢,在任何时刻处理机内部仅有一条指令处于执行状态,并且各功能部件的利用率不高

--- ---
图示

优点

--- ---
图示

优点

||

--- ---
时空图 空间:不同的阶段所对应的不同的硬件资源

主要用于分析流水线的性能|||

||

| 流水线的性能指标 | | 吞吐率
TP | | 概念 | 吞吐率 是指在单位时间内流水线所完成的任务数量 ,或是输出结果的数量 |

--- ---

| 图示 |

加载时间:首条指令从取指到完成所需要的时间段
释放时间:末条指令从取指到完成所需要的时间段

||

| 加速比
S | | 概念 | **完成同样一批任务,**不使用流水线所用的时间与使用流水线所用的时间之比 |

--- ---

||

| 效率
E | | 概念 | 流水线的设备利用率 称为流水线的效率 |

--- ---
图示

|

||

理想情况:各阶段花费时间相同,每个阶段结束后能立即进入下一阶段

||

第九节:中央处理器——指令流水线影响因素流水线的分类

|机器周期的设置|

为方便流水线设计,将每个阶段的耗时取成一样,以最长耗时为准。即此处应将机器周期设置为100ns 流水线每一个功能段部件后面都要有一个缓冲寄存器 ,或称为锁存器 ,其作用是保存本流水段的执行结果,提供给下一流水段使用(如我们要求每个阶段耗时100ns,但是执行阶段需要在200ns的时候才要输入数据,而由于第二个阶段指令解码阶段只需要80ns就完成了,所以需要一个缓冲寄存器存着,就能更方便的统一每个阶段的实际开销)【第一阶段和第四阶段的取指和取数据都是优先访问Cache,根据局部性原理很大概率命中,而把Cache分为InstructionData两个模块,可以使第一个阶段和第四个阶段所需的硬件部件可以并行工作 【ID指令译码阶段不仅是译码,同时也会从寄存器中 出需要的数据,而WB写回操作,又要往寄存器中 数据,这两个操作就可能造成一些问题 】|
|---|---|

| 流水线运行效率的关键因素 | | 结构相关性
(资源争用)
——不可同时使用 | | 概念:即为流水线中各操作之间因同一资源被多条指令争用而导致的相互影响现象。具体而言,在相同时间内有多条指令试图使用同一存储单元或运算部件时所形成的冲突状态即为结构相关性。

--- ---
  • 有关指令在一个时钟周期内被暂时停用
    • 一种优化方法:一种是将数据存储器与指令存储器结合在一起(例如将总线M划分为指令总线IM和数据总线DM两部分,则这两部分能够同时运行)。
--- ---

|方法2:需要使用资源重复配置 方法来解决,把M 分为IMDM|||

||

||

| 数据相关
(程序流程中的同步问题)
——同步 | | 概念 | 数据相关指的是程序流程中存在前后指令之间存在依赖关系的情况,则这两条指令之间即存在数据相关性 |

--- ---
  • 当遇到涉及数据的相关指令时,并对其后续所有操作进行临时中断(即暂停一至几个时钟周期),直至解决所有数据相关问题后再继续执行流程。这种机制可分为两种主要方法:一种是硬件阻塞(stall),另一种则是通过软件插入NOP指令来实现。
    • 数据旁路技术
    • 编译优化措施包括通过编译器重新排列指令以解决数据依赖问题。

||

| 图示 | |

| 问题:后序的r1的数据必须要在第一条指令执行完毕后才能正确使用r1中的数据
方法3:编译优化——把后序用不到r1的指令提前执行 |

--- ---

|

采用数据旁路技术的方法2为:由于r1在经过E执行阶段完成运算器ALU处理后已获得结果 我们可以直接把第一条指令的ALU输出端直接送回给第二条指令 其ALU输出端连接到第二条指令的ALU输入端

||

||

| 控制相关
(控制冲突) | | 概念 | 当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关 |

--- ---
  1. 转移指令分支预判。静态预判永远猜测true或false, 动态预判根据历史信息进行调整。
  2. 从两个控制流方向上提取目标指令。
  3. 加速形成条件码, 并模拟一位全加器的功能, 在此过程中将所有进位提前传递给 preceding 的逻辑单元。
  4. 提升转移方向判断的准确性作为方法一的改进措施。

||

| 流水线的分类
了解即可 | | 根据流水线使用的级别 | | 部件功能级流水 | 将复杂的算术逻辑运算组成流水线工作方式。【例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程】 |

--- ---
处理机 流水 一种宏流水,有多个处理器,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中
--- ---
多功能流水线 通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线
--- ---
动态流水线 指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
--- ---
非线性流水线 存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算

||

--- ---
图示

|||||

--- ---
图示

|||

--- ---
图示

|||

||

||

第十节:五段式指令流水线
常考五类指令:运算类指令LOAD****指令STORE****指令条件转移指令无条件转移指令 ,如何根据五段式指令流水来完成它们相应的工作

|机器周期的设置|

①IF取指→②ID译码&取数→③EX执行→④M访存→⑤WB写回寄存器|||
|---|---|---|---|
|运算类指令举例|运算类指令|

注:Rs指源操作数(source)Rd指目的操作数(destination)||
|---|---|||
|过程|①IF取指→②ID译码&取数→③EX执行→M访存 →⑤WB写回寄存器 运算类指令 IF:根据PC从指令Cache取指令至IF段的锁存器 ID:取出操作数至ID段锁存器 EX:运算,将结果存入EX段锁存器 M:空段**(虽空,但是必须得消耗这段时间)** WB:将运算结果写回指定寄存器|||

||

| LOAD 取数 指令 | | LOAD
指令 |

实际上(mem)也执行了运算过程,偏移量为0而已(0+(mem))→Rd |

--- ---

||

| STORE
存数 指令 | | STORE
指令 |

|

--- ---
--- ---

| 过程 | ①IF(Instruction Fetch)阶段→②ID(Instruction Decode)阶段及操作数获取→③EX(Execute)阶段→④M(Mem)访问阶段→WR PC(WRITE to PC Segment) (将运算结果存储至通用寄存器) ** ** | 条件转移指令 IF:从指令Cache中按顺序取出指令至IF字段的锁存器中 ID:将比较操作的两个操作数分别加载到锁存器A和B中,并将偏移量加载到Immedieate字段中 EX:执行数值比较运算 M:将目标程序计时基址值加载到程序计时基址字段中 WB:空操作(WRITE to PC功能通常是将结果存储到通用寄存器中,并不属于程序计时基址字段的一部分)

--- ---
过程 ①IF取指→②ID译码&取数→③EX执行→M访存WB写回寄存器 无条件转移指令 IF:根据PC从指令Cache取指令至IF段的锁存器 ID:偏移量放入Imm EX:用不到ALU算数逻辑单元,在EX阶段将目标PC值写回PC(左图没画全) M:空段 WB:空段 “WrPC段”耗时比EX段更短,可安排在EX段时间内完成。WrPC段越早完成,就越能避免控制冲突 。当然,也有的地方会在WB段时间内才修改PC的值

||

| 例题 |

只有上一条指令进入ID段后,下一条指令才能开始IF段,否则会覆盖IF段锁存器的内容

I3与I1、I2之间存在数据关联性。由于I1、I2尚未完成对[a]、[b]赋值更新至R1、R2寄存器中这一操作,在等待WB(Write Back)操作完成后才能继续进行下一步骤:即对I3进行解码并从存储器中读取R1、R2的数据。
只有当上一条指令已进入ID(Instruction Decode)阶段后才能开始执行下一条指令的IF(Instruction Fetch)阶段;否则会导致当前处于ID阶段中的指令被后续操作覆盖而丢失。
因此,在执行完某条指令并完成其解码及取数过程后(即处于ID阶段),若立即执行下一条指令,则会将当前处于ID阶段中的所有操作目标数据(如:[a]、[b])覆盖掉;导致处于ID阶段中的原始操作目标信息丢失。
【只有在当前处于ID阶段时才能进行下一阶段的操作

全部评论 (0)

还没有任何评论哟~