Chilfish's avatar

Chilfish

计算机组成原理 (part)

Chilfish
8590个字
note
Warning
本文发布于 2023/06/01,内容可能已过时。

计算机组成:结构化方法 读书杂记

先堆起来吧


浮点数

浮点 数指的就是在规范化的时候小数点左右浮动了多少位

这是将 15.6 转换为 IEEE 754 32 位浮点数 的步骤:

  1. 将 15.6 转换为二进制数:$1111.10011001100110011001100110011001$
  2. 规范化:$1.11110011001100110011001 \times 2^3$
  3. 计算指数:$3 + 127 = 130$,转换为二进制:$10000010$
  4. 计算尾数:$11110011001100110011001$(取前 23 位)
  5. 组合符号位(0,因为是正数)、指数位和尾数位:0 10000010 11110011001100110011001

DMA

DMA 是直接内存访问(Direct Memory Access)的缩写。它是一种计算机系统中的技术,允许外部设备(如硬盘、网络适配器等)直接访问系统内存,而无需通过中央处理器(CPU)的干预

DMA 的主要作用有以下几个方面:

  1. 提高数据传输效率:通过使用 DMA,外部设备可以直接与内存进行数据传输,无需 CPU 的参与。这样可以减少 CPU 的负担,提高数据传输的效率

  2. 减少 CPU 的占用率:在传统的输入/输出(I/O)操作中,CPU 需要不断地处理数据传输的请求和操作,这会占用大量的 CPU 时间和资源。而使用 DMA,CPU 可以将数据传输的任务交给 DMA 控制器,从而减少 CPU 的占用率,使 CPU 能够更多地处理其他任务

  3. 支持高速数据传输:由于 DMA 可以直接访问内存,而无需通过 CPU 的干预,因此可以实现高速的数据传输。这对于需要大量数据传输的设备(如高速网络适配器、高速存储设备等)非常重要

  4. 实现并行数据传输:通过使用 DMA,多个外部设备可以同时进行数据传输,而无需等待 CPU 的处理。这样可以实现并行的数据传输,提高系统的整体性能

DMA 传送方式

  1. 停止 CPU 访问内存:DMA 要使用时,并在 DMA 完成前,CPU 不能访问总线。控制简单,但 CPU 无法充分利用。基本不使用

  2. 周期挪用:在 DMA 跟 CPU 都有访问请求。前一个 IO 设备需要在下一个访内请求前存取完毕,这样不会耽误 CPU 访内请求,又能兼顾 CPU 运算,即用一会,还回去,再用一会。适用于 IO 密集型

  3. DMA 与 CPU 交替访内存:DMA 跟 CPU 交替使用内存,比如,规定,每人使用 10 个时钟周期,由总线控制传输,CPU 一样发送访内请求。这样 CPU 跟 DMA 都不知道对方的存在,因此也称“透明的 DMA”。相应硬件逻辑也更复杂。适用于 CPU 密集型

数据传送

DMA 方式的数据传送过程可以分为以下三种:

  1. 预处理(Pre-processing):在数据传送之前,DMA 控制器需要进行一些预处理的步骤。这包括设置传输的起始地址和目的地址、设置传输的数据长度、设置传输的方向(读取或写入)等。预处理的目的是为了确保数据传送的正确性和有效性

  2. 数据存送(Data transfer):在预处理完成后,DMA 控制器开始进行数据的实际传送。它会直接从外部设备的缓冲区读取数据,并将数据直接写入系统内存的指定位置,或者从系统内存读取数据并将数据直接写入外部设备的缓冲区。这个过程是在不经过 CPU 的干预下完成的,从而提高了数据传输的效率

  3. 后处理(Post-processing):在数据传送完成后,DMA 控制器可能需要进行一些后处理的步骤。这包括更新传输的状态、发送中断信号给 CPU、清除标志位等。后处理的目的是为了通知 CPU 数据传送已经完成,并进行必要的处理

