计算机体系结构说明功课

时间:2017-01-29 18:09:56

标签: mips computer-science cpu-architecture machine-instruction

我不希望得到详细的答案,因为这只是一项功课,而且我不想浪费每个人的时间。

我对某些看起来像MIPS代码的问题有疑问。

我们有'M'机器,它是一个具有以下指令的内存内存架构:

'mmul.d a,b,c'

它采用bc处的64位浮点值,并存储在内存地址a

然后,我们有一台较小的嵌入式'J'计算机,可将'M'计算机的指令转换为一个或多个'J'计算机指令:

lw     r1,a      // load 32 bits starting at 'a'
sw     r1,a      // store 32 bits starting at 'a'
pack   f0,r1,r2  // pack two 'r' registers into one 'f' register
unpack f0,r1,r2  // unpack one 'f' register into two 'r' registers
mul.d  f0,f2,f4  // perform floating-point multiply f2 * f4

现在我必须编写一个实现'mmul.d a,b,c'

的J-Machine程序

但我不明白如何将64位机器内存地址加载到32位寄存器中。我想如果我们可以将内存地址分配为2:

lw r1, b
sw r2, b[0]
sw r3, b[1]
lw r1, c
sw r4, c[0]
sw r5, c[1]
pack f2, r2, r3
pack f4, r4, r5
mul.d f0, f2, f4

首先,我不知道加载和存储单词的重点是什么,因为我们可以在存储单词的寄存器中存储一个值。

如果您有关于这些32位和64位如何相互通信的任何文档和/或说明,那将会有所帮助。

1 个答案:

答案 0 :(得分:1)

J似乎无法从内存加载64位浮点寄存器,因此您需要使用中间32位整数寄存器来解决此限制。可能看起来应该类似于:

lw r1, b
lw r2, b + 4
pack f1, r1, r2

lw r1, c
lw r2, c + 4
pack f2, r1, r2

mul.d f0, f1, f2

unpack f0, r1, r2
sw r1, a
sw r1, a + 4