某高级语言程序中的一个while语句为“while(save[i]==k)i+=1;”,若对其编译时,编译器将i和k分别分配在寄存器s3和s5中,数组saVe的基址存放在s6中,则生成的MIPS汇编代码如下: loop: s11 t1,s3,2 #R

admin2017-11-20  20

问题 某高级语言程序中的一个while语句为“while(save==k)i+=1;”,若对其编译时,编译器将i和k分别分配在寄存器s3和s5中,数组saVe的基址存放在s6中,则生成的MIPS汇编代码如下:
loop: s11 t1,s3,2    #R[t1]←R[s3]<<2,即R[t1]=i*4
    add t1,t1,s6    #R[t1]←R[t1]+R[S6],即R[t1]=Address of save
    1w t0,0(t1)     #R[t0]←M[R[t1]+0],即R[t0]=save
    bne t0,S5,exit  #if R[t0]≠R[s5] then goto exit
    addi  s3,s3,1    #R[s3]←R[s3]+1,即i=i+1
    j loop    #goto loop
    exit:
  假设从loop处开始的指令序列存放在内存80000处,则上述循环对应的MIPS机器码如图5-1所示。

    根据上述叙述,回答下列问题,要求说明理由或给出计算过程。
MIPS的编址单位是多少?数组save每个元素占几个字节?

选项

答案MIPS的编址单位是字节。从图5-1可看出,每条指令32位,占4个地址,所以一个地址中有8位,因为每次循环取数组元素时,其下标地址都要乘以4,所以save数组的每个元素占4个字节。

解析
转载请注明原文地址:https://jikaoti.com/ti/bLfjFFFM
0

最新回复(0)