程序和指令的关系 1条指令的执行过程 机器指令的执行过程
程序执行需要解决的问题
如何判定每条指令有多长?如何判定操作类型、寄存器编号、立即数等?如何区分第2行和第3行mov指令的不同?如何确定操作数是在寄存器中还是在存储器中?一条指令执行结束后如何正确读取到下一条指令?
异常:指令无法执行,原因:缺页、越界、操作数未定义
异常是在CPU内部发生的,中断是由外部事件引起的
机器指令的执行过程
°取指令:从PC所指单元取出指令送指令寄存器(IR),并增量PC。•如add函数,开始PC(IA-32的EIP)中存放的是0x0848394,CPU根据PC取指令送IR,每次总是取最长指令字节数,假定最长指令是4个字节,即IR为32位,此时,也即55 89 E5 8BH被取到IR中。
°指令译码:不同指令其功能不同,因而需要不同的操作控制信号。•CPU根据不同操作码译出不同控制信号。对于上述取到IR中的55 89 E58BH译码时,可根据高5位01010译码得到push指令的控制信号。
°源操作数地址计算并取操作数:根据寻址方式确定源操作数地址计算方式,若是存储器数据,则需一次或多次访存;若为间接寻址或两操作数都在存储器的双目运算,则需多次访存;若是寄存器数据,则直接从寄存器取数。
°执行数据操作:在ALU或加法器等运算部件中对取出的源操作数进行运算。
°目的操作数地址计算并存结果:根据寻址方式确定目的操作数地址计算方式,若是存储器数据,则需要一次或多次访存(间接寻址时);若是寄存器数据,则在进行数据操作时直接存结果到寄存器。
°指令地址计算并将其送PC。顺序执行时,PC加上当前指令长度;遇到转移类指令时,则需要根据条件码、操作码和寻址方式等确定下条指令地址。
机器指令的执行过程
° 每条指令的功能总是由以下四种基本操作来实现:
读取某一主存单元的内容,并将其装入某个寄存器(取指, 取数)
把一个数据从某个寄存器存入给定的主存单元中(存结果)
把一个数据从某寄存器送到另一寄存器或者ALU(取数,存结果)
进行算术或逻辑运算(PC+”1”,计算地址,运算)
指令执行过程中查询各种异常情况,并在发现异常时转异常处理
指令执行结束时查询中断请求,并在发现中断请求时响应中断
° 操作功能可形式化描述
描述语言称为寄存器传送语言RTL (Register Transfer Language)
冯.诺依曼结构模型机
不同架构支持的指令集不同,同一种指令的实现方式和功能也可能不同
IA-32的体系结构
ALU结构原理
°CPU的基本功能是周而复始地执行指令。
°CPU最基本的部分是数据通路和控制单元
•数据通路(datapath)中包含组合逻辑元件和存储信息的状态元件。
-组合逻辑(如加法器、ALU、扩展器、多路选择器以及状态元件的读操作逻辑等)用于对数据进行处理;
-状态元件包括触发器、寄存器和存储器等,用于对指令执行的中间状态或最终结果进行存储。
•控制单元(control unit):对取出的指令进行译码,与指令执行得到的条件标志或当前机器的状态、时序信号等组合,生成对数据通路进行控制的控制信号,如读信号Rd、写信号Wr、ALU控制信号ALUctr等。
°指令执行过程主要包括取指、译码、取数、运算、存结果。
°通常把取出并执行一条指令的时间称为指令周期,它由机器周期或直接由时钟周期组成。现代计算机已经没有机器周期的概念。
°现代计算机的每个指令周期直接由一个或若干个时钟周期(节拍)组成。
°时钟信号是CPU中用于控制同步的信号。
°每条指令功能不同,因此每条指令执行时数据在数据通路中所经过的部件和路径也可能不同。但是,每条指令在取指令阶段都一样。