已知异常变量会修改历史记录,其原理值得探讨。
单字节变量
字符表,广义上的单字节变量都在第4行https://blog.csdn.net/weixin_67572129/article/details/142435047#t0不出意外,变量存储一个数值。其他模式存储变量的位置上,复数模式时存储实部。每个变量存为10个字节。正常只会用到前10个变量,计算器为前12个变量留了位置,后4个@与下文的历史记录重叠。
复位?存储器
清除所有存储器的内容
即使您按AC、更改计算模式或关闭计算器的电源, Ans存储器、独立存储器和变量内容仍将保留。如果需要清除所有存储器的内容,请执行以下步骤。SHIFT+9(复位)+2(存储器)+等于(是)
——说明书第25页
在执行此操作时,会且仅会将前10个变量设为0,不会影响后面的PreAns或@或4个@。
变量的开机检查
如果以上步骤均无法更正问题,请按[开机]键。这会使计算器执行例行检查,检查计算功能是否操作正确。如果计算器发现任何异常,那么它会自动初始化计算模式,并清除存储器内容。
——说明书第61页
在开机时,会检查前10个变量,看看它区域二的第一个字节是否是个合法的十进制、区域四是否以0开头。如果有的变量不满足,那么会进行极高等级的初始化,与自检等级相同,自然也会“初始化计算模式,并清除存储器内容”。
历史记录
在12个变量后,紧接着历史记录。历史记录区总长200个字节,较新的历史记录存在较后面。
每条历史记录按以下方式存储:
- 三个字节,表示这条的存储格式。
- 例如:是否有虚部、Pol、Rec等
- 10~20个字节,1~2个数值,表示这条的答案。
- 两个数值是复数模式下有虚部、或Pol、Rec、÷R等产生的
- 在复数模式下答案有虚部时产生的2个数值时,先存实部、后存虚部
- 两个数值是复数模式下有虚部、或Pol、Rec、÷R等产生的
- 长度不定,以字节23结尾,表示这条的算式。
- 如果在读到字节23之前读到了字节00,那么认为这不是一条历史记录,即前一条是最后一条历史记录。
据说,是因为字符23冒号不会出现在历史记录中,编程时就把字节23设为算式终止符。但是,可以直接打出的字符FE23似乎却被遗忘了,由此产生了一个著名的bug:字符转换器。