不久前,我问TI-84上最快的无限循环是什么。我使用这个代码使用汇编无限循环涉及的答案之一:
AsmPrgm
18FE
然而,这有点不切实际,因为它只能通过重置按钮退出并且不会在其中运行任何内容。
有没有办法将TI-Basic代码放在此循环中和/或使其有条件退出?
以下是原始问题和答案的链接: What is the fastest infinite loop in TI-84+ Basic?
答案 0 :(得分:4)
$ 18FE是jr -2,它向后循环两个字节,自身。你需要在循环开始之后有额外的逻辑让你逃脱(即检查按钮按下),然后让它循环回到那个标签。要做到这一点,你需要调整$ FE值,因为这是跳跃的距离。它是一个带符号的8位值,因此请确保将所有条件代码输入,然后根据您使用的字节数进行分支。
答案 1 :(得分:3)
关于你的原始(链接)问题,jr $不是Z80上可能的最快循环,因为最快的循环是jp $(实际上是jp(hl)),其中$表示当前指令的地址。 最快的可行循环可以通过三种方式完成,具体取决于你对'循环'的定义以及如何退出循环:
IN reg,(C)
JP cc,$-2
其中IN reg,(C)命令还根据从端口读取的值设置S(符号),Z(零)和P / V(奇偶校验)标志,JP cc使用其中一个标志继续循环或离开吧。
HALT
并自然退出中断。众所周知,Z80通过从内存中连续取出HALT
指令后的相同字节来执行HALT
,然后忽略它并直到中断被捕获为止。此行为可以描述为循环,直到捕获到中断。这种行为的根本原因是Z80自然会刷新每次操作码的刷新,这样就可以在HALT
执行期间保持刷新。
答案 2 :(得分:1)
你绝对可以有条件地退出汇编程序。命令C9
是返回的,所以如果你有一个仅由AsmPrgmC9
组成的程序,那么将它作为汇编程序运行会立即完成它(它看起来与运行程序中没有任何东西一样) )。如果你想在满足某些条件时结束循环,那么你需要开始学习汇编,因为答案将根据条件和你正在使用的操作系统版本/计算器而有很大差异。