⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genabs.c

📁 一個單晶片8051模擬軟體,可以查看模擬的內部外部RAM資料及暫存器資料,並設置斷點 windows 平台下執行
💻 C
字号:
//
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//
typedef unsigned int   BOOL;
#define FALSE 0
#define TRUE  1
//
#define IS_STR(cp,str)   (memicmp(cp,str,sizeof(str)-1)==0)
//
BOOL ParseForOffset(FILE*fpX,char*name,int*offPtr){
   fseek(fpX,0,0);
   for(;;){
      char ibuf[256];
      if(fgets(ibuf,256,fpX) == 0)break;
      if(strchr(ibuf,'\n')!=0)*strchr(ibuf,'\n')=0;
      if(strchr(ibuf,'\r')!=0)*strchr(ibuf,'\r')=0;
      if(strlen(ibuf) > 53){
         if(memcmp(ibuf,"            CODE    ",20)==0){     // only code segments of interest!
            if(stricmp(ibuf+53,name)==0){
               *offPtr = strtol(ibuf+20,0,16);
               return TRUE;}}}}
   return FALSE;}
//
void process(FILE*fpX){
   //
   char aa[1024],*ap;
   BOOL segmentFound=FALSE;
   int  offset = 0;
   int  val;

   //
   while(gets(aa) != 0){    // to end-of-file
      // check for segment start
      if(IS_STR(aa,"----")){     // new Segment
         char*ap=aa+29;          // skip line #
         offset = 0;
         //
         while(*ap==' ')ap++;    // skip spaces
         //
         if(IS_STR(ap,"rseg")){
            char name[128],*aq;
            int len;
            ap += 4;             // skip "rseg"
            //
            while(*ap==' ')ap++; // skip spaces
            //
            aq = ap;
            while(*aq>' ')aq++;  // find space or eol
            //
            len = aq-ap;
            memcpy(name,ap,len); name[len]=0;
            segmentFound = ParseForOffset(fpX,name,&offset);}
         else if(IS_STR(ap,"cseg")){
            segmentFound = TRUE;
            offset = 0;}}
      //
      // replace address by address + segment_base?
      //
      if(offset != 0
        && aa[0] > ' '
        && ((val = strtol(aa,&ap,16)),ap == aa+4)
        && aa[4] == ' '){
         sprintf(aa,"%04x",offset + val);
         aa[4] = ' ';}  // remove the null
      if(segmentFound)puts(aa);}}
//
int main(int nargs,char**argpp){  int rv=0;
   if(nargs!=2){
      fprintf(stderr,"usage:  genabs xx.m51 <yy.lst >zz.l\n"); rv=3;}
   else {  
      FILE*fpX=fopen(argpp[1],"rb");
      if(fpX==0){
         fprintf(stderr,"Can't open  %s\n",argpp[1]); return -1;}
      process(fpX);
      fclose(fpX);}
   return(rv);}
//------------------------------------//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -