变量名 | 意义 |
TOS | 指向参数堆栈顶 |
ENTRY | 当任务被激活时转移的入口点 |
LINK | 指向下一个任务 |
SP0 | 参数堆栈的起始地址 |
RP0 | 返回堆栈的起始地址 |
DP | 词典的顶部 |
#OUT | 已发送的字符数 |
#LINE | 已打印的行数 |
OFFSET | 当前文件的块位移 |
BASE | 当前在输入/输出转换中采用的数制 |
HLD (- addr) | 指向在 PAD 区中刚转换完的字符 |
FILE | 指向当前文件的 FCB |
IN-FILE | 指向输入文件的 FCB |
PRINTING | 打印机状态标志,其值为真时,打印机处于激活状态 |
词 | 堆栈 | 功能 |
(PAUSE) | ( - ) | 中止当前任务的执行,把控制转交给下一个任务。 它把 IP 及 RP 存放到参数堆栈上,把参数堆栈指针存进用户变量 TOS 中,转移到由 LINK 所指着的代码,从而实现多任务转换。 |
RESTART | ( - ) | 与(PAUSE)相反。取回所存放的信息,执行在上一轮暂停的任务 |
SLEEP | ( addr - ) | addr 是任一用户区的首地址,SLEEP 使该任务永远暂停 |
WAKE | ( addr - ) | 唤醒一个在"睡觉"的任务,使它在下一次轮到时运行 |
STOP | ( - ) | 永远暂停当前任务 |
PAUSE | ( - ) | 在多任务环境中 PAUSE 执行 (PAUSE) |
: STOP ( - ) UP @ 返回当前任务的地址 SLEEP 使当前任务“睡觉” PAUSE ; 当即中止当前任务而开始执行下一个任务 |
CODE PAUSE NEXT END-CODE 在单任务运行方式下,PAUSE 当即返回什么也不作;但在多任务方式中,把(PAUSE)的代码指针域的内容填入到 PAUSE 的代码指针域中,因而一个任务执行到 PAUSE 时就暂停下来。 |
词 | 堆栈 | 功能 |
#USER | (- addr) | 存放在用户区大小的变量 |
@LINK | (- addr) | 给出下一任务的ENTRY的地址 |
!LINK | (addr -) | 把一相对距离赋给当前任务的 LINK。使之 LINK+(LINK) 等于下一任务用户区的首地址 |
LOCAL | (base addr - addr1) | base为下一任务用户区的首地址,addr 为本任务之某一用户变量的地址,addr1是下一任务的同一用户变量的地址。 |
SET-TASK | (ip addr -) | 使地址为addr的任务执行由ip指着的代码 |
: TASK: ( size - ) 创建一个新任务和作有关的初始化工做(size -) // size 表示词典空间大小 CREATE 创建新任务的首部 TOS 当前任务用户区首址 HERE 新任务的用户区今后处开始 #USER @ 取出用户区的大小 (size 当前用户区首址 新任务用户区首址 用户区大小 - ) CMOVE 把现行任务的用户变量复制给新任务,初始化新任务的用户区 (size -) @LINK 新任务的 ENTRY 的地址 (size 新任务入口地址 -) UP @ -ROT 把当前任务的用户区指针送到堆栈低暂存 (当前用户区起始地址 size 新任务入口地址 -) HERE UP ! 使 UP 指向新任务的用户区 (当前用户区起始地址 size 新任务入口地址 -) !LINK 把现行任务用户区的地址存入到新任务的 LINK 中 (当前用户区起始地址 size -) DUP HERE + 新用户区及size之和的下一地址 (当前用户区起始地址 size 新用户区和size和的下一个地址 -) DUP RP0 ! 初始化新任务的返回堆栈指针 (当前用户区起始地址 size 新用户区和size和的下一个地址 -) 100 - SP0 ! 初始化新任务的参数堆栈指针 (当前用户区起始地址 size -) SWAP UP ! 恢复 UP 指向现行任务 (size -) HERE ENTRY LOCAL !LINK 把新任务的地址存进现行任务的 LINK 中 (size -) HERE #USER @ + 新任务词典区首地址 (size 新任务词典区首地址 -) HERE DP LOCAL ! 初始化新任务词典指针 (size -) HERE SLEEP 首先使新任务处于"睡眠"状态 (size -) ALLOT ; 分配 size 个字节给新任务 (-) |
: BACKGROUND: ( - ) 创建一个词典空间为 400 个字节的新任务,初始化该任务去执行跟着的代码 400 TASK: 创建一个以跟着的名字命令的新任务 HERE IP 指向有待编译的代码,使得新任务能够执行它 (新任务地址 当前解释指针位置 - ) @LINK 2- 新任务的地址 (新任务地址 当前解释指针位置 新任务入口地址-2 -) SET-TASK 初始化新任务,让她执行 IP 指着的代码 (新任务地址 - ) !CSP 编译程序查错初始化 ] ; 调用编译程序,编译要为新任务执行的跟着的代码 |
词 | 堆栈 | 功能 |
MULTI | (-) | 创建多任务调度循环 |
SINGLE | (-) | 取消多任务调度循环 |
: SINGLE ( - ) ['] PAUSE >BODY ['] PAUSE ! ; |
定义中的第一行返回 PAUSE 的 pfa ,它指向 NEXT 。注意:PAUSE 是 CODE 定义,CODE 词的代码指针域内的内容是其参数域地址。定义第二行恢复 PAUSE 的代码指针域为常态。这样 PAUSE 就将当即返回而再也不执行(PASE) |