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

admin2017-04-28  20

问题 某高级语言程序中的一个while语句为“while(save=k) i+=1;”,若对其编译时,编译器将i和k分别分配在寄存器s3和s5中,数组save的基址存放在s6中,则生成的MIPS汇编代码如下:
loop:    sll    t1,s3, 2    #R [ tl]←R [s3 ]<<2,即 R [t1]=i*4
add    t1, t1, s6    #R [ t1]←R [ t1]+R [s6] ,即 R [t1] =Address  of  save
t0, 0 (t1)    #R [t0]←M [R [t1] +0], gp R[t0] =save
bne .   t0,s5f exit   #if R[t0]≠R[s5]  then goto exit
addi    s3, s3,1    #R [s3]←R [s3]+1,即 i=i+l
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/0IfjFFFM
0

随机试题
最新回复(0)