我不期望详细的答案,因为这只是一个家庭作业,我不想浪费大家的时间。
我有一个关于MIPS代码的问题。
我们有一台'M'机器,它是一个内存-内存架构,它有这样的指令:
'mmul.d a,b,c'其获取b和c处的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位如何相互通信任何文档和/或解释,这将是有帮助的。
发布于 2017-01-30 05:52:50
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 + 4https://stackoverflow.com/questions/41924241
复制相似问题