MPLAB X IDE -1:如何反汇编PIC的二进制代码

2019-04-15 11:52发布

步骤: 1 准备好需要反汇编的代码文件.hex ; 2 File --> Import-->Hex File ; 3 按下图填好; 4 点击Finish; 5 选择Production-->Set Configuration Bits后,就会弹出下图;然后在红 {MOD}圈处就可以选择Program Memory 6 在下图红 {MOD}圈处选择Code后即出现Disassembly Code   二 程序 1 最初的程序: #include void delay(long i); void main(void)
{
     __CONFIG(OSC_IntRC&WDT_OFF&CP_OFF&MCLRE_ON); 
  
     OPTION  = 0x40;      //关闭内部上拉
     TRIS        = 00001001;      //GPIO1、GPIO2输出;GPIO0、 GPIO3输入;高四位不可修改,默认为0
     OSCCAL  = 0x00;    // 内部时钟校正参数
     GP2 = 1;
     GP1 = 0;
     delay(25000); //延时800ms
     GP1 = 1;
     delay(2500);//延时ms
     GP2 =0;
     //while((GP1==1)&&(GP2==0)) //保持
     while(1)
   {
       GP1=1;
       GP2=0;
   }
            
}
   
   void  delay(long i)
   {
       
       while(i)
           i--;
   }
   需注意: 1 delay函数中的i不要设为int型,因为int的最大值为32767,如果你延时很长的话会超过32767的,程序就会出问题; 2 如果开了看门狗(WDT),就要记得喂狗即CLRWDT;我最开始的程序开了WDT,但是并没有CLRWDT。就导致GP2在输出时总是输出方波,跟我要的不一样。 三 问题: 1 为什么这段C代码用MPLAB转成汇编之后最后一行不是: 256  FF      C14     MOVLW 0x14  而是: 256  FF      FFF     XORLW 0xFF 用HI TECH PICC v9.82和XC8编译出来的结果都是这样的。 2 为什么单测这个芯片,在掉电时GP1 GP2 的电平会翻转?上电后在很短时间内就掉电不会翻转,但是上电后过一段时间再掉电,二者的电平就会翻转 四 程序结论: 1 时钟校正参数是必须要写的,否则GP2一直输出方波,GP1一直是高电平; 2 若用C语言来写,则OSCCAL  = 0x00;这句写在程序开头都可以。虽然译成汇编之后最后一行不是Cxx(MOVLW 0x xx),但是从示波器上观察到的结果来看,这样是可行的。