2024 组成原理 汇编代码虚拟页式管理大小端 解答题
第 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]

已知变量 isum 和数组 a 都为 int 型,通用寄存器 r1 - r5 的编号为 01H-05H。请回答下列问题。

2018_Q7_3

(1)根据指令序列 s 中每条指令的功能,写出存放数组 a 的首地址、变参 isum 的通用寄存器编号(3 分)

(2)已知 M 为小端方式,计算机采用页式存储管理方式。页大小为 4KB。若执行到指令序列 s 中第 1 条指令时,i=5r1r3 的内容分别为 0000 1332H0013 DFF0H。从地址 0013 DFF0H 开始存储单元内容如题 44 图所示。则执行 sum+=a[i]; 语句后。a[i] 的地址、a[i]sum 的机器数分别是什么(用十六进制表示)?a[i] 所在页的页号是多少?在此次执行中,数据组 a 至少存放在几页中?(5 分)

(3)指令 slli r4, r2, 2 的机器码是什么(用十六进制表示)?若数组 a 改为 short 类型,则指令序列存到 S 中 slli 指令的汇编形式应是什么?

汇编代码 虚拟页式管理 大小端

[tag_link]

【答案】

1)a 的首地址存放在 r3i 存放在 r2sum 存放在 r1

2)a[i] 的地址为 0013 E004Ha[i] 的机器数为 FFFF ECDCHsum 的机器数为 0000 000EHa[i] 所在页的页号是 0013EH;数组 a 至少存放在 2 页中。

3)指令机器码为 0021 2213H。汇编形式是 slli r4, r2, 1。【解析】

1)add r4,r3,r4:这条指令将寄存器 r3 和 r4 的值相加,结果存储在寄存器 r4 中。这对应于计算数组元素的内存地址(即&a[i])。因此,我们可以推断出寄存器 r3 存储的是数组 a 的首地址,即 a 的寄存器编号为 03H。slli r4,r2,2:这条指令将寄存器 r2 的值左移 2 位,2 结果存储在寄存器 r4 中。在 C 语言中,这对应于数组索引的计算(即 i*4,因为每个 int 类型占 4 字节)。因此,我们可以推断出寄存器 r2 存储的是变量 i 的值,即的寄存器编号位 02H。add r1,rl,r5:这条指令将寄存器 r1 和 r5 的值相加,结果存储在寄存器 r1 中。这对应于累加操作(即 sum+=a[i])。因此,我们可以推断出寄存器 r1 存储的是变量 sum 的值,即 sum 的寄存器编号为 01H。所以,数组 a 的首地址、变量 i 和 sum 的通用寄存器编号分别为 03H、02H 和 01H。

2)执行 sum+=a[i] 语句后,i 保持不变即 i = 5,每个数组元素占用四个字节

  • i=0 时,a[0] 占据存储单元 FF FF FF 7C
  • i=1 时,a[1] 占据存储单元 70 FE FF FF
  • i=2 时,a[2] 占据存储单元 00 00 00 00
  • i=3 时,a[3] 占据存储单元 3C 02 01 FF
  • i=4 时,a[4] 占据存储单元 FF FF FF 7C
  • i=5 时,a[5] 占据存储单元 F0 F1 00 00
  • i=6 时,a[6] 占据存储单元 DC EC FF FF所以 a[i] 的地址 = 首地址 + 偏移量 = 0013 E000 + 4 * (5-1) = 0013 E004H。a[i]的机器数按照小端编址,所以 DC 作为最低位放在最右边,以此类推可得:a[i] 的机器数 = FFFF ECDCH。sum 的机器数 = 0000 1332H + FFFF ECDCH = (1) 0000 000EH。由于只有 32 位,所以最高位舍掉后答案为 0000 000EH。页大小为 4KB =212 B,所以页内地址占 12 位,去掉后 12 位剩余的则是 20 位页号,a[i] 所在页页号 = 0013EH。我们有 20 位页号,根据题目可知数组跨页号了 0013E 和 0013D,所以数组 a 至少存放在 2 页中。

3)slli r4,r2,2 // R[r4]←R[r2]<<2通用寄存器 r1→r5 的编号位 01H→05H。

  • 6~0:由表可得:0010011
  • 11~7:rd = r2 = 00010
  • 14~12:由表可知为 010
  • 19~15:rd = r4 = 00100
  • 24~20:shamt = 2,可以为 2420:
  • 31~25:由表可知为 000 0000机器码 = 0000 0000 0010 0001 0010 0010 0001 0011B = 0021 2213H。若 a 改为 short 类型,slli 指令的汇编形式应该是 slli r4, r2, 1