问题描述
我是 y86 新手,正在尝试编写递归乘法函数,但一直传递错误的参数。
square:
irmovl $4,%ebx
pushl %ebx # push argument
rrmovl %ebx,%edx #set it equal to the number being squared
pushl %edx
call rmult
popl %edx
popl %ebx
ret
和实际的乘法代码:
rmult:
pushl %ebp
rrmovl %esp,%ebp
mrmovl 8(%ebp),%ebx #ebx = y
irmovl $0,%eax
rrmovl %ebx,%edi
subl %ebx,%eax
je rec_multend
rrmovl %ebx,%esi
irmovl $1,%eax
subl %eax,%esi
pushl %ebx
pushl %esi
call rmult
mrmovl 12(%ebp),%edx #edx = x
popl %esi
popl %ebx
addl %edx,%edi
rec_multend:
popl %ebp
ret
我为 x 和 y 传入 4,因为调用它们的函数是对数字求平方,因此它们应该相同,但在行:
mrmovl 12(%ebp),%edx #edx = x
它传入 2 而不是我最初放在那里的 4,最终返回值 13 而不是 16。
根据我对 y86 的有限理解,“mrmovl 8(%ebp),%ebx”应该返回我设置为等于 Y 的第二个参数,“mrmovl 12(%ebp),%edx”应该返回第一个参数等于到 X,它们都作为 4 传入。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)