发格编程(Forth)中的跳转命令用于改变程序的执行流程。以下是一些常用的跳转命令及其用法:
无条件跳转
G:跳转到指定的行号。例如,`G10` 会跳转到程序的第10行。
条件跳转
CJ(条件跳转):根据某些条件是否满足来决定是否跳转。例如,`CJ P10` 表示如果 P10 的值为 1,则跳转到标号 10 的位置。
CJ(P):带进位的条件跳转,如果 P10 的值为 1,则跳转到标号 10 的位置,并将进位位(carry bit)也带到目标位置。
跳转指令的注意事项
跳转指令和标号指令必须配合使用,且只能在同一程序块中(如主程序、同一主程序或同一个中断程序)使用,不能在不同的程序块中相互跳转。
执行跳转后,被跳过程序段中的各元件状态(如 Q、M、S、C 等)保持跳转前的状态。计数器 C 停止计数,当前值存储器保持跳转前的计数值。对于定时器,分辨率为 1ms 和 10ms 的定时器会保持跳转前的工作状态,而分辨率为 100ms 的定时器在跳转期间停止工作,但不会复位,存储器里的值为跳转时的值。
其他跳转相关命令
H/M/L:分别跳转到屏幕的最上方、中间和最下方。
gf:跳转到光标处的文件名。
/pattern:跳转到匹配指定模式的文本位置。
?pattern:反向跳转到匹配指定模式的文本位置。
ctrl+i和 ctrl+o:在跳转列表中前进和后退。
jumps:列出跳转列表。
changes:列出改变列表。
changelist g:反向遍历改变列表。
changelist gi:正向遍历改变列表并回到上次退出插入模式的地方。
g;:反向遍历改变列表,跳到上次文档修改的地方。
^:回到上次退出插入模式光标所在的位置。
这些命令提供了灵活的跳转机制,允许程序员根据不同的条件和控制结构来改变程序的执行流程。在使用这些命令时,建议仔细考虑跳转的影响范围,以确保程序的正确性和稳定性。