假定图1-1所示的模型机字长为8位,有4个通用寄存器r0~r3,编号分别为0~3,有16个主存单元,编号为0~15。每个主存单元和CPU中的ALU、通用寄存器、IR、MDR的宽度都是8位,PC和MAR的宽度都是4位,连接CPU和主存的总线中有4位地址线、8位数据线和若干位控制线(包括读/写命令线)。
图1-1 模型计算机基本结构
该模型机采用8位定长指令字,即每条指令有8位。指令格式有R型和M型两种,如图1-2所示。
图1-2 定长指令字格式
在图1-2中,op为操作码字段,R型指令的op为0000和0001时,分别定义为寄存器间传送(mov)和加(add)操作,M型指令的op为1110和1111时,分别定义为取数(load)和存数(store)操作;rt和rs为通用寄存器编号;addr为主存单元地址;R[r]表示编号为r的通用寄存器中的内容,M[addr]表示地址为addr的主存单元内容,“←”表示从右向左传送数据。假定指令系统中除了有mov(op=0000)、add(op=0001)、load(op=1110)和store(op=1111)指令外,R型指令还有减(sub,op=0010)和乘(mul,op=0011)等指令,请仿照主教材中的图1-3给出C语句“z=x*(x-y);”的机器级指令序列(包括机器指令和对应的汇编指令)以及在主存中的存放内容,并仿照主教材中的图1-5给出每条指令的执行过程,写出指令执行过程中每个阶段所包含的微操作。
【分析解答】
实现z=x*(x-y)功能的指令序列至少包括7条指令,占7个存储单元,假定这7条指令分别存放在第0~6单元,变量x、y和z分别存放在第8、9、10这三个单元,则实现z=x*(x-y)功能的指令序列在主存中的存放内容(粗体部分)以及对每条指令功能的说明如图1-3所示。
图1-3 实现z=x*(x-y)功能的指令序列及其指令功能的说明
指令执行过程中每个阶段所包含的微操作如图1-4所示。
图1-4 实现z=x*(x-y)功能的每条指令执行过程的说明