gpt4 book ai didi

assembly - Z80:从栈顶复制到 HL

转载 作者:行者123 更新时间:2023-12-01 11:17:03 24 4
gpt4 key购买 nike

这可以通过以下方式实现:

11 pop hl
10 push hl

在 21 个周期内。我发现的唯一选择是 ex (sp),hl,它需要 19 个周期。缺点是内容必须在我处理完它们后才能恢复到原来的值,所以在实践中,这种方法比第一种方法成本更高。

还有其他选择吗?

最佳答案

如果您想将堆栈顶部的值放入 HL,那么您已经列出了几乎所有可用选项:

          pop hl : push hl                               ; 10+11 = 21t

          pop hl : dec sp : dec sp                       ; 10+6+6 = 22t

你也可以自己修改代码,这不会有太大好处:

          ld (addr1+1),sp
addr1: ld hl,(0) ; 20 + 16 = 36t

更别扭的是,你可以先把SP换成HL:

          ld hl,0 : add hl,sp
ld a,(hl) : inc hl : ld h,(hl) : ld l,a ; 10+11 + 7+6+7+4 = 21+24 = 45t

(我提到了最后两个选项,以防万一在您的情况下您可以从其中一个中受益。)

命令

          ex (sp),hl                                     ; 19t

用HL的当前值交换栈顶的值,所以它已经不是你要求的了(尽管它很快)。因此,进一步加快速度的唯一方法就是以各种方式作弊。有一些看似最明显的作弊方法:

  • 如果你真的知道 SP 指向哪里,那么简单地阅读它会更快:

         ld hl,(wherethestackis)                         ; 16t
  • 如果你能控制堆栈的确切位置,或者堆栈实际包含什么,你可以将它指向将值加载到 HL 的命令,这样你就可以简单地做

         ld hl,thevalueonthestack                        ; 10t

我知道这两个选项看起来都很极端,但我知道很多高度优化的 Z80 代码都受益于类似的技巧。所以,请不要立即解雇他们。

关于assembly - Z80:从栈顶复制到 HL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49328746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com