有人可以告诉我这个mips问题的英语含义吗?

时间:2018-10-06 23:00:58

标签: byte mips

找到最短的MIPS指令序列,该指令从寄存器$ t0提取第16位至第11位,并使用该字段的值替换寄存器$ t1中的第31位至第26位,而不更改寄存器$ t1的其他26位。 您能帮您更清楚地解释吗?还是帮我做?

2 个答案:

答案 0 :(得分:1)

找到最短的MIPS指令序列,该指令从寄存器$ t0提取第16位至第11位,并使用该字段的值替换寄存器$ t1中的第31位至第26位,而无需更改寄存器$ t1的其他26位。您能帮您更清楚地解释吗?或帮助我做到这一点?

它表示在32位MIPS寄存器$t0中,其中的各个位被索引为31(最高有效位)-0(最低有效位),该位的子集的索引范围为16-11(包括的)。所以,

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 (16 15 14 13 12 11) 10 9 8 7 6 5 4 3 2 1 0

然后将它们复制到寄存器“ $t1”的位中,该位的索引范围为“ 31到26”,

(31 30 29 28 27 26) 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

$t1(25-0)中的其余位不应更改。

您能想到一种使用srl, sll, or的方法(向右移动,向左移动或)吗?

srl $ t0,$ t0,11#t0 = t0 >> 11
sll $ t0,$ t0,26#t0 = t0 << 26
sll $ t1,$ t1,5
srl $ t1,$ t1,5
或$ t1,$ t1,$ t0

你看到我们在这里做什么吗?

答案 1 :(得分:0)

我不了解MIPS,但这仅涉及位操作:

MIPS中的类似寄存器是32位。 假设位的编号为0到31,最高位是最左边的一位,它是位号31。

要提取位16..11(总共6位),您必须执行6位AND,例如$ t0和0b00000000 00000001 11111000 00000000。

要替换$ t1中的位比较麻烦:首先,必须将位31..26设置为零,例如$ t1&0b00000011 11111111 11111111 11111111

接下来,您必须将源左移15位(从16到31有15位),例如$ t0 << 15。

最后,您需要进行OR'em操作,例如$ t1 = $ t1 | $ t0