中断系统

中断系统是计算机系统中的一种机制,用于处理和响应外部事件或内部异常。当发生中断时,CPU 会中断当前正在执行的任务,保存当前的上下文,并跳转到中断处理程序来处理中断事件。中断系统的主要作用有以下几个方面:

  1. 处理外部设备的请求:外部设备(如键盘、鼠标、硬盘等)可以通过触发中断来向 CPU 发送请求。例如,当用户按下键盘上的某个键时,键盘会触发中断,通知 CPU 有按键事件发生。中断处理程序可以读取键盘缓冲区中的数据,并进行相应的处理

  2. 处理内部异常:当发生内部异常(如除零错误、非法指令等)时,CPU 会触发中断,通知操作系统发生了异常情况。中断处理程序可以根据异常的类型进行相应的处理,例如打印错误信息、终止异常进程

  3. 实现多任务处理:中断系统可以实现多任务处理,即在多个任务之间进行切换执行。当一个任务被中断时,CPU 会保存当前任务的上下文,并切换到另一个任务的上下文来执行。这样可以实现多个任务的并发执行,提高系统的效率和响应能力

  4. 提供系统调用接口:中断系统还可以提供系统调用接口,允许用户程序通过中断来请求操作系统的服务。例如,用户程序可以通过中断来请求文件读写、网络通信等操作系统提供的功能

DMA 程序中断部件

具体来说,程序中断部件的作用有以下几个方面:

  1. 传输完成中断:当 DMA 传输完成时,程序中断部件会向 CPU 发送中断信号,通知 CPU 数据已经传输完毕。CPU 可以根据中断信号来执行相应的中断处理程序,进行后续的操作,例如处理传输的数据、更新相关的状态等

  2. 传输错误中断:如果在 DMA 传输过程中发生错误,例如数据传输错误、总线错误等,程序中断部件会向 CPU 发送中断信号,通知 CPU 出现了错误情况。CPU 可以根据中断信号来执行相应的中断处理程序,进行错误处理、重新传输数据或进行其他恢复操作

  3. 优先级处理:在多个 DMA 通道同时进行传输时,程序中断部件可以根据不同的中断优先级,向 CPU 发送中断信号。CPU 可以根据中断信号的优先级来决定先处理哪个 DMA 通道的中断,以保证系统资源的合理分配和高效利用

获取中断程序入口地址

获取中断服务程序的入口地址有以下两种方式:

  1. 中断向量表(Interrupt Vector Table):中断向量表是一个存储中断服务程序入口地址的表格,每个中断号对应一个入口地址。通过查找中断向量表,可以获取中断服务程序的入口地址。在一些系统中,中断向量表是固定的,可以通过查阅系统文档或参考相关资料来获取中断向量表的地址,并根据中断号来索引相应的入口地址

  2. 中断描述符表(Interrupt Descriptor Table):中断描述符表是一种数据结构,用于存储中断门(Interrupt Gate)的信息,其中包括中断服务程序的入口地址。中断描述符表是在操作系统启动时由操作系统内核初始化的,它存储在内存中的特定位置。通过查找中断描述符表,可以获取中断服务程序的入口地址。在 x86 架构的系统中,中断描述符表的地址存储在特殊的寄存器(IDTR)中,可以通过读取该寄存器来获取中断描述符表的地址,并根据中断号来索引相应的入口地址

总线

总线复用

总线复用是指在计算机系统中,将同一根总线用于传输多个不同类型的数据或信号。总线复用方式的原理是通过在不同的时间段上使用总线来传输不同类型的数据或信号,以提高总线的利用率和系统的效率

