问答题
某高级语言程序中的一个while语句为“while(save[i]=k) i+=1;”,若对其编译时,编译器将i和k分别分配在寄存器s3和s5中,数组save的基址存放在s6中,则生成的MIPS汇编代码如下:loop: sll t1,s3, 2 #R [ tl]←R [s3 ]<<2,即 R [t1]=i*4add t1, t1, s6 #R [ t1]←R [ t1]+R [s6] ,即 R [t1] =Address of save [i]t0, 0 (t1) #R [t0]←M [R [t1] +0], gp R[t0] =save [i]bne . t0,s5f exit #if R[t0]≠R[s5] then goto exitaddi s3, s3,1 #R [s3]←R [s3]+1,即 i=i+lj loop #goto loopexit;假设从loop处开始的指令序列存放在内存80000处,则上述循环对应的MIPS机器码如图5—1所示。
根据上述叙述,回答下列问题,要求说明理由或给出计算过程。t0和s6的编号各为多少?
答案:
正确答案:从图5—1中第3和第4条指令可以看出,$t0的编号为8,从第2条指令可以看出$s6的编号为22。