|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
這是我寫的PIC系列反匯編程序原碼,認為好的話頂一頂!在vc通過 |
| 作者:xq001 欄目:單片機 |
用C語言產(chǎn)生BIN文件,再用這文件反匯編,再編譯就能仿真,這是我自用程序,給大家看看.只能學習,不能商用! #include <stdio.h> #define BL 25 // length of LINE buffer #define NL '\n' #define CR '\r' #define TAB '\t' #define FORMFEED '\f' #define MODE_BYTE 0 #define MODE_ADDX 1 #define LINE_BUFF_SIZE 8097 #define ERROR_LIST_SIZE 100 main (int argc, CHAR *argv[]) //main () { // Vars and etc FILE *fp, *fopen(), *fp_opcode, *exec_file, *list_fp; int fclose(),c,tt; unsigned CHAR *c_buffer,d,*file_NAME, *c_code, *binary_NAME, *list_file, *unasm_NAME; unsigned CHAR *str_label1, *LINE_lab; unsigned int result_buffer[BL]; int source_LINE_count,i,j,c_code_ptr,k; int LINE_start,LINE_end; CHAR LINE_buff[LINE_BUFF_SIZE],LINE_buffh[LINE_BUFF_SIZE],LINE_buffl[LINE_BUFF_SIZE],ca,cb,cc,cd,ce,cf; if(argc<3) { printf("MICROCHIP unasm PIC12Cxx;PIC16C5X;PIC16C6X;PIC16C7X;PIC16C8X...\n"); printf("Usage:\n"); printf("dpic [binaryfile] [unasmfile] \n"); printf("where:\n"); printf("binaryfile = unassembler file NAME\n"); printf("unasmfile = the assembler code file\n"); exit(-1); } if( (fp=fopen(argv[1],"rb+")) == NULL ) { printf("error opening source file\n"); exit(-1); } // Open the listing file if( (list_fp=fopen(argv[2],"w+")) == NULL ) { printf("error opening unassembler file\n"); exit(-1); } rewind(fp); // reset source file pointer to beginning LINE_end = -1; // initial VALUE of LINE_end for(j=0;j<LINE_BUFF_SIZE;j++) { LINE_buffh[j]=NULL; LINE_buffl[j]=NULL; } j=0; while( (c=fgetc(fp)) != EOF ) { LINE_buffh[j]=c; // copy CHARs into LINE buffer if ((c=fgetc(fp))!=EOF) LINE_buffl[j]=c; j++; source_LINE_count = j ; } fprintf(list_fp,";*****************************************************************\n"); fprintf(list_fp,";* *\n"); fprintf(list_fp,";* Unasm programmer write by XiaoQiang *\n"); fprintf(list_fp,";* *\n"); fprintf(list_fp,";*****************************************************************\n\n"); fprintf(list_fp,"; Total LINE count in source file= %d\n",source_LINE_count); fprintf(list_fp,"; Please check GOTO & CALL instruct address \n\n"); j=0; for(i=0;i<source_LINE_count;i++) { if (LINE_buffl[i]>0x0f) { fprintf(list_fp,"\n\t LIST P=PIC16CXX\n\n"); j=1; break; } else { if (i==(source_LINE_count-1)) { fprintf(list_fp,"\n\t LIST P=PIC16C5X\n\n"); j=0; break; } } } for (i=0;i<source_LINE_count;i++) { fprintf(list_fp,"L%d:\t",i); if (j == 0) { SWITCH (LINE_buffl[i]) { case (0x00 ): { SWITCH (LINE_buffh[i]&0xC0) { case (0X00 ): |
| 2樓: | >>參與討論 |
| 作者: fxmxh 于 2004/3/6 22:03:00 發(fā)布:
MPLAB自帶反匯編的啊 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |