【问题标题】:Computer Architecture Instructions homework计算机体系结构说明作业
【发布时间】:2017-06-14 22:07:17
【问题描述】:

我不期待详细的答案,因为这只是一个家庭作业,我不想浪费大家的时间。

我有一个关于 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 位如何相互通信的文档和/或说明,将会很有帮助。

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多