页面重新载入中...

如果页面没有重新载入. 请点这里.

Redirecting page to

If the page is not fully redirected. 请点这里.

由一个有一定C++基础的胖子,对web一窍不通的幸酸猥琐的学习过程。
在此,发现C++学的不到家,于是再次踏上C++的钻研之路。同样web 我也会好好钻研

加入
创建人
Opeartors
艾达

关于机器码到汇编的 初级探讨。

   要做一个单片机的8位的 机器码反汇编。发现多年以后很多东西都忘了。

   开始我思考的是,直接给每条指令写一个函数,用map来搜寻,相对应的指令。但是一条指令所执行的机器码有很多种,这样查找就必须用正则匹配后,进行传入参数。

   这时候我又思考,能不能把正则也装入map里面呢?但是这地方我不想做过多的探讨。这条路感觉是设计的邪路。但是这种方式是可以应对16位32 64位的。但是目前这种东西工程浩大。

   然后我就采用另外的一种方式。为什么我不用穷举法,把所有的结果全部装入表中,利用查表进行转换呢?

  8位的单片机,但是他的寻址是0000到FFFF。也就是F*F*F*F 的组合方式,也不多嘛。也就65536种。

  好吧,但是这张表有多大?初始化需要多长时间??于是今晚我又做了测试。我用字符串随机组合了 7万条 key val 表。

 内存占用情况是在15M到30M之间, 是可以接受的范围之内的。初始化的时间在debug下8秒左右。在release版本下,不到1秒、

然后我把这张表,全部遍历查找,每个都进行find(),时间在debug下跑了几分钟没结果。但是release下,3秒便可全部把7万条记录遍历完毕。

最终得出的结果是:这个算法是可行的,速度也比较客观,几乎~~没有等待时间。

 

总结下:这种穷举的方法,不错,而实际算法的时间的计算,不如计算机实际运行算的准确。

 

大体流程如下,初始化的时候,初始化这张表。当然这张表,是可以写入文件中,程序运行时候,可以直接读取文件进行初始化MAP,也可以在内部,用代码,从0XXX到FXXX进行初始化。初始化之后,为此表设计查找函数,并且输出结果。这样核心部分算是完成。

 接下来,可以选择一个UI,MFC即可。用的是VS2013开发,可能运行程序的时候需要安装VC2010运行库,甚至需要VC++2012运行库,这个就得提醒用户打补丁了。也可以,采用较低版本的VS进行编译,舍弃使用C++11代码。今天暂时写到这。

- 0
回复

请登录发表回复。 登陆