2012年5月4日 星期五

JForthBlocks- 操作回返堆疊 >r , r> 與r@積木的用法

Jimmy's papa今天學習如何使用>r,r> 與r@三塊積木,操作回返堆疊

回返堆疊(return stack),簡而言之,當Forth執行某個高階積木A時,中途需分心執行另一高階積木B,此時Forth會將此高階積木A目前執行的位置,擱置(暫存)於回返堆疊(return stack),等待高階積木B執行完畢之後再行取回,繼續執行此高階積木A尚未完成的工作

Forth程式設計師為了簡化資料堆疊(data stack)的操作,有時會在不影響回返堆疊(return stack)正常運作的情況下,暫時將資料移至回返堆疊(return stack),然後盡快將回返堆疊(return stack)的資料移回資料堆疊(data stack)

以下是操作回返堆疊相關積木說明
>r ( n -- ) \ 取出資料堆疊(data stack)頂端之數,將它移到回返堆疊(return stack)的頂端
r> ( -- n ) \ 取出回返堆疊(return stack)頂端之數,將它放回資料堆疊(data stack)的頂端
r@ ( -- n ) \ 複製回返堆疊(return stack)頂端之數,放到資料堆疊(data stack)的頂端

需注意
1. 在編譯模式下才能使用
2. >r 與 r>必須要成對的使用

JForthBlocks的Stack目錄可找到>r,r> 與r@三塊積木
寄件者 scratchlab02


在資料堆疊(data stack)先推入數值1,2,3
然後將3移到回返堆疊(return stack)的頂端
寄件者 scratchlab02
哇咧!執行結果告知 >r 只能在編譯模式下才能使用
寄件者 scratchlab02


於是Jimmy's papa,在Compile目錄找到這兩個積木
寄件者 scratchlab02


重新組裝後執行
寄件者 scratchlab02


執行結果告知有error,回返堆疊(return stack)是有借有還再借不難,可不是雜物堆哩!!!
寄件者 scratchlab02


再用 r> 試試看從回返堆疊(return stack)取值
寄件者 scratchlab02


順便加個 .s 積木,了解一下資料堆疊(data stack)狀況
寄件者 scratchlab02


結果資料堆疊(data stack)頂端多了個不明資料
寄件者 scratchlab02


將 >r 與 r>成對擺放試試看
寄件者 scratchlab02


嘿嘿,做虛工,資料堆疊(data stack)狀況不變
寄件者 scratchlab02


夾帶一個 r@ 積木看看
寄件者 scratchlab02


嘿嘿,資料堆疊(data stack)頂上多個3
寄件者 scratchlab02


試試看倒轉資料堆疊(data stack)數值1,2,3的順序
寄件者 scratchlab02


OK!成功
寄件者 scratchlab02

沒有留言:

張貼留言