总线复用方式的作用主要有以下几个方面:

  1. 提高总线利用率:通过将多个数据或信号复用在同一根总线上传输,可以充分利用总线的带宽,提高总线的利用率。这样可以减少总线的数量和成本,并提高系统的性能

  2. 降低系统成本:通过总线复用,可以减少总线的数量和长度,从而降低系统的成本。此外,总线复用还可以减少系统中需要的总线接口和控制电路的数量,进一步降低系统的成本

  3. 简化系统设计:总线复用可以简化系统的设计和布线。通过将多个数据或信号复用在同一根总线上传输,可以减少总线的数量和长度,简化总线的布线和连接。这样可以减少系统的复杂性,并提高系统的可靠性和稳定性

  4. 提高系统的灵活性:总线复用可以提高系统的灵活性和可扩展性。通过总线复用,可以在同一根总线上传输不同类型的数据或信号,从而灵活地支持不同的设备和功能。这样可以方便地扩展系统的功能和性能,满足不同的应用需求

总线复用方式的选择和实现需要考虑系统的需求、总线的带宽和时序要求等因素。常见的总线复用方式包括时分复用(Time Division Multiplexing,TDM)、频分复用(Frequency Division Multiplexing,FDM)、码分复用(Code Division Multiplexing,CDM)等。不同的总线复用方式适用于不同的应用场景和系统需求

总线仲裁

集中式总线仲裁是一种用于协调多个设备对共享总线访问的方法。在一个计算机系统中,多个设备(如处理器、内存、输入输出设备等)可能需要同时访问共享的总线,但总线一次只能传输一个设备的数据。因此,需要一种机制来确定哪个设备有权访问总线

在集中式总线仲裁中,有一个专门的仲裁器(Arbiter)负责控制总线的访问。仲裁器会根据一定的规则和优先级,选择一个设备来获得总线的使用权。常见的仲裁规则包括轮询(Round Robin)、固定优先级(Fixed Priority)和基于请求的优先级(Request-based Priority)等

在轮询仲裁中,仲裁器按照固定的顺序依次选择每个设备来访问总线。每个设备在其轮到时有权使用总线。这种方法简单且公平,但可能导致设备等待时间过长

在固定优先级仲裁中,每个设备被分配一个固定的优先级。仲裁器根据设备的优先级来选择下一个获得总线使用权的设备。这种方法可以根据设备的重要性或特殊需求来分配优先级,但可能导致低优先级设备长时间等待

在基于请求的优先级仲裁中,设备通过发送请求信号来向仲裁器请求总线使用权。仲裁器根据请求的优先级来选择下一个获得总线使用权的设备。这种方法可以根据设备的实际需求和当前情况来动态分配总线使用权,提高系统的效率和响应性

同步异步

总线的同步和异步传输通信是指在数据传输过程中时钟信号的使用方式

同步传输是指在数据传输过程中使用时钟信号来同步发送方和接收方之间的操作。发送方和接收方都根据共享的时钟信号来协调数据的传输和接收。在同步传输中,数据的传输速率和时钟信号的频率是相互关联的

异步传输是指在数据传输过程中不使用时钟信号来同步发送方和接收方之间的操作。发送方和接收方使用特定的控制信号来标识数据的开始和结束,并使用数据之间的间隔时间来确定数据的传输速率。在异步传输中,数据的传输速率和时钟信号的频率是相互独立的

同步传输通常具有更高的传输速率和更低的传输延迟,因为数据传输是根据时钟信号精确同步的。然而,同步传输要求发送方和接收方之间具有相同的时钟信号,并且在时钟信号的传输中不允许有任何偏差

异步传输通常更加灵活,因为发送方和接收方之间不需要共享时钟信号。然而,由于没有时钟信号的同步,异步传输可能会导致数据的传输速率不稳定,并且可能需要更多的控制信号来确保数据的正确传输

CPU 组成

CPU 内部主要由运算器、控制器、寄存器三大部分组成

  • 运算器 负责算术运算(+ - * / 基本运算和附加运算)和逻辑运算(包括 移位、逻辑测试或比较两个值等)

  • 控制器 负责应对所有的信息情况,调度运算器把计算做好

  • 寄存器 它们可用来暂存指令、数据和地址。既要对接控制器的命令,传达命令给运算器;还要帮运算器记录处理完或者将要处理的数据

