Mips 更好的解决方法:B[8]=(i-j)和#x2B;A[20]?

Mips 更好的解决方法:B[8]=(i-j)和#x2B;A[20]?,mips,Mips,作为背景 A[20]=s0,B[8]=s1,i=s4和j=s5 一位同学帮我做了这个,得到了: lw t0,80(s0) add t0, t0,s4 Sub t0,t0,s5 sw to,32(s1) 有一个: lw t0,80(s0) sub t1,s4,s5 for i - j add t2, t0,t1 for A[20] + (i-j) sw t2, 32(s1) 现在我不知道我所想的答案是否正确,但希望我的思路是正确的。基本上如下所示: val = a[20] val = v

作为背景

A[20]=s0,B[8]=s1,i=s4和j=s5

一位同学帮我做了这个,得到了:

lw t0,80(s0)
add t0, t0,s4
Sub t0,t0,s5
sw to,32(s1)
有一个:

lw t0,80(s0)
sub t1,s4,s5  for i - j
add t2, t0,t1  for A[20] + (i-j)
sw t2, 32(s1) 

现在我不知道我所想的答案是否正确,但希望我的思路是正确的。

基本上如下所示:

val = a[20]
val = val + i 
val = val - j 
b[8] = val
vs

这两者应该完成相同的事情,并且使用相同数量的指令来完成

您的版本减去
i-j
,然后将差值添加到
a[20]
,然后将其存储在
b[8]
中。你同学的版本将
a[20]
i
,然后从该总和中减去
j
,然后将结果存储在
b[8]
中。这基本上只是做同样事情的不同顺序


不过,你同学的版本使用了更少的寄存器。这并不能使它本身变得更好,但是IDK有人可能会认为这是更好的原因。

这些基本上类似:

val = a[20]
val = val + i 
val = val - j 
b[8] = val
vs

这两者应该完成相同的事情,并且使用相同数量的指令来完成

您的版本减去
i-j
,然后将差值添加到
a[20]
,然后将其存储在
b[8]
中。你同学的版本将
a[20]
i
,然后从该总和中减去
j
,然后将结果存储在
b[8]
中。这基本上只是做同样事情的不同顺序


不过,你同学的版本使用了更少的寄存器。这并不能使它本身变得更好,但是IDK有人可能会认为这是更好的原因。

< P>你的版本更好,原因如下:

  • 这是原话
  • 它可能会减少溢出的可能性:(A+i)-j可能会溢出,而A+(i-j)不一定会溢出(见1,这里的原始表达式为真意味着它的行为相同)
  • 在下一个循环中不使用
    t0
    的负载,因此负载使用延迟被覆盖-它实际运行速度比备选方案快1个循环

  • 让我们注意一下
    sub
    add
    指令将捕获溢出。问题中没有说明溢出是否有意义或重要。要完全忽略溢出,请使用
    subu
    addu

    您的版本更好,原因如下:

  • 这是原话
  • 它可能会减少溢出的可能性:(A+i)-j可能会溢出,而A+(i-j)不一定会溢出(见1,这里的原始表达式为真意味着它的行为相同)
  • 在下一个循环中不使用
    t0
    的负载,因此负载使用延迟被覆盖-它实际运行速度比备选方案快1个循环
  • 让我们注意一下
    sub
    add
    指令将捕获溢出。问题中没有说明溢出是否有意义或重要。要完全忽略溢出,请使用
    subu
    addu