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