1

不久前,我问TI-84 上最快的无限循环是什么。我使用带有此代码的程序集无限循环参与的答案之一:

AsmPrgm
18FE

但是,这有点不切实际,因为它只能通过重置按钮退出,并且不会在其中运行任何东西。

有没有办法将 TI-Basic 代码放入此循环和/或使其有条件地退出?

这是原始问题和答案的链接: TI-84+ Basic 中最快的无限循环是什么?

4

3 回答 3

4

$18FE 是 jr -2,它自身向后循环两个字节。您将希望在循环开始之后出现额外的逻辑以让您逃脱(即检查按钮按下),然后让它循环回该标签。为此,您需要调整 $FE 值,因为这是跳跃的距离。这是一个带符号的 8 位值,因此请确保输入所有条件代码,然后根据您使用的字节数分支回来。

于 2017-02-15T17:47:49.623 回答
3

关于您的原始(链接)问题, jr $ 不是 Z80 上可能的最快循环,因为最快的是 jp $ (实际上是 jp (hl)),其中 $ 表示当前指令的地址。最快的可退出循环可以通过三种方式完成,具体取决于您对“循环”的定义是什么以及应该如何退出循环:

  1. 使用中断退出上述循环:在这种情况下,您应该在中断中展开堆栈(删除返回地址)并跳转到其他地方。
  2. 像这样使用循环:

​​​

IN reg,(C)
JP cc,$-2

其中 IN reg,(C) 命令还根据从端口读取的值设置 S(符号)、Z(零)和 P/V(奇偶校验)标志,JP cc 使用这些标志之一来继续循环或退出循环。

  1. 使用HALT并随着中断自然退出。

众所周知,Z80 的执行方式是从内存中HALT连续获取HALT指令后的相同字节,然后忽略它并一直这样做,直到捕获到中断。这种行为可以描述为循环直到中断被捕获。这种行为的根本原因是 Z80 自然会在每次获取操作码时都会刷新 DRAM,这样在HALT执行期间会保持刷新。

于 2017-02-16T07:43:19.680 回答
1

你绝对可以让汇编程序有条件地退出。该命令C9是返回,因此如果您的程序仅包含AsmPrgmC9,则将其作为汇编程序运行将立即完成(它看起来与运行没有任何内容的程序相同)。如果您想在满足某些条件时结束循环,那么您需要开始学习汇编,因为答案会因该条件是什么以及您使用的操作系统版本/计算器而有很大差异。

于 2017-02-16T20:50:19.273 回答