控制器

控制器由程序计数器(PC,Program Counter)、指令寄存器(IR,Instruction Register)、指令译码器(ID,Instruction Decoder)、时序产生器(Timing Generator)、操作控制器(Control Unit)组成

  • 指令寄存器 IR,是用来存放当前正在执行的的一条指令,存放的内容来自于数据寄存器(DR,Data Register)。当一条指令需要被执行时,先要把它从内存取到数据寄存器,然后再送到指令寄存器 IR 中

  • 指令译码器 ID,在计算机执行一条指定的指令时,必须首先分析这条指令的操作码是什么,以决定操作的性质和方法,然后控制计算机的其他各部件协同完成指令表达的功能,这中间的分析工作就是指令译码器 ID 完成的

  • 程序计数器 PC,用来存放下一条要执行指令的地址,它与存储器(内存)之间有一条直接通路。执行指令时,首先需要根据程序计数器 PC 中存放的指令地址,将指令由内存取到指令寄存器 IR,完成“取指令”的操作。程序计数器 PC 本身具有自动加 1 的功能,可以自动给出下一条指令的地址,如此循环,执行每一条指令

  • 时序产生器,类似于“时间作息表”,给计算机各部分提供工作所需的时间标志,一般是利用定时脉冲的顺序和不同的脉冲间隔来实现

  • 操作控制器,根据指令所需完成的操作和信号,发出各种微操作命令序列,用以控制所有被控对象,完成指令的执行

整个控制器的运行逻辑是先按照程序计数器所指出的指令地址,从内存中取出一条指令到指令寄存器 IR,然后指令译码器 ID 对指令进行分析,之后操作控制器根据指令的功能向有关部件发出控制命令,执行控制指令的操作。完成操作之后,程序计数器加 1,再重复执行上述操作

宏观分类

组合逻辑控制器

  • 组合逻辑控制器是一种基于组合逻辑电路的控制器,它根据输入信号的组合来产生输出信号。组合逻辑控制器没有内部状态,每次输入变化都会立即产生相应的输出
  • 它适用于简单的控制任务,如逻辑运算、数据选择和数据传输等。组合逻辑控制器的设计和实现相对简单,但对于复杂的控制任务可能不够灵活

微程序控制器

  • 微程序控制器是一种基于微程序的控制器,它使用一组存储在控制存储器中的微指令来控制计算机的操作。每个微指令包含一系列的控制信号,用于控制计算机的各个部件。微程序控制器具有内部状态,可以根据不同的输入信号和当前的状态来决定下一步的操作
  • 微程序控制器适用于复杂的控制任务,可以提供更高的灵活性和可编程性。但由于需要额外的存储器来存储微指令,微程序控制器的设计和实现相对复杂

存储逻辑控制器

  • 存储逻辑控制器是一种基于存储程序的控制器,它使用存储器中存储的指令序列来控制计算机的操作。存储逻辑控制器将指令存储在存储器中,并按照指令的顺序逐条执行。存储逻辑控制器具有内部状态,可以根据不同的指令和当前的状态来决定下一步的操作
  • 存储逻辑控制器适用于通用计算机和大型系统,可以实现复杂的控制任务和程序的执行。存储逻辑控制器的设计和实现相对复杂,需要考虑指令的编码和存储器的访问等问题

这三种控制器在设计和实现上有所不同,适用于不同的控制任务和系统。组合逻辑控制器适用于简单的控制任务,微程序控制器适用于复杂的控制任务和可编程性要求较高的系统,存储逻辑控制器适用于通用计算机和大型系统。根据具体的需求和系统要求,可以选择适合的控制器来实现相应的功能

结构分类

