我对汇编程序非常生锈,正在尝试提高自己的游戏水平。这样,我在玩过程,但是我的堆栈管理技能(或缺乏堆栈管理能力)证明这是一项艰巨的任务。
我在RISC-V汇编中实现了一个过程,该过程可以使用顺序移位加乘来相乘,如myMult
所示。无论有缺陷,它都有效。现在,我想通过嵌套过程调用扩展到complexMult
过程,该过程应该计算两个复数z
和w
的乘积。我对如何进行非常迷惑,不胜感激。
我现在的代码可以在下面看到
# 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