assembly 在MSX BASIC中通过USR函数调用的例程中,哪些寄存器是被调用保存的?

8yoxcaq7  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(67)

在通过MSX BASIC中的USR函数调用的机器语言例程中,哪些寄存器的值应该保留,哪些寄存器可以在不保存其原始值的情况下使用?
我试过Google和Perplexity AI,但它们对我来说效果不好。

h9vpoimq

h9vpoimq1#

在研究了MSX 1 ROM Basic的反汇编清单后,我发现了here,我强烈怀疑您的机器语言例程不需要保存任何寄存器。只要确保不要弄乱堆栈和堆栈指针。也不要管寄存器I和R,除非你确切地知道你在做什么。
HL一定不会被破坏,因为它会跟踪令牌流,但您不需要自己保存它。在跳转到机器语言例程之前,它被推入:

L4FD5:
  CALL L4FF4
  PUSH DE
  CALL OPRND_6
  EX (SP),HL

并在从机器语言例程返回时立即弹出:

L3297:
  POP HL
  RET

我也认为没有必要保存任何其他寄存器:

  • AF、BC和DE几乎肯定会持有临时价值;我看到他们在调用机器语言例程后不久就被击败了。
  • IX和IY似乎不时用作系统例程的输入参数。
  • 备用寄存器(AF '、BC'、DE '、HL')在进行时隙间呼叫时临时使用。

相关问题