使用移位加乘法的复数乘积

时间:2019-10-07 20:30:27

标签: assembly riscv

我对汇编程序非常生锈,正在尝试提高自己的游戏水平。这样,我在玩过程,但是我的堆栈管理技能(或缺乏堆栈管理能力)证明这是一项艰巨的任务。

我在RISC-V汇编中实现了一个过程,该过程可以使用顺序移位加乘来相乘,如myMult所示。无论有缺陷,它都有效。现在,我想通过嵌套过程调用扩展到complexMult过程,该过程应该计算两个复数zw的乘积。我对如何进行非常迷惑,不胜感激。

我现在的代码可以在下面看到

# The product of two complex numbers
#       z = a + ib and w = c + id
# expands to
#       (a + ib)(c + id) = (ac - bd) + i(ad + bc)

.data
z = 3 + 2i
a: .word 3
b: .word 2
# w = 9 + 5i
c: .word 9
d: .word 5
# zw = 17 + 33i

.text
.globl main

main:
  lw a0, a
  lw a1, b
  lw a2, c
  lw a3, d
  addi s0, zero, 0 # temp storage for final mult result
  jal complexMult
  nop
  j end
  nop
myMult: 
  beq a1, zero, end
  andi t4, a1, 1
  bne t4, zero, increment
  srli a1, a1, 1
  slli a0, a0, 1
  beq t4, zero, myMult
increment:
  add s0, s0, a0
  srli a1, a1, 1 
  slli a0, a0, 1
  j myMult
complexMult:
  # lost on how to proceed
end:
  addi a0, zero, 0
  addi a0, s0, 0
  addi s0, zero, 0
  nop

0 个答案:

没有答案
相关问题