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

📄 asml_h.h

📁 MCS51单片机的宏汇编器源程序。有需要的朋友请下载!
💻 H
字号:
//---------------------------------------------------------------------------
//-------- AsmL_H.h ---------------------------------------------------------
//---------------------------------------------------------------------------
#ifndef	AsmL_H.h  // 防止被重复引用
#define AsmL_H.h
//---------------------------------------------------------------------------

#include "JsGlobal_H.h"
#include "Tokenfield_H.h"
//---------------------------------------------------------------------------
// 汇编行,它同时是一个Token链表管理器。
//---------------------------------------------------------------------------
class AsmLine : public JObject
{ private:
    Tokenfield* head;   // 指向头结点,一个有特殊用途的结点。
    Tokenfield* tail;   // 指向尾节点。

     int16u NestNo;     // 初值为0,当发生宏嵌套时,存储嵌套所在的层数。
     int16u LineNo;     // 存储行号,从1开始,数值唯一。未赋值时是0。

    AsmLine* next;      // 指向下一个结点
    class ASM_Segment* sgpt; // 当前行对应的段的指针。

    int16u lc;          // 当前行的相对地址.
     int8u len;         // 当前行的目标代码的长度。

    union
    { struct
      { bool Enable :1;   // 用在宏展开上。初值为true。
        bool IsOK   :1;   // 说明该行是否已经编译好。初值为false。
        bool Includ :1;   // 头节点是否包含源文本,只用于Include。初值为false。
        bool hideln :1;   // 该行是否在列表文件中隐藏。初值为false。
                          // 通常用于不产生OBJ目标码的汇编行。列表时会直接忽略该行。
        bool Unsm   :1;   // 该行不被汇编。初值为false。即默认全部汇编。
        bool cond   :1;   // 该行是否包含一个条件语句。(false)
      }; // end struct
      int8u Lflag;        // 标志组。
    }; // end union

  // --------------------------------------

    public:

       AsmLine();      // constructor
      ~AsmLine();      // destructor

  // -------- public functions ------------

    int16u GetLineNo()     { return LineNo; }
    int16u GetNestNo()     { return NestNo; }
    int16u GetLoc()        { return lc; }
    int8u  GetLen()        { return len; }

    bool LineIsOK()        { return IsOK; }
    bool LineIsEnable()    { return Enable; }

    int16u& HeadToken()    { return head->Token; }
    int32&  HeadValue()    { return head->Value; }

    // 取第一个Tokenfield的指针。
    Tokenfield* FirstTkn() { return head->next; }

    // 判断Token链是否为空。空的链表只有一个头结点。
    bool TknListEmpty()    { return (tail==head); }

    // 判断Token链是否为不空。空的链表只有一个头结点。
    bool TknLNotEmpty()    { return (tail!=head); }

    // 往汇编行添加一个Token结点。
    void AddTokenfield(int16u token, const Jstring& word, int32u val);

    // 在汇编行头插入Token结点。
    void InsertToken(Tokenfield* tp);

    void InsertTknAfter(Tokenfield* pos, Tokenfield* TkNode);

  //-------------------------------
    void showTknList()const;
    void show()const;
  //-------------------------------
    friend class AsmFile;
    friend class LISTFile;
    friend class MacroAsmber;
    friend class LabelManager;
    friend class MacroDefBody;
    friend class MacrosManager;
    friend class OBJmodule;
}; // end AsmLine
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
// 在汇编行头插入Token结点。tp不能为空!
//---------------------------------------------------------------------------
inline void AsmLine::InsertToken(Tokenfield* tp)
{ tp->next = head->next;
  head->next = tp;
} // end InsertToken
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
inline void AsmLine::InsertTknAfter(Tokenfield* pos, Tokenfield* TkNode)
{ TkNode->next = pos->next;
  pos->next    = TkNode;
} // end InsertTknAfter
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
//               Written by JamesyFront.    ZLGmcu Dev.Co.Ltd.  2002.
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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