📄 jlabelnode_c.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 + -