408考研逐题详解:2009年第11题
冯·诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU 区分它们的依据是( )
A. 指令操作码的译码结果
B. 指令和数据的寻址方式
C. 指令周期的不同阶段
D. 指令和数据所在的存储单元
详解
从本题的题干出发,因为冯·诺依曼结构的计算机中指令和数据共享同一存储器,均以二进制形式存储。并且在执行一条指令的过程中,会涉及到指令和数据两部分内容,因此,显然要求答题者熟悉指令的执行过程,即指令周期。
指令周期(Instruction Cycle) 是计算机 CPU 执行一条指令所需的完整过程。它是计算机运行程序的基本单位,由多个阶段组成,每个阶段完成不同的任务。
典型的指令周期分为 4 个阶段,按顺序执行:
- 取指阶段(Fetch):从存储器中读取下一条指令。
- 过程:
- 程序计数器(PC)提供指令地址。
- CPU 将地址发送到存储器,读取指令内容。
- 指令被存入 指令寄存器(IR)。
- PC 自动递增,指向下一条指令地址。
- 特点:
- 此阶段 CPU 认为读取的内容是 指令。
- 译码阶段(Decode):解析指令的操作类型和操作数。
- 过程:
- 控制器解析指令的操作码(Opcode),确定操作类型(如加法、跳转)。
- 解析操作数(寄存器地址、立即数、内存地址等)。
- 准备执行阶段所需的控制信号。
- 关键:
- 操作码译码结果决定了后续操作,但此时尚未区分“指令”与“数据”。
- 执行阶段(Execute):执行指令的实际操作。
- 操作类型:
- 算术逻辑运算(如 ADD、SUB):由 ALU 完成计算。
- 数据传输(如 LOAD、STORE):准备访问内存。
- 控制流操作(如 JUMP、BRANCH):修改 PC 的值。
- 特点:
- 若指令需要访问数据(如 LOAD),会触发 访存阶段。
- 此时 CPU 认为从存储器读取的内容是 数据。
- 访存阶段(Memory Access,可选):仅在需要时访问存储器读取或写入数据。
- 适用指令:
- LOAD:从内存读取数据到寄存器。
- STORE:将寄存器数据写入内存。
- 关键:
- 同一存储单元的内容在“取指阶段”被解释为指令,在“访存阶段”被解释为数据。
- 写回阶段(Write-Back):将执行结果写回寄存器或内存。
- 适用场景:
- 算术运算结果写回寄存器(如 ADD R1, R2, R3)。
- 内存写入操作(如 STORE R1, [0x1000])。
由上述过程可知,在指令周期中,通过时间维度区分指令与数据:
- 取指阶段读取的内容被解释为 指令(通过指令寄存器 IR)。
- 执行阶段读取的内容被解释为 数据(通过数据总线)。
- 物理存储不区分指令和数据:同一内存单元在不同阶段被动态解释。
假设执行指令 LOAD R1, [0x1000]
(将地址 0x1000 的数据加载到寄存器 R1):
- 取指阶段:从 PC 指向的地址读取
LOAD
指令,存入 IR。 - 译码阶段:解析操作码为“LOAD”,操作数为 R1 和 0x1000。
- 执行阶段:计算内存地址 0x1000。
- 访存阶段:访问地址 0x1000,读取数据。
- 写回阶段:将数据写入寄存器 R1。
指令周期是 CPU 执行指令的完整流程,通过 时间阶段划分 动态区分指令和数据,而非依赖物理存储位置。这一机制是冯·诺依曼计算机实现“存储程序”功能的核心基础。现代 CPU 通过流水线、超标量等技术优化指令周期,显著提升了性能。
根据以上知识,可知本题答案是 C。
对其他选项,根据上述指令周期过程的描述可知:
- A. 操作码译码结果:译码发生在取指完成后,此时已确定内容为指令,无法解释“如何区分指令和数据”。
- B. 寻址方式:寻址是操作数访问的机制,属于指令执行阶段,与区分指令无关。
- D. 存储单元不同:违背冯·诺依曼架构的“存储程序”原则,指令和数据可共存于同一存储单元。