问答题 某程序中有如下循环代码段:“for(i=0;i<N;i++)sum+=A[i];”,假设编译时变量sum和i分别分配在寄存器R1和R2中,常量N在寄存器R6中,数组A的首地址在寄存器R3中,程序段P起始地址为0804 8100H,对应的汇编代码和机器代码加颢44表所示。执行上述代码的计算机M采用32位定长指令字,其中分支指令bne采用如下格式。
【正确答案】正确答案:(1)因每条指令长度为32位,占4个单元,故存储器编址单位是字节。 (2)数组A中每个元素的地址通过下标左移2位(即乘以4)再加数组首地址得到,故每个数组元素占4个字节,即32位。 (3)OFFSET=FFFAH,值为-6。 指令bne所在地址为0804 8114H,转移目标地址为0804 8100H。由0804 8100H=0804 8114H+4+(-6)×4,可以推断出指令bne的转移目标地址计算公式为:(PC)+4+OFFSET×4。 (4)因第2、3、4、6条指令都与其前一条指令发生数据相关,故由于数据相关而发生的阻塞的指令为第2、3、4、6条。 第6条指令会发生控制冒险。 当前循环的第5条指令与下次循环的第1条指令虽有数据相关,但由于第6条指令后面有3个时钟周期的阻塞,因而指令1的执行不会因为与指令5的数据相关而发生阻塞。
【答案解析】