第44题
对于题 43 中的计算机M,C 语言程序P 包含的语句“sum+=a[i];”在M 中对应的指令序列S 如下。
slli r4, r2, 2 //R[r4]←R[r2]<<2
add r4, r3, r4 //R[r4]←R[r3]+R[r4]
lw r5, 0(r4) //R[r5]←M[R[r4]+0]
add r1, r1, r5 //R[r1]←R[r1]+R[r5]
已知变量i、sum 和数组a 都为int 型,通用寄存器r1~r5 的编号为 01H~05H。请回答下列问题。
(1)根据指令序列S 中每条指令的功能,写出存放数组a 的首地址、变量i 和sum 的通用寄存器编号。
(2)已知M 为小端方式计算机,采用页式存储管理方式,页大小为 4KB。若执行到指令序列S中第 1 条指令时,i = 5且r1和r3 的内容分别为 0000 1332H 和 0013DFF0H,从地址 0013DFF0H 开始的存储单元内容如题 44 图所示,则执行“sum+=a[i];”语句后,a[i]的地址、a[i]和sum 的机器数分别是什么(用十六进制表示)?a[i]所在页的页号是多少?此次执行中,数组a至少存放在几页中?

(3)指令“slli r4, r2, 2”的机器码是什么(用十六进制表示)?若数组a 改为short 类型,则指令序列S 中slli 指令的汇编形式应是什么?
参考答案
1)数组 a 的首地址、变量 i 和 sum 的通用寄存器编号分别为 03H、02H 和 01H。
2)a[i] 的机器数 = FFFF ECDCH,sum 的机器数 = 0000 000EH,a[i] 所在页页号=0013EH,数组 a 至少存放在 2 页中。
3)机器码 = 0000 0000 0010 0001 0001 0010 0001 0011B = 0021 1213H。若 a 改为 short 类型,slli 指令的汇编形式应该是 slli r4, r2, 1。