變量名 | 意義 |
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) |