【问题标题】:MIPS Assembly Language (Power2)MIPS 汇编语言 (Power2)
【发布时间】:2016-02-29 00:44:54
【问题描述】:

我目前正在寻找执行 n power2 函数的最佳方法。简而言之,MIPS 中的代码应该计算 2n。 n 是存储在$a0 中的正数。但是,截至目前,我的结果正在减少一次。

我的尝试

main:

    # initialize 
    la  $a0,3       #n counter
    li  $s0,2       #base number
    li  $s1,0       #calculated value

While:  
    beq $a0,$zero,exit      #Checks if n is zero, if yes exit program 
    sllv $s1,$s0,$a0        #Shift left logical by n, this should do the math 2^n

exit:

【问题讨论】:

标签: assembly mips qtspim


【解决方案1】:

“失败”不是一个信息量很大的陈述。无论如何,beg $a0,$zero,j Exit 的正确语法是beq $a0, $zero, exit,但您甚至不需要该检查。你应该用1而不是0加载$s0,因为2^01,而sll $s0, 2, $a0应该是sllv $s0, $s0, $a0

【讨论】:

  • 修复了问题和 j 退出代码。它现在在 QtSpim 中运行,但遗憾的是结果没有被推送到 $s0,如上图所示。
  • 确保在正确的位置检查寄存器。使用 beq 后,代码除了加载 $s01 之外什么都不做,无论如何都应该工作。
  • 我不确定您所说的“正确点”是什么意思。我的 QtSpim 缺少的是没有结果。
  • 好的,我现在得到结果了。但是,它会产生 1 个以上的功率值 n。例如,当 n=3 时。结果是 16 而不是 8。请参阅上面的新问题信息。
  • 好吧,这是意料之中的,因为你用 2 初始化 $s0x << y 不对应于 x^y,它对应于 x * (2^y),这就是你最终得到您描述的结果。
猜你喜欢
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多