根据 CPU 控制器的结构原理,可以分为以下两大类:硬连线控制器和微程序控制器

  • 硬连线控制器(Hardwired Control Unit)

硬连线控制器是一种基于硬件电路实现的控制器。它使用组合逻辑电路和时序电路来实现对计算机硬件的控制。硬连线控制器的工作原理是通过硬连线的方式将控制信号直接连接到计算机的各个部件,以实现指令的执行和数据的传输

硬连线控制器的特点是速度快、响应时间短,适用于简单的计算机系统。它的设计是固定的,无法灵活地适应不同的指令集或功能需求。因此,硬连线控制器常用于嵌入式系统或专用计算机中,例如微控制器或数字信号处理器

  • 微程序控制器(Microprogram Control Unit)

微程序控制器是一种基于微程序的控制器。它使用一组存储在微存储器中的微指令来实现对计算机硬件的控制。微程序控制器的工作原理是根据指令的操作码,从微存储器中读取相应的微指令,并按照指令的顺序和时序执行微指令,从而完成指令的执行和数据的传输

微程序控制器的特点是灵活性高、可编程性强,适用于复杂的计算机系统。它的设计可以根据需要进行修改和扩展,以适应不同的指令集或功能需求。微程序控制器常用于通用计算机中,例如个人电脑或服务器

运算器

运算器是计算机中的一个重要部件,用于执行各种算术和逻辑运算。它通常由以下几个部件组成:

  1. 算术逻辑单元(ALU):ALU 是运算器的核心部件,负责执行算术和逻辑运算,如加法、减法、乘法、除法、与、或、非等操作。ALU 通常由一组逻辑门和寄存器组成

  2. 寄存器(Registers):寄存器用于存储运算器中的数据和中间结果。它们可以用于存储操作数、运算结果和临时变量等。常见的寄存器包括累加器(Accumulator)、数据寄存器(Data Register)和状态寄存器(Status Register)等

  3. 控制单元(Control Unit):控制单元负责控制运算器的操作和流程。它根据指令和操作码来生成控制信号,控制 ALU 的操作和数据的传输。控制单元通常由组合逻辑电路或微程序控制器实现

  4. 数据通路(Data Path):数据通路用于传输数据和控制信号。它包括数据总线(Data Bus)、地址总线(Address Bus)和控制总线(Control Bus)等。数据通路负责将数据从寄存器传输到 ALU,并将运算结果传回寄存器

  5. 输入输出接口(I/O Interface):输入输出接口用于与外部设备进行数据的输入和输出。它可以包括键盘、显示器、存储器等接口

这些部件共同工作,实现了运算器的功能。它们通过协调和配合,能够进行各种算术和逻辑运算,并将结果存储或输出。运算器是计算机中的核心部件之一,对于计算和处理数据起着重要的作用

寄存器

寄存器是计算机中用于临时存储数据和指令的高速存储器。它们位于中央处理器(CPU)内部,并且与其他存储设备(如内存、硬盘等)相比,寄存器的容量较小,但读写速度非常快

寄存器的作用:

  1. 存储数据:寄存器可以存储临时数据,如运算时的操作数、中间结果等
  2. 存储指令:寄存器可以存储当前执行的指令,供 CPU 解码和执行
  3. 存储地址:寄存器可以存储内存地址,用于访问内存中的数据

数据寄存器

数据寄存器(Data Register,DR)又称数据缓冲寄存器,其主要功能是作为 CPU 和主存、外设之间信息传输的中转站,用以弥补 CPU 和主存、外设之间操作速度上的差异

数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存存入一条指令或一个数据字时,也将它们暂时存放在数据寄存器中

数据寄存器的作用是

  • 作为 CPU 和主存、外围设备之间信息传送的中转站

  • 弥补 CPU 和主存、外围设备之间在操作速度上的差异

  • 在单累加器结构的运算器中,数据寄存器还可兼作操作数寄存器

