在通过MSX BASIC中的USR函数调用的机器语言例程中,哪些寄存器的值应该保留,哪些寄存器可以在不保存其原始值的情况下使用?我试过Google和Perplexity AI,但它们对我来说效果不好。
USR
h9vpoimq1#
在研究了MSX 1 ROM Basic的反汇编清单后,我发现了here,我强烈怀疑您的机器语言例程不需要保存任何寄存器。只要确保不要弄乱堆栈和堆栈指针。也不要管寄存器I和R,除非你确切地知道你在做什么。HL一定不会被破坏,因为它会跟踪令牌流,但您不需要自己保存它。在跳转到机器语言例程之前,它被推入:
L4FD5: CALL L4FF4 PUSH DE CALL OPRND_6 EX (SP),HL
并在从机器语言例程返回时立即弹出:
L3297: POP HL RET
我也认为没有必要保存任何其他寄存器:
1条答案
按热度按时间h9vpoimq1#
在研究了MSX 1 ROM Basic的反汇编清单后,我发现了here,我强烈怀疑您的机器语言例程不需要保存任何寄存器。只要确保不要弄乱堆栈和堆栈指针。也不要管寄存器I和R,除非你确切地知道你在做什么。
HL一定不会被破坏,因为它会跟踪令牌流,但您不需要自己保存它。在跳转到机器语言例程之前,它被推入:
并在从机器语言例程返回时立即弹出:
我也认为没有必要保存任何其他寄存器: