不久前,我问TI-84 上最快的无限循环是什么。我使用带有此代码的程序集无限循环参与的答案之一:
AsmPrgm
18FE
但是,这有点不切实际,因为它只能通过重置按钮退出,并且不会在其中运行任何东西。
有没有办法将 TI-Basic 代码放入此循环和/或使其有条件地退出?
这是原始问题和答案的链接: TI-84+ Basic 中最快的无限循环是什么?
不久前,我问TI-84 上最快的无限循环是什么。我使用带有此代码的程序集无限循环参与的答案之一:
AsmPrgm
18FE
但是,这有点不切实际,因为它只能通过重置按钮退出,并且不会在其中运行任何东西。
有没有办法将 TI-Basic 代码放入此循环和/或使其有条件地退出?
这是原始问题和答案的链接: TI-84+ Basic 中最快的无限循环是什么?
$18FE 是 jr -2,它自身向后循环两个字节。您将希望在循环开始之后出现额外的逻辑以让您逃脱(即检查按钮按下),然后让它循环回该标签。为此,您需要调整 $FE 值,因为这是跳跃的距离。这是一个带符号的 8 位值,因此请确保输入所有条件代码,然后根据您使用的字节数分支回来。
关于您的原始(链接)问题, 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 自然会在每次获取操作码时都会刷新 DRAM,这样在HALT
执行期间会保持刷新。
你绝对可以让汇编程序有条件地退出。该命令C9
是返回,因此如果您的程序仅包含AsmPrgmC9
,则将其作为汇编程序运行将立即完成(它看起来与运行没有任何内容的程序相同)。如果您想在满足某些条件时结束循环,那么您需要开始学习汇编,因为答案会因该条件是什么以及您使用的操作系统版本/计算器而有很大差异。