指令寄存器

指令寄存器(Instruction Register,IR)用来保存当前正在执行的一条指令

当执行一条指令时,首先把该指令从主存读取到数据寄存器中,然后再传送至指令寄存器

指令包括操作码和地址码两个字段,为了执行指令,必须对操作码进行测试,识别出所要求的操作,指令译码器就是完成这项工作的。指令译码器对指令寄存器的操作码部分进行译码,以产生指令所要求操作的控制电位,并将其送到微操作控制线路上,在时序部件定时信号的作用下,产生具体的操作控制信号

指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码,即可向操作控制器发出具体操作的特定信号

程序计数器

程序计数器(Program Counter,PC)用来指出下一条指令在主存储器中的地址

在程序执行之前,首先必须将程序的首地址,即程序第一条指令所在主存单元的地址送入 PC,因此 PC 的内容即是从主存提取的第一条指令的地址

当执行指令时,CPU 能自动递增 PC 的内容,使其始终保存将要执行的下一条指令的主存地址,为取下一条指令做好准备。若为单字长指令,则 += 1,若为双字长指令,则 += 2,以此类推

但是,当遇到转移指令时,下一条指令的地址将由转移指令的地址码字段来指定,而不是像通常的那样通过顺序递增 PC 的内容来取得

因此,程序计数器的结构应当是具有寄存信息和计数两种功能的结构

地址寄存器

地址寄存器(Address Register,AR)用来保存 CPU 当前所访问的主存单元的地址

由于在主存和 CPU 之间存在操作速度上的差异,所以必须使用地址寄存器来暂时保存主存的地址信息,直到主存的存取操作完成为止

当 CPU 和主存进行信息交换,即 CPU 向主存存入数据/指令或者从主存读出数据/指令时,都要使用地址寄存器和数据寄存器

如果我们把外围设备与主存单元进行统一编址,那么,当 CPU 和外围设备交换信息时,我们同样要使用地址寄存器和数据寄存器

累加寄存器

累加寄存器通常简称累加器(Accumulator,ACC),是一个通用寄存器

累加器的功能是:当运算器的算术逻辑单元 ALU 执行算术或逻辑运算时,为 ALU 提供一个工作区,可以为 ALU 暂时保存一个操作数或运算结果。显然,运算器中至少要有一个累加寄存器

程序状态字寄存器

程序状态字(Program Status Word,PSW)用来表征当前运算的状态及程序的工作方式

程序状态字寄存器用来保存由算术/逻辑指令运行或测试的结果所建立起来的各种条件码内容,如运算结果进/借位标志(C)、运算结果溢出标志(O)、运算结果为零标志(Z)、运算结果为负标志(N)、运算结果符号标志(S)等,这些标志位通常用 1 位触发器来保存

除此之外,程序状态字寄存器还用来保存中断和系统工作状态等信息,以便 CPU 和系统及时了解机器运行状态和程序运行状态

指令系统

微指令

机器指令和微指令是计算机体系结构中的两个重要概念,它们之间存在一定的关系

  1. 机器指令(Machine Instruction)是计算机能够直接执行的最基本的指令。它是由操作码(Opcode)和操作数(Operand)组成的二进制代码。机器指令定义了计算机的基本操作,例如算术运算、逻辑运算、数据传输等。每个机器指令对应着一种特定的操作,计算机通过执行一系列的机器指令来完成特定的任务

  2. 微指令(Microinstruction)是对机器指令进行进一步细化的指令。它是计算机内部微程序的基本单位。微指令定义了计算机内部的控制信号和操作流程,用于控制计算机硬件执行机器指令。每个机器指令可以被分解为多个微指令,每个微指令对应着一种特定的硬件操作,例如寄存器操作、数据传输、算术逻辑运算等

