网页资讯贴吧知道视频音乐图片地图文库
进入贴吧全吧搜索吧内搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月24日漏签0天
fx-es(ms)吧 关注:13,827贴子:266,360
  • 看贴

  • 图片

  • 精品

  • 视频

  • 游戏

  • 1 2 3 下一页 尾页
  • 65回复贴,共3页
  • ,跳到 页  
<<返回fx-es(ms)吧
>0< 加载中...

【技术】内部数值存储研究

  • 只看楼主
  • 收藏

  • 回复
  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
字符表镇楼:


帖子会在接下来的几天内慢慢继续更新,请各位别着急。


  • 突发规划
  • TI-84+CE
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一个有姿势的二楼


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
@骆奕扬 曾经说过楼主善于利用M值。并且发明了魔数法来辅助拼字。下面来谈谈这样的数是怎么构造出来的。


楼楼的技术比不上本吧各位大神。吧内也有其他谈内部数值存储的帖子。但是我希望我这篇帖子更清晰。


  • 突发规划
  • TI-84+CE
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
插


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
此帖子以 fx-991ES PLUS 为参考型号。因为楼楼用的就是这个型号。


一、有哪些数值存储方式


根据目前的研究,991+一共有浮点、分数、根式、复数、指针、特殊值这五种存储方式。


浮点:±a×10^n 其中 0≤a<10 -99≤n≤99。
分数:±a/b 其中a和b以十进制表示的位数之和不超过9。
根式:±(a√(b)+c√(d))/e 目前楼主对于 a b c d e 的取值范围不太了解。但是 a b c d e 都可以取 0 或者 1。
复数:±a×10^n±b×10^mi 其中 0≤(a,b)<10 -99≤(n,m)≤99。
指针:目前已知 MatA/VctA (0x60) MatB/VctB (0x61) MatC (0x62) MatAns/VctAns (0x63)。
特殊值:目前已知 ERROR (0xF3)。


  • 402zhouxuefeng
  • 5800P
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶


  • linym66
  • TI-84+
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
插


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
二、变量存在哪?


目前发现变量 M Ans A B C D E F X Y 是依次存储的,每一个变量占用10字节。
M 的存储位置是基本溢出缓冲区便宜量 +0xCA。也就是紧挨着随机数种子(即不稳定字符,占2字节)存储的。
变量的很多存储方式是用 BCD 码来存储。也就是说这一系列计算器的计算实际上是用十进制的,而不是二进制。这也是为什么这一系列计算器在做大量运算的时候比较慢,但是却不会产生类似计算机 IEEE 浮点数在做二进制运算的时候产生的误差。
复数的实部存储在我所说的地方,而虚部存储在另外的地方,也是各占用10字节(这可以从 CMPLX 溢出模式的种种异常现象研究出来,参考楼主的《【991+】A^0法溢出r!比M^0法节省57%按键次数!》)。这片存储区域在退出 CMPLX 的时候可能会被别的模式的存储区域复写。
矩阵和向量的内容也是存储在另外的地方的,并且那地方和 COMP 模式的历史记录缓冲区貌似共用内存(在 COMP 模式爆出矩阵后输入很长的算式按等号会导致矩阵内容爆出 ERROR,参考楼主的《【991+】不进乱点模式爆矩阵!》)。这片存储区域在退出 MATRIX 的时候会把 MatA/VctA MatB/VctB MatC 清零,但是 MatAns/VctAns 不清,在进入别的模式的时候可能会被覆盖。


  • 突发规划
  • TI-84+CE
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
插


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
(顺便提一下)为什么计算器要分模式?


计算器分模式可不是为了在卖的时候能够体现出自己功能多,而是为了节省内存,同时可以实现开关不同的模式来实现同一个固件在不同型号计算器下有不同的功能(这也是为什么会有软升级)。
其实,如果不分模式,COMP CMPLX BASE-N 等模式是可以挤在一起的。MATRIX VECTOR 也是可以的。STAT TABLE 就更不用说了。但是众所周知,计算器的内存很有限。这么多功能,全部载入 RAM 中是不可能的。于是就采用了当年 MS-DOS 应用程序采用的一个技术——Overlay。也就是不同的模式共用一块内存。载入新模式的时候覆盖旧的内存。
分模式也有利于降低开发难度,减少 bug。多种型号的硬件共用同一个固件并打开不同的模式也可以降低开发成本(程序员的工资比流水线工人的工资高啊)。


如何利用这种功能?
我们在某些特定的溢出状态下,需要了解哪些内容共用一块内存来构造合适的数值进行下一步操作。类似于攻击计算机操作系统,需要对内存布局和内核架构有一定了解,研究计算器的异常也需要对内存有一定了解。对于 82ES 等型号,官方公布了模拟器,可以用模拟器配合 WinHex 来研究;而对于 991ES PLUS 等型号,只有摸黑试了,楼主在 1L 的字符表正是用刷不稳定字符的方法得到的。


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
三、白值是怎么回事?


白值不仅仅是一种情况。只要是无法显示的数值都可能变成白值/ERROR/死机。当然 ERROR 也可以是计算器预料之中的 0xF3 特殊值。
比如 5L 说到浮点 ±a×10^n 的取值范围是 0≤a<10 -99≤n≤99。如果 a 不满足这个取值范围,则会导致白值。如果 n 不满足,可能会被截头或溢出或死机。


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
下面一帖说浮点的存储。楼楼先慢慢码字,你们随便插楼,今天如果码好了就今天发,如果今天没有码好就明天发。


  • 突发规划
  • TI-84+CE
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
插


  • 361187493
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
ls插了四次了


  • Fin2014unique
  • 5800P
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
技术贴


扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 下一页 尾页
  • 65回复贴,共3页
  • ,跳到 页  
<<返回fx-es(ms)吧
分享到:
©2021 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示