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

📄 jlabelnode_c.cpp

📁 MCS51单片机的宏汇编器源程序。有需要的朋友请下载!
💻 CPP
字号:
//---------------------------------------------------------------------------
//   JLabelNode_C.cpp 
//---------------------------------------------------------------------------
#include "JLabelNode_H.h"
#include "JLabelNode_H.h"
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
//
//  函数实现
//
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// Name 和 next 不复制。
//---------------------------------------------------------------------------
void JLabelNode::CopyFrom(const JLabelNode& src)
{  TpInfo = src.TpInfo;         // 8-bit
    ExtID = src.ExtID;          //
    LnPt  = src.LnPt;
    Attrb = src.Attrb;
    Value = src.Value;          // 一个32位有符号的数值。
    ExpPt = src.ExpPt;
   RefSeg = src.RefSeg;         // 如果是相对值,指向参照段。
} // end CopyFrom
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
const char* JLabelNode::LabelTypeStr()
{ switch(vv.LBLTyp)
  { case LB_NUM  : return("N NUMB");
    case LB_DATA : return("D ADDR");
    case LB_CODE : return("C ADDR");
    case LB_BIT  : return("B ADDR");
    case LB_IDATA: return("I ADDR");
    case LB_XDATA: return("X ADDR");
    case LB_SEG  : return("  SEG ");
    case LB_REG  :
      { switch( (int16u)Value )
        { case _R0  : return("  R0  ");
          case _R1  : return("  R1  ");
          case _R2  : return("  R2  ");
          case _R3  : return("  R3  ");
          case _R4  : return("  R4  ");
          case _R5  : return("  R5  ");
          case _R6  : return("  R6  ");
          case _R7  : return("  R7  ");
          case _A   : return("  A   ");
          case _DPTR: return("  DPTR");
          case _PC  : return("  PC  ");
          case _AB  : return("  AB  ");
          case _C   : return("  C   ");
          default   : return("  ??? ");
        } // end switch
      } // end case LB_REG 
    default      : return("  ??? ");
  } // end switch
} // end LabelTypeStr
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
void JLabelNode::Show()const
{ //if(!CrLineno) { return; } // endif

  // Name......
  printf("\n%s\t",(const char*)LName); gotoxy(15,wherey());
  // Label type
  switch(vv.LBLTyp)
  { case LB_NUM  : printf("N NUMB"); break;
    case LB_DATA : printf("D ADDR"); break;
    case LB_CODE : printf("C ADDR"); break;
    case LB_BIT  : printf("B ADDR"); break;
    case LB_IDATA: printf("I ADDR"); break;
    case LB_XDATA: printf("X ADDR"); break;
    case LB_REG  : printf("  REG  ");break;
    case LB_SEG  : { switch(RefSeg->GetSegType())
                     { case LB_CODE : printf("C "); break;
                       case LB_XDATA: printf("X "); break;
                       case LB_DATA : printf("D "); break;
                       case LB_IDATA: printf("I "); break;
                       case LB_BIT  : printf("B "); break;
                       default      : printf("? ");
                     } // end switch
                     printf("SEG ");
                     printf(" [%4.4XH] ",RefSeg->SegSize);
                     break;
                   } // end case
    default  : printf(" ???  ");
  } // end switch

  // Value
  if(vv.ValOk && vv.LBLTyp != LB_SEG)
   { if(vv.LBLTyp == LB_REG)
      { switch( (int16u)Value )
        { case _R0 : printf("  R0    "); break;
          case _R1 : printf("  R1    "); break;
          case _R2 : printf("  R2    "); break;
          case _R3 : printf("  R3    "); break;
          case _R4 : printf("  R4    "); break;
          case _R5 : printf("  R5    "); break;
          case _R6 : printf("  R6    "); break;
          case _R7 : printf("  R7    "); break;
          case _A  : printf("  A     "); break;
          case _DPTR:printf("  DPTR  "); break;
          case _PC : printf("  PC    "); break;
          case _AB : printf("  AB    "); break;
          case _C  : printf("  C     "); break;
          default  : printf("  ???   ");
        } // end switch
      } // endif
     else
      { if(Attrb == 'E') {     printf("  -----  ");  //  printf("  %4.4XH  ",Value);
                         } // endif
        else { printf("  %4.4XH  ",Value); }      // end else
      } // end else
   } // endif
  else
   { if(vv.LBLTyp != LB_SEG) {    printf("  -----  "); // printf("  %4.4XH  ",Value);
                          } // endif
     //  LBLTyp == LB_SEG, do nothing
   } // end else

  putchar(Attrb);          // 'A', 'R', 'E'

  if(LnPt)     // 创建该标号的行号。
   { printf(" Cr[%4.4d]", LnPt->GetLineNo()); } // endif
  else
   { printf("  ------ "); } // end else

  switch(Attrb)
  { case 'A' :  // break;
    case 'R' : printf("  rel=%s",(RefSeg)?((const char*)RefSeg->Name):"NULL"); break;
    case 'E' : printf("  EXT[%4.4d]",ExtID); break;
    default  : printf(" ? Unknown label type...");
  } // end switch

  printf("  %s", vv.Variable   ?"Var":"");  // 如果是变量,它为true。
  printf("  %s", vv.Publicable ?"PUB":""); // 如果是Public,它为true。
  printf("  %s", vv.Indirect   ?"Indt":""); // 如果是Indirect,它为true。
  printf("  %s", vv.ValOk      ?"":"NOTOK");  // 如果是ValOk,它为true。
} // end Show
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// end JLabelNode_C.cpp
//---------------------------------------------------------------------------
//               Written by JamesyFront.    ZLGmcu Dev.Co.Ltd.  2002.
//---------------------------------------------------------------------------


⌨️ 快捷键说明

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