关系

  • 机器指令是对计算机硬件的抽象,它定义了计算机的基本操作,是计算机程序的基本单位
  • 微指令是对机器指令的进一步细化,它定义了计算机内部的控制信号和操作流程,用于控制计算机硬件执行机器指令
  • 一个机器指令可以对应多个微指令,这些微指令按照一定的顺序和时序执行,最终完成机器指令所定义的操作

微程序

微程序(Microprogram)是一种特殊的程序,它用于控制计算机硬件执行机器指令。微程序是一系列的微指令的集合,这些微指令按照一定的顺序和时序执行,最终完成机器指令所定义的操作

微程序通常存储在计算机的控制存储器中,也称为微存储器。微存储器是一种特殊的存储器,用于存储微程序的指令和数据。微存储器可以是一种专用的存储器芯片,也可以是计算机的主存储器的一部分

微程序的存储位置和访问方式可以根据计算机的体系结构而有所不同。在一些早期的计算机体系结构中,微程序存储在专门的微存储器芯片中,通过控制器来访问。而在一些现代的计算机体系结构中,微程序可能存储在主存储器中,通过高速缓存或者其他机制来提高访问速度

寻址方式

  • 直接寻址:用给出的操作数的地址去寻址
  • 立即寻址:常数,直接用操作数而不去寻址
  • 间接寻址:指针的指针

变址寻址与基址寻址

变址寻址(Indexed Addressing)和基址寻址(Base Addressing)是两种常见的寻址方式,用于计算机中的指令执行和数据访问

相同点:变址寻址和基址寻址都是通过在指令中使用一个偏移量来计算最终的地址

不同点:

  • 变址寻址:变址寻址是通过将指令中的偏移量与寄存器的内容相加来计算最终的地址。这个寄存器通常称为变址寄存器,它保存着一个基地址,可以在运行时被修改。变址寻址可以用于实现数组的访问和循环结构

  • 基址寻址:基址寻址是通过将指令中的偏移量与一个固定的基地址相加来计算最终的地址。这个基地址通常是在程序运行之前就确定的,不会在运行时被修改。基址寻址可以用于实现程序中的全局变量和常量的访问

应用:

  • 变址寻址常用于数组的访问,通过使用变址寄存器和偏移量来计算数组元素的地址
  • 基址寻址常用于程序中的全局变量和常量的访问,通过使用一个固定的基地址和偏移量来计算变量或常量的地址
  • 变址寻址和基址寻址都可以用于实现循环结构,通过修改变址寄存器或使用不同的偏移量来实现循环迭代
  • 变址寻址和基址寻址都可以用于实现函数调用和参数传递,通过使用不同的偏移量来访问函数的参数或局部变量

指令周期

下面是一个简化的描述从内存读出并执行一条指令的过程:

  1. 指令寻址:CPU 从程序计数器(Program Counter,PC)中获取下一条要执行的指令的内存地址

  2. 指令读取:CPU 通过地址总线将该内存地址发送到内存控制器,内存控制器将对应的指令数据通过数据总线传输给 CPU

  3. 指令解码:CPU 将接收到的指令数据解码为对应的操作码和操作数。操作码指示了要执行的操作类型(例如加法、乘法、跳转等),而操作数则提供了操作所需的数据

  4. 操作数寻址:根据指令中的操作数地址,CPU 从内存或寄存器中获取操作数的值。这个过程可能涉及到不同的寻址模式,例如直接寻址、间接寻址、寄存器寻址等

  5. 指令执行:CPU 根据操作码和操作数执行相应的操作。这可能涉及到算术运算、逻辑运算、跳转等

  6. 结果存储:执行操作后,CPU 将结果存储到指定的寄存器或内存位置中。这个结果可以是计算的结果、状态标志等

  7. 更新程序计数器:CPU 将程序计数器更新为下一条指令的地址,以便继续执行下一条指令

以上是一个简化的描述,实际的指令执行过程可能会更加复杂,涉及到流水线执行、指令缓存、分支预测等技术