跳转到内容

User:Arnie97/HP Saturn Intro

计算器百科,非营利的计算器专业知识百科。
Arnie97留言 | 贡献2017年5月30日 (二) 11:37的版本 (User RPL:清理迷之重复)
此用户页面尚未完工。
此用户页面尚未完工。原作者将会继续进行编写,而您也可以对该条目进行编辑

本条目介绍的是 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 / +,其运算过程如下:

RPN运算过程示意图

  • 首先,12、3、4 依次入栈。
  • 输入加号时,由于它是二元运算符,会弹出栈顶的两个数进行运算,并将结果 7 压入栈中。
  • 乘法同样是二元运算,弹出栈顶的 12 和 7 两个数,并将结果 84 返回栈顶。
  • 随后,数字 6 入栈。
  • 之后是减法,取出栈顶的 84 和 6,并返回结果 78。
  • 随后,8 和 4 入栈。
  • 之后是除法,取出栈顶的 8 和 4,并将结果 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 处理器或模拟器上,因此速度是本文提及的所有语言中最慢的。

调用 System RPL

HPGCC

ARM Toolbox

参考文献