登录|立即注册|使用QQ帐号登录
论坛 > 24小时必答区
发帖|
看2414|回5|收藏
楼主 ID:399501 只看他
2021-7-20 18:03
请教一下各位大佬,我使用MPLAB X IDE反编译了PIC16F636的代码,我大概看了一下,除了一些寄存器不在BANK0中,反编译出来的寄存器变到了BANK0相对应地址的寄存器,其他的逻辑应该正确。但是有一段代码感觉没有被调用到,就有些疑惑。首先,MPLAB X IDE反编译的正确率如何?其次,hex文件中会包含无效代码吗?
沙发 ID:401564 只看他
2021-7-21 00:13
STATUS 寄存器的 RP<1:0> 为存储区选择位:这个很重要的!
它决定了你操作的是哪个BANK,并不是你看到操作了06H它就是操作了PORTB 的,它还要看两个RP位才能知道它操作的是哪个BANK的
板凳 ID:399501 只看他
2021-7-21 08:36
是的,我知道,因为用X IDE编译出来的直接是个寄存器而不是一个地址。所以我才说有点错误,不然地址还是相对应的
地板 ID:399501 只看他
2021-7-21 11:08
使用反编译的代码,添加了几句不被调用的代码,编译后再次反编译,不被调用的代码依旧存在,代码与原代码基本一致
5# ID:401564 只看他
2021-7-21 17:21

引用:

HISAUC 发表于 2021-7-21 11:08
使用反编译的代码,添加了几句不被调用的代码,编译后再次反编译,不被调用的代码依旧存在,代码与原代码基 ...

编译器把C编译成汇编,有时候是会一些无用的代码,要不然,就不会有"C的效率"这一说法了,所以,有的外部器件会在数据手册中推荐用汇编写读写程序,
像Keil C51中的位移,实际上并没有位移,它是通过加法实现的
有的人会觉得a=a<<8要比a=a*256好,实际上它们是一样的,都是通过加法实现的

但是,编译器不会有错误的,或者是说极少极少,特别是PIC16F系列,几乎是不会有错误的,PIC16F没有自家的编译器,都是其它厂商做的编译器,以前有比较多,最后就剩下那几效率高的,不行的,基本被淘汰了

你想学反汇编,汇编一定要玩得6,一定不能仿真!没有烧录个上千次的,你PIC汇编是玩不好的
6# ID:123289 只看他
2021-7-22 09:44
赞同5#的说法。
要想反编译,你的汇编必需强。

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版