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

📄 dat4ary_c.cpp

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

#include "JsGlobal_H.h"
#include "Dat4ary_H.h"

//---------------------------------------------------------------------------
#define IDType(typ)      (((typ)==LB_SEG) ? IDBLK_SEG_OPND : IDBLK_REL_OPND)
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// 进行H3L8处理时,为自己的Fix域创建新对象。
//---------------------------------------------------------------------------
ERR Dat4ary::H3L8Settle(const TriVal& trv, int16u reflc)
{ switch(trv.rel)
  { case 'A': { pool_16 t;
                t.pot16 = (int16u)(trv.val);
                  dat[0] += (int8u)(t.highbyte << 5);      // H3
                  dat[1]  = t.lowbyte;                     // L8
                return OK_no_Err;
              } // end case
    case 'R': { Fix = new OpndFixRec;
                Fix->Set( reflc,
                          RefTyp_INBLK,
                          IDType(trv.typ),      // IDtype()
                          (int16u)trv.val,      // Offset
                          trv.rseg->SegID );    // SegID
                 DebugMsg(Fix->show(););
                return OK_no_Err;
              } // end case
    case 'E': { Fix = new OpndFixRec;
                Fix->Set( reflc,
                          RefTyp_INBLK,
                          IDBLK_EXT_OPND,       // IDBLK_EXT_OPND
                          (int16u)trv.val,      // Offset
                          trv.ExtID );          // ExtID
                 DebugMsg(Fix->show(););
                return OK_no_Err;
              } // end case
    default : { FatalErr(); return Have_Errs; } // end default
  } // end switch
} // end H3L8Settle
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
//     pos=(0~2)
//---------------------------------------------------------------------------
ERR Dat4ary::BytePosSettle(const TriVal& trv, int8u pos, int16u reflc)
{ switch(trv.rel)
  { case 'A': { dat[pos] = (int8u)(trv.val);
                return OK_no_Err;
              } // end case
    case 'R': { Fix = new OpndFixRec;
                Fix->Set( reflc,
                          trv.fix ? trv.fix-1 : RefTyp_BYTE,
                          IDType(trv.typ),       // 宏调用
                          (int16u)trv.val,       // Offset
                          trv.rseg->SegID );     // SegID
                DebugMsg(Fix->show();)
                return OK_no_Err;
              } // end case
    case 'E': { Fix = new OpndFixRec;
                Fix->Set( reflc,
                          RefTyp_BYTE,           // RefTyp_BYTE
                          IDBLK_EXT_OPND,        // IDBLK_EXT_OPND
                          (int16u)trv.val,       // Offset
                          trv.ExtID );           // ExtID
                DebugMsg(Fix->show();)
                return OK_no_Err;
              } // end case
    default : { FatalErr(); return Have_Errs; } // end default
  } // end switch
} // end BytePosSettle
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
//      pos=(0~2)
//---------------------------------------------------------------------------
ERR Dat4ary::WordPosSettle(const TriVal& trv, int8u pos, int16u reflc)
{ switch(trv.rel)
  { case 'A': { pool_16 z;
                z.pot16 = (int16u)trv.val;
                dat[pos]   = z.highbyte;     // 高位在前
                dat[pos+1] = z.lowbyte;      // 低位在后
                return OK_no_Err;
              } // end case
    case 'R': { Fix = new OpndFixRec;
                Fix->Set( reflc,
                          RefTyp_WORD,
                          IDType(trv.typ),
                          (int16u)trv.val,   // Offset
                          trv.rseg->SegID );
                DebugMsg(Fix->show();)
                return OK_no_Err;
              } // end case
    case 'E': { Fix = new OpndFixRec;
                Fix->Set( reflc,
                          RefTyp_WORD,
                          IDBLK_EXT_OPND,
                          (int16u)trv.val,   // Offset
                          trv.ExtID );
                DebugMsg(Fix->show();)
                return OK_no_Err;
              } // end case
    default : { FatalErr(); return Have_Errs; } // end default
  } // end switch
} // end WordPosSettle
//---------------------------------------------------------------------------
#undef IDType(typ)
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
void OpndFixRec::show()const
{ printf("\n --- OpndFixRec show ---");
  printf("\nRefLoc=%4.4XH",RefLoc);
  printf("  RefTyp=");
  switch(RefTyp)
  { case RefTyp_LOW  : printf("LOW");   break;
    case RefTyp_BYTE : printf("BYTE");  break;
    case RefTyp_REL  : printf("REL");   break;
    case RefTyp_HIGH : printf("HIGH");  break;
    case RefTyp_WORD : printf("WORD");  break;
    case RefTyp_INBLK: printf("INBLK"); break;
    case RefTyp_BIT  : printf("BIT");   break;
    case RefTyp_CONV : printf("CONV");  break;
    default          : { EThrows(printf("\nOpndFixRec show out of run!"); Debugkey;) }
  } // end switch

  printf("  Offset=%4.4XH", Offset);
  printf("  rel=");
  switch(rel)
  { case IDBLK_SEG_OPND : printf("IDBLK_SEG_OPND"); break;
    case IDBLK_REL_OPND : printf("IDBLK_REL_OPND"); break;
    case IDBLK_EXT_OPND : printf("IDBLK_EXT_OPND"); break;
    default             : printf(" ??? ");
  } // end switch
  printf("  RefID=%4.4d",RefID);
} // end show
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
void Dat4ary::show()const
{ printf("Dat:[%2.2X-%2.2X-%2.2X-%2.2X]\t",dat[0],dat[1],dat[2],dat[3]);
  if(Fix)
   { Fix->show(); } // endif
  else { printf("Fix=NULL"); } // end else
} // end show
//---------------------------------------------------------------------------

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


⌨️ 快捷键说明

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