使用者:Arnie97/HP Saturn Intro
此用戶頁面尚未完工。原作者將會繼續進行編寫,而您也可以對該條目進行編輯。
本條目介紹的是 HP Apple 39gs 等 Saturn 系列計算器的基礎知識。
Saturn
Saturn 是 HP 於上世紀 80 年代為其計算器開發的一種 4 位微處理器,該處理器有 Bert、Sacajawea、Lewis、Clarke、Yorke、New-Yorke 等子系列。[1]
Apple(Saturn+)系列
在 Saturn 處理器停產後,為了保持與 Saturn 平台原有程序的兼容性,HP 推出了一系列在 ARM 處理器上運行 Saturn 模擬器的計算器,與上面的那些子系列相對,軟體模擬的 Saturn 處理器被稱為 Apple 系列。這些模擬處理器相比之前真實的 Saturn 處理器擁有更多的功能,因此也被稱作 Saturn+。 Apple 系列推出後,39、49 系列的圖形計算器均發布了多款對應的新型號:
| 系列 | 原型號(Yorke 系列處理器) | 新型號(Apple 系列模擬處理器) |
|---|---|---|
| 39 | 39g 40g | 39g+ 39gs 40gs |
| 49 | 49g | 48gII 49g+ 50g |
這些新型號的系統軟體與相對應的原有型號非常相近,只不過系統是運行在模擬器內,而不是運行在真實的 Saturn 處理器上。因此,很多相關的術語保留了下來。
值得注意的是,名為「HP ??gII」的計算器(「?」代指數字)往往與同編號的其他產品大相逕庭,切勿混淆。例如,HP 48gII 不屬於 HP 48 系列,而屬於 HP 49 系列;而 HP 39gII 則不屬於 Saturn 系列產品,而與後期推出的 HP Prime 有幾分相近。
Saturn 彙編語言
無論是原有 Saturn 系列還是 Apple 系列,由於使用了或真或假的 Saturn 處理器,顯然都可以直接使用 Saturn 彙編語言編寫程序。
Saturn 彙編常與編譯型語言 System RPL 共同使用,相關內容詳見下文,在此不再贅述。
RPN
RPN(Reverse Polish Notation,逆波蘭表示法)將運算符置於操作數的後面,因此又稱後綴表示法。與之相對的是絕大多數語言採用的代數表示法(Algebraic Notation,運算符位於操作數之間,又稱中綴表示法)和 Lisp 等語言採用的波蘭表示法(運算符位於操作數之前,又稱前綴表示法)。
| 表達式記法 | 運算符位置 | 示例 | 採用該記法的語言 |
|---|---|---|---|
| 波蘭表示法 | 前綴 | * - 3 4 5 | Scheme,Common Lisp 等 |
| 代數表示法 | 中綴 | (3 - 4) * 5 | C++,Python,TI-Lua,HP Basic 等 |
| 逆波蘭表示法 | 後綴 | 3 4 - 5 * | Forth,System RPL 等 |
逆波蘭表達式的解釋器一般是基於棧(Stack)這一數據結構的。要理解 RPN,最好先理解棧的概念。 RPN 解釋求值的過程一般是:遇到操作數時入棧;遇到運算符時,取對應數量的操作數出棧,求值,將結果入棧;最終棧頂就是表達式的值。
例如,常規中綴記法的 12 * (3 + 4) - 6 + 8 / 2 用 RPN 寫作 12 3 4 + * 6 - 8 2 / +,其運算過程如下:
- 首先,12、3、4 依次入棧。
- 輸入加號時,由於它是二元運算符,會彈出棧頂的兩個數進行運算,並將結果 7 壓入棧中。
- 乘法同樣是二元運算,彈出棧頂的 12 和 7 兩個數,並將結果 84 返回棧頂。
- 隨後,數字 6 入棧。
- 之後是減法,取出棧頂的 84 和 6,並返回結果 78。
- 隨後,8 和 2 入棧。
- 之後是除法,取出棧頂的 8 和 2,並將結果 4 壓入棧中。
- 最後取出 4 和 78 做加法,得到最終結果 82。
RPN 的運算符之間不存在優先級的高低,不需要使用括號來表明運算的優先級,因此能減少輸入部分複雜表達式時按鍵的次數。
例如,常規中綴記法中 3 - 4 * 5 與 (3 - 4) * 5 的意義不相同,需要用括號加以區分;但後綴記法中前者寫做 3 4 5 * - ,後者則寫做 3 4 - 5 * 。
System RPL
System RPL(其中 RPL 指 Reverse Polish Lisp)是 HP 計算器上廣泛使用的一種編譯型語言。顧名思義,該語言中的語句採用逆波蘭表示法。
HP 38、39(40)、48、49(50)等系列的圖形計算器均支持該語言[2],且大部分系統軟體和很多第三方軟體由該語言寫就。HP 38、39(40)、49(50)等新系列計算器的很多第三方應用來源於對 HP 48 等早期系列中 System RPL 應用的移植和重新編譯。
作為一種貼近底層的編譯型系統程式語言,System RPL 常與 Saturn 彙編共同使用,這與 PC 平台上的 C 語言和 x86 彙編語言有著相通之處。這兩種語言可以用 PC 上的 HP Tools 開發。此外,HP 49、50 等系列的計算器內置了 MASD,可以直接在計算器上進行編譯、彙編、調試操作。注意 HP Tools 和 MASD 均是編譯器本身,並不包含頭文件(Entry Points,或簡稱 Entries),如果不希望手動聲明系統提供的函數,需要自行下載頭文件,其中的原理與 C 語言是相通的。HP 28、38、39(40)、48、49(50)系列的頭文件互不相同,下載時需根據所針對的機型正確選擇。
Library
Aplet
User RPL
User RPL 是 HP RPN 計算器上的一種解釋型語言。顧名思義,該語言同樣採用逆波蘭表示法。
HP 28、48、49(50)等系列的計算器支持該語言代碼的運行。如果在設置中選擇 RPN 輸入模式,那麼用戶在計算界面中輸入的有效指令實際上均可以視為合法的 User RPL 代碼。
與 System RPL 的關係
User RPL 的語法和 System RPL 相近,但代碼可以直接在計算器上運行而不需要編譯。運行時發生的大部分錯誤會被正確捕獲,且部分較為危險的底層命令無法直接使用。這些特性使得 User RPL 的編寫和調試更方便和安全,但也使它的運行速度較 System RPL 緩慢,在需要對系統底層進行操控及性能因素至關重要的場合(如某些遊戲)應當選擇 System RPL。
User RPL 能通過多種方式調用 System RPL 特有的函數,相關內容併入下文 HP Basic 的相關章節,在此不再贅述。
在 HP 49(50)系列計算器內置的文件管理器(Filer)中,User RPL 代碼的文件類型為 PROG,System RPL 源碼的類型為普通字符串 STRNG,而 System RPL 編譯出的二進制對象類型為 CODE。
HP Basic
HP Basic 是 HP 38、39(40)系列計算器的解釋型語言,其定位與 HP 48、49(50)系列中的 User RPL 相似——用戶在 HOME 界面中輸入的有效指令均為合法的 HP Basic 代碼。由於該語言的代碼通過解釋器執行,且解釋器本身又運行在 Saturn 處理器或模擬器上,因此速度是本文提及的所有語言中最慢的。