我正在使用汇编程序混合高级语言。我可以使用本地寄存器(l0到l7)编程吗?因为我有两个观察。1.编译器生成的机器代码没有本地寄存器。1.陷阱模型使用的寄存器l0至l3。考虑到以上两点,我可以使用本地寄存器进行汇编编程吗?先谢谢你。
ca1c2owp1#
首先,如果你还没有看过,请看一下这个车轮图:https://icps.u-strasbg.fr/people/loechner/public_html/enseignement/SPARC/sparcstack.html它摘自SPARC V8体系结构手册,显示了in、out和本地寄存器的工作方式。此图有两个主要要点。
简而言之,您的问题的答案是是的,您可以使用本地寄存器进行汇编编程。要处理您的观察结果:1.编译器有时会生成使用输入和输出寄存器而不是局部变量的汇编。我不知道这到底是为什么,但我在“玩具”程序上观察到了同样的事情。如果你添加更多的变量和/或使用更高的优化级别,它可能会开始使用局部变量。记住,i和o寄存器也是通用的,可以用于传递参数以外的用途。1.我怀疑你搞错了。你是怎么得出这个结论的?希望这能有所帮助。这主要是靠记忆,我在过去的一年里没有在SPARC上工作过,所以我欢迎更正。
1条答案
按热度按时间ca1c2owp1#
首先,如果你还没有看过,请看一下这个车轮图:https://icps.u-strasbg.fr/people/loechner/public_html/enseignement/SPARC/sparcstack.html它摘自SPARC V8体系结构手册,显示了in、out和本地寄存器的工作方式。
此图有两个主要要点。
简而言之,您的问题的答案是是的,您可以使用本地寄存器进行汇编编程。
要处理您的观察结果:
1.编译器有时会生成使用输入和输出寄存器而不是局部变量的汇编。我不知道这到底是为什么,但我在“玩具”程序上观察到了同样的事情。如果你添加更多的变量和/或使用更高的优化级别,它可能会开始使用局部变量。记住,i和o寄存器也是通用的,可以用于传递参数以外的用途。
1.我怀疑你搞错了。你是怎么得出这个结论的?
希望这能有所帮助。这主要是靠记忆,我在过去的一年里没有在SPARC上工作过,所以我欢迎更正。