iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
自我挑戰組

F83 經典範例系列 第 9

F83 基本指令

  • 分享至 

  • xImage
  •  

F83 基本指令

根據 FORTH:慶的世界 2008年11月29日的貼文,有整理一篇 F83 標準指令。該網站的作者,曾慶潭先生曾任中華民國符式語言學會的理事長,擅長 Forth 語言數值分析程式設計,他的 Blogger 網站有相當豐富的 Forth 程式設計經驗分享,非常值得一看。

https://forthfortnight.blogspot.com/2008/11/forth-83_252.html

我們在此將文件重新編輯,改成表格形式,方便讀者後續章節可以拿來參考使用。

FORTH-83 標準指令

類別 指令 堆疊註解 / 說明
堆疊操作指令 DUP ( n   -   n , n ) 複製堆疊頂端之值。
堆疊操作指令 DROP ( n   -   ) 丟棄堆疊頂端之值。
堆疊操作指令 SWAP ( n1 , n2   -   n2 , n1 ) 互換堆疊頂上兩值。
堆疊操作指令 OVER ( n1 , n2   -   n1 , n2 , n1 ) 複製 n1 到頂端。
堆疊操作指令 ROT ( n1 , n2 , n3   -   n2 , n3 , n1 ) 將 n1 旋轉到頂端。
堆疊操作指令 PICK ( . . . +i   -   . . . n ) 複製 n(i) 到頂端。
堆疊操作指令 ROLL ( . . . +i   -   . . . ) 將 n(i) 旋轉到頂端。
堆疊操作指令 ?DUP ( n   -   0
堆疊操作指令 DEPTH (   -   +n ) 取得堆疊深度。
堆疊操作指令 >R ( n1   -   ) 將 n1 推入回返堆疊。
堆疊操作指令 R@ (   -   n1 ) 從回返堆疊複製值。
堆疊操作指令 R> (   -   n1 ) 從回返堆疊取回值。
記憶體操作指令 @ ( addr   -   n ) 取得記憶體中 16 位元內容(飛取)。
記憶體操作指令 C@ ( addr   -   c ) 取得記憶體中 8 位元內容。
記憶體操作指令 ! ( n , addr   -   ) 將 n 存入記憶體。
記憶體操作指令 C! ( c , addr   -   ) 將 c 存入記憶體。
記憶體操作指令 +! ( n , addr   -   ) 將 n 加到記憶體內容。
記憶體操作指令 CMOVE ( addr1 , addr2 , u   -   ) 由 addr1 搬移 u 個字元到 addr2,低效先搬。
記憶體操作指令 CMOVE> ( addr1 , addr2 , u   -   ) 高效位址先搬。
記憶體操作指令 FILL ( addr , u , c   -   ) 從 addr 開始填入 u 個字元為 c。
算術運算操作指令 + ( n1 , n2   -   sum ) 相加。
算術運算操作指令 - ( n1 , n2   -   diff ) 相減。
算術運算操作指令 * ( n1 , n2   -   product ) 相乘。
算術運算操作指令 / ( n1 , n2   -   quotient ) 相除 (餘數捨去)。
算術運算操作指令 MOD ( n1 , n2   -   remainder ) 求餘數。
算術運算操作指令 /MOD ( n1 , n2   -   rem , quot ) 同時求商與餘數。
算術運算操作指令 1+ ( n1   -   n2 ), n2 = n1 + 1。
算術運算操作指令 1- ( n1   -   n2 ), n2 = n1 − 1。
算術運算操作指令 2+ ( n1   -   n2 ), n2 = n1 + 2。
算術運算操作指令 2- ( n1   -   n2 ), n2 = n1 − 2。
算術運算操作指令 2/ ( n1   -   n2 ) 有號數除以 2。
算術運算操作指令 ABS ( n1   -   u1 ) 絕對值。
算術運算操作指令 NEGATE ( n1   -   n2 ), n2 = 0 − n1。
算術運算操作指令 MAX ( n1 , n2   -   maximum ) 較大者。
算術運算操作指令 MIN ( n1 , n2   -   minimum ) 較小者。
算術運算操作指令 UM* ( u1 , u2   -   ud-product ) 無號數相乘。
算術運算操作指令 UM/MOD ( u1 , u2   -   u-rem , u-quo ) 與 /MOD 相似,但為無號數。
算術運算操作指令 D+ ( dn1 , dn2   -   dn-sum ) 雙整數加法。
算術運算操作指令 DNEGATE ( dn1   -   dn2 ) 雙整數負值。
算術運算操作指令 */ ( n1 , n2 , n3   -   quot ) 先乘再除,過度中間為雙整數。
邏輯運算操作指令 AND ( n1 , n2   -   n1 AND n2 ) 位元“且”。
邏輯運算操作指令 OR ( n1 , n2   -   n1 OR n2 ) 位元“或”。
邏輯運算操作指令 XOR ( n1 , n2   -   n1 XOR n2 ) 位元“異或”。
邏輯運算操作指令 NOT ( n1   -   not-n1 ) 位元“非”。
比較運算操作指令 < ( n1 , n2   -   f ) 若 n1 < n2 為真。
比較運算操作指令 > ( n1 , n2   -   f ) 若 n1 > n2 為真。
比較運算操作指令 = ( n1 , n2   -   f ) 若 n1 = n2 為真。
比較運算操作指令 0< ( n   -   f ) 若 n 為負數為真。
比較運算操作指令 0> ( n   -   f ) 若 n 為正數為真。
比較運算操作指令 0= ( n   -   f ) 若 n = 0 為真。
比較運算操作指令 u< ( u1 , u2   -   f ) 無號數比較 u1 < u2 為真。
比較運算操作指令 d< ( d1 , d2   -   f ) 雙字比較 d1 < d2 為真。
流程控制操作指令 QUIT (   -   ) 清除回返堆疊,設定系統為解譯狀態。
流程控制操作指令 ABORT (   -   ) 放棄執行,清除數據堆疊並執行 QUIT。
流程控制操作指令 BEGIN … UNTIL 重複執行 … 直到條件為真。
流程控制操作指令 BEGIN … WHILE … REPEAT 重複 … 若條件為假則執行分支 … 重複。
流程控制操作指令 IF … THEN 若條件為真則執行 THEN 前之部分。
流程控制操作指令 IF … ELSE … THEN 真則執行 IF 部分,否則 ELSE 部分。
流程控制操作指令 DO … LOOP 從起始值到上限重複。
流程控制操作指令 DO … +LOOP 起始到上限,且每次增加指定步長。
流程控制操作指令 LEAVE 離開 DO…LOOP 迴圈。
流程控制操作指令 EXIT 離開定義指令 (不在 DO…LOOP/+LOOP 中)。
流程控制操作指令 I 回傳最內層 DO…LOOP 的指標值。
流程控制操作指令 J 回傳次內層 DO…LOOP 的指標值。
輸入與輸出操作指令 KEY (   -   c ) 從輸入裝置讀取一個 ASCII 值。
輸入與輸出操作指令 EXPECT ( addr , +n   -   ) 讀取 n 個字或直到回車鍵,放入 addr 開始的緩衝區。
輸入與輸出操作指令 SPAN (   -   addr ) 取得最近執行之 EXPECT 的實際字數緩衝位置。
輸入與輸出操作指令 EMIT ( c   -   ) 顯示一個 ASCII 字元。
輸入與輸出操作指令 TYPE ( string   -   ) 顯示字串。
輸入與輸出操作指令 CR (   -   ) 換列。
輸入與輸出操作指令 SPACE (   -   ) 顯示空白。
輸入與輸出操作指令 SPACES ( n   -   ) 顯示 n 個空白。
輸入與輸出操作指令 . ( n   -   ) 顯示 n,有負數時前置負號。
輸入與輸出操作指令 U. ( u   -   ) 顯示無號數 u。
轉換操作指令 BASE (   -   addr ) 基底數存放位址。
轉換操作指令 DECIMAL (   -   ) 設定為十進制基底。
轉換操作指令 PAD (   -   addr ) 臨時緩衝區位址 (至少84字元)。
轉換操作指令 WORD ( c   -   addr ) 從輸入中讀入封包字串,界定字元為 c,或者到字串末尾。
轉換操作指令 COUNT ( addr   -   string ) 非包封字串,長度在 addr,字元從 addr+1 開始。
轉換操作指令 -TRAILING ( string1   -   string2 ) 去掉字串尾部之空白。
轉換操作指令 CONVERT ( +d1 , addr1   -   +d2 , addr2 ) 將字串轉為數字,加到 d1 上,直到遇到非數字字母為止。
數字輸出轉換操作指令 <# ( d1   -   d1 ) 設定轉換開始。
數字輸出轉換操作指令 # ( d1   -   d2 ) 削剖 d1 的一位数字。
數字輸出轉換操作指令 #S ( d1 – 0 , 0 ) 將剩餘所有數位削出。
數字輸出轉換操作指令 HOLD ( d1 , c   -   d1 ) 將字元 c 加到字串中。
數字輸出轉換操作指令 SIGN ( d1   -   d1 , n ) 若 n<0 則加負號到字串前。
數字輸出轉換操作指令 #> ( d1   -   string ) 結束轉換並留下字串。
詞典操作指令 ' name (   -   cfa ) 遞給 name 指令的 cfa。
詞典操作指令 FIND ( addr   -   cfa , f ) 搜尋字典,若找到。
詞典操作指令 EXECUTE ( cfa   -   ) 執行該 cfa 指令。
詞典操作指令 >BODY ( cfa   -   pfa ) 取得 pfa。
詞典操作指令 HERE (   -   addr ) 下一個可用字典位址。
詞典操作指令 ALLOT ( n   -   ) 保留字典空間。
詞典操作指令 , ( n   -   ) 將 n 編譯入字典。
詞典操作指令 FORTH (   -   ) 設為第一搜尋字彙名詞。
詞典操作指令 DEFINITIONS (   -   ) 設定搜尋順序中第一個字彙。
詞典操作指令 FORGET name (   -   ) 刪除 name 與之後的指令定義。
編譯操作指令 STATE (   -   addr ) 表示是否為編譯狀態。
編譯操作指令 [ (   -   ) 設系統為解譯狀態。
編譯操作指令 ] (   -   ) 回復編譯狀態。
編譯操作指令 IMMEDIATE (   -   ) 最近定義指令為立即指令。
編譯操作指令 : name ; 定義新的字彙。
編譯操作指令 CREATE name 建立資料結構名稱。
編譯操作指令 DOES> x1 將指令的後續行為修改為 x1(立即型態)。
編譯操作指令 CONSTANT name 建立一個常數。
編譯操作指令 VARIABLE name 建立一個變數。
編譯操作指令 VOCABULARY name 建立一個詞彙表。
限編譯狀態且立即執行指令 .\" ccc \" 編譯字串 ccc,執行時輸出。
限編譯狀態且立即執行指令 ABORT\" ccc \" 若旗號為真則輸出字串並放棄執行。
限編譯狀態且立即執行指令 LITERAL 將數值編譯入堆疊。
限編譯狀態且立即執行指令 ['] name 將 name 的 cfa 視為數值編譯。
限編譯狀態且立即執行指令 [COMPILE] name 編譯時插入 name 的 cfa。
限編譯狀態且立即執行指令 COMPILE name 在定義中編譯 name 指令。
周邊裝置操作指令 BLOCK ( u   -   addr ) 讀取區塊到緩衝區。
周邊裝置操作指令 BUFFER ( u   -   addr ) 設定緩衝區。
周邊裝置操作指令 UPDATE (   -   ) 標定最近使用區塊以便寫回。
周邊裝置操作指令 SAVE-BUFFERS (   -   ) 寫回所有緩衝區。
周邊裝置操作指令 FLUSH (   -   ) 關閉所有開啟檔案。
周邊裝置操作指令 TIB (   -   addr ) 輸入字串的位址。
周邊裝置操作指令 #TIB (   -   addr ) 最近輸入字元數目位址。
周邊裝置操作指令 BLK (   -   addr ) 輸入區塊位址。
周邊裝置操作指令 >IN (   -   addr ) 輸入偏移位址。
周邊裝置操作指令 LOAD ( u   -   ) 載入區塊 u 並重設輸入來源。

上一篇
如何尋找早期的 DOS 作業系統與應用程式
系列文
F83 經典範例9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言