在ES PLUS系列计算器上实现“编程”——(六)基本工作原理

前言

CASIO考虑到用户的主要群体,将计算器内部的工作原理包装了起来。为了实现后文中所述的所谓ROP。只是了解CASIO想让我们知道的使用方法显然不够,我们还要探寻习以为常的平常使用下,到底隐藏了什么秘密。大致了解在简单的操作下,计算器到底做了些什么。

基础知识及名词解释

输入区

顾名思义,输入区就是我们当前正在输入的式子的缓存区。当我们在屏幕上打出数字或运算符(统称为符号(Symbol),说明书中称之为字符)时,计算器将这些符号以字节的形式存储在输入区内,按照下表(又称符号表(Symbol Table),建议打印或抄写一份)翻译(适用于991ES PLUS,82ES PLUS A的字符表与之类似,仅有少数不同,已用 / 标出。纵行低位相同,横行高位相同):

0 1 2 3 4 5 6 7 8 9 A B C D E F
0 (NUL) mᴘ mₙ me a₀ h μɴ μʙ α re λc γᴘ λcp λcn
1 Σx² Σx n Σy² Σy Σxy Σx³ Σx²y Σx⁴ minX maxX minY maxY R∞ u μᴘ
2 空格/AtWt μe μₙ μµ % F e ( ) Nᴀ + , . @
3 0 1 2 3 4 5 6 7 8 9 : k < = > @/RndFix(
4 Vm A B C D E F →A →B →C →D →M →X →Y × ÷
5 h d o b M ▶a+b𝐢 ▶r∠θ ! X Y @/Ref( [/Rref( ]/Π( ^( ÷R
6 (-) Not( Neg( Abs( ẋ₁ ŷ ẋ₂ log( Σ( ∫( d/dx( Pol( Rec( and or
7 sinh( cosh( tanh( 𝐞^( ×⏨ ² ³ R c₀ c₁ {/Int( @ }/Intg( xor xnor
8 𝐢 𝐞 π →E →F ° ʳ Conjg( ȳ Ans Ran# @/Q1 @/Q3 @/med
9 sinh⁻( cosh⁻( tanh⁻( ⏨^( @/▶Simp √( M+ ʙ r ˣ√(
A sin( cos( tan( ln( @ ▶Conv @/GCD( @/LCM( ³√( M— σx sx σy sy
B sin⁻( cos⁻( tan⁻( Rnd( c₂ σ ε₀ μ₀ 𝐀 𝐁 𝐂 𝐃 𝐄 𝐅 𝐏 𝐂
C det( Trn( RanInt#( arg( ϕ₀ g G₀ Z₀ MatA MatB MatC MatAns VctA VctB VctC VctAns
D P( Q( R( ▶t t G atm in▶cm cm▶in ft▶m m▶ft yd▶m m▶yd mile▶km km▶mile n mile▶m
E m▶n mile acre▶m² m²▶acre gal(US)▶ℓ ℓ▶gal(US) gal(UK)▶ℓ ℓ▶gal(UK) pc▶km km▶pc km/h▶m/s m/s▶km/h oz▶g g▶oz lb▶kg kg▶lb atm▶Pa
F Pa▶atm mmHg▶Pa Pa▶mmHg hp▶kW kW▶hp kgf/cm²▶Pa Pa▶kgf/cm² kgf⋅m▶J J▶kgf⋅m lbf/in²▶kPa kPa▶lbf/in² °F▶°C °C▶°F J▶cal cal▶J @

当显示模式为LineIO时,输入的式子与内存中十六进制形式严格按照此表对应;MthIO下,若未输入带框的字符(绝对值、根号等),也按照此表对应;若式子中存在带框字符,则情况较为复杂,这里不讨论。
例如这串大家熟知的算式:


示例1

在内存中形式如下:


示例2

读者可以参照上表进行检查,易发现内存中该式子的存储形式与上表完全一致。
该区域的内容会在按下AC或on、切换模式等诸多情况下清空。

缓存区

该区域存储上一个运算式子(无论有无出现错误),当输入区内容为空时,按下方向键左或右,计算器会将缓存区的内容复制到输入区,以实现运算式子的快速修改。(注意,缓存区与计算历史记录完全不同,不可混为一谈)

计算历史记录

在COMP、CMPLX或BASE-N模式下,计算器会将每一次成功的运算存储到计算历史记录中,在输入区为空的情况下可以进行回溯和调出。具体方式会另行说明,对于我们的目标而言不是必修内容。

字符表(Font Table)

字符表需要与符号表区分开。字符表指的是计算器的字体表。ES PLUS系列计算器的字符表与ASCII码表类似,是ASCII码表的扩充版本。如果有兴趣的话可以在学会ROP后自行提取完整的字符表。对于大多数用途而言,字符表中与ASCII码表中相同的部分已经足够,没有必要提取完整的字符表。

光标位置(Cursor Position)

这同样是一个存在严重歧义的概念。在MthIO或LineIO的插入模式下,光标表现得与记事本中光标类似,看起来好像处于两个符号之间。但是,我们很容易想到,计算器在存储光标位置时,应当存储的是字符的位置,而不是某两个字符之间(内存中不存在两个单元之间的概念)。在LineIO下按下INS(SHIFT+DEL)键,可进入插入模式。此时可以明显发现,光标的实际位置位于原来竖着的光标的后面的符号处,而不是惯常认为的两个字符之间。我们需要统一称呼,当我们说到光标的位置时,我们指的就是闪烁的光标后面的符号的位置。同时,鉴于“光标之后”这一充满歧义的说法已经十分普遍,我们规定所谓“光标之后”,指的就是光标本身所处的位置。例如:

示例

可见光标位于4、5之间,我们命名这个位置为位置4(第一个位置命名为位置0),位置4的符号是5。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。