如何解决为什么这里传递了错误的参数?
我是 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 举报,一经查实,本站将立刻删除。