(1) 计算机M采用32位定长指令...
(1) 计算机M采用32位定长指令字,即一条指令占4B,观察表中各指令的地址可知,每条指令的地址差为4个地址单位,指令1的地址为08048100H,指令2的地址为08048104H,指令长度和编址单位的比值为08048104H-08048100H=4H=4,所以M的存储器编址单位是4B/4=1B,即该计算机按字节编址。
(2) 根据题目条件,编译时变量sum和i分别分配在寄存器R1和R2中。常量N在寄存器R6中,数组A的首地址在寄存器R3中,数组中元素在内内存空间中连续存储。设初始时 sum = 0,N = 2,设A的首地址为08050000H,A数组元素类型大小为x字节,数组存放在堆空间中,数组元素在堆空间中按地址从小到大连续存储,所以A[0]首地址为08050000H,A[1]首地址为08050000H+x,A[2]首地址为08050000H+2x,以此类推。红色表示指令执行后写入寄存器的值。模拟代码段P的指令执行过程如下:
通过该过程的模拟,推出R4的内容为A[i]首地址或A[i]首地址距离A首地址的偏移,R5的内容为A[i]的值,根据R4的A[i]首地址的计算式,即 首地址首地址A[i]首地址=A首地址+4i ,等价于 首地址首地址A[i]首地址=A首地址+xi ,解得 x=4 ,即A数组元素类型大小为4字节。数组A中每个元素占4B=32bit。
这个推导过程非常麻烦,如果考场上没时间进行推理,由于这里是进行加法运算,常用的数据类型有 char、short、int、float和double,char用于字符串,剩余均可用于四则运算,short和double在408中出现通常与类型转换相关,只有int和float最常考,所以直接猜A中元素类型为int或float,在32位或64位计算机中,int或float大小为4B,数组A中每个元素占4B=32bit。
(3) 第一问。由表可知,bne (branch when not equal) 指令的机器代码为1446FFFAH,根据题目给出的指令格式,低16位的为OFFSET字段,所以该指令的OFFSET内容为FFFAH,用补码表示,[OFFSET]补=FFFAH=1111 1111 1111 1010B,[OFFSET]原= 1000 0000 0000 0110B= -6。
第二问。指令跳转PC自增一个指令字长的字长数,本题为4,从指令6的地址跳转到指令1的地址,08048100H = 08048114H + 4H + k×OFFSET,所以 ×OFFSET = -18H=-16-8=-24,OFFSET=-6,所以k=4,bne指令的转移目标地址计算公式为(PC)+4+4×OFFSET。
本题为2013年题44的变体,将该题的转移目标地址计算公式(PC)+2+2×OFFSET中的2修改为4,得到(PC)+4+4×OFFSET,即为这一问的答案。
(4) 第一问。因为指令2、3、4、6都与各自前一条指令发生数据相关,所以由于数据相关而发生阻塞的指令为指令2、3、4、6。
数据冒险:在一个程序中,下一条指令会用到当前指令计算的结果,此时这两条指令发生数据冲突。指令1和指令2,指令2和指令3,指令3和指令4,指令5和指令6均为写后读相关。由于M采用如下“按序发射、按序完成”的5级指令流水线,且硬件不采取任何转发措施,对于写后读相关,当前指令将数据写入寄存器后,下一条指令才能从该寄存器中读取数据;否则,先读后写,读取到的就是错误(旧)数据。因此只能进行阻塞,需要阻塞3个时钟周期。所以由于数据相关而发生阻塞的指令为指令2、3、4、6。
第二问。指令6进行分支预测,会发生控制冒险。
控制冒险:指令通常是顺序执行,但是遇到改变指令执行顺序的情况,例如执行转移、调用或返回指令时,会改变PC值,从而造成断流,引起控制冒险。指令6进行分支预测,判断结果为真就跳转指令1继续执行,指令6和指令1存在控制相关。由于M采用如下“按序发射、按序完成”的5级指令流水线,若不采用分支预测或其他任何优化方法,则对于分支预测指令,当前指令执行并访存后,下一条指令才能开始执行,因此只能进行阻塞,需要阻塞3个时钟周期。指令6进行分支预测,会发生控制冒险。
第三问。当前循环的指令5与下次循环的指令1虽然有数据相关,但由于
1. 指令5和指令6存在数据相关。由于M采用如下“按序发射、按序完成”的5级指令流水线,且硬件不采取任何转发措施,因此引起3个时钟周期阻塞;
2. 指令6是分支指令,指令6和指令1存在控制相关。分支指令的执行均引起3个时钟周期阻塞。
因而消除了该数据相关。
用NOP指令进行阻塞,模拟指令流水线如下:
登录后提交答案
暂无评论,来抢沙发