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

📄 operanddef.h

📁 这是一个软件水平资格考试中使用的CASL汇编语言的编译器,实现文件中包括一个编译器,一个虚拟机,一个类似于Debug的调试器.
💻 H
字号:
///////////////////////////////////////////////////////////////////////
//文件功能: 定义Casl汇编程序中的操作数相关定义
//开发人员:杨军
//开发日期:2004-4-17
//修改人员:
//修改日期:
///////////////////////////////////////////////////////////////////////
#ifndef __OPERAND_DEF
#define __OPERAND_DEF

//------------宏定义,标识操作数中不含寄存器-------------------------------
#define  REG_EMPTY  9 

//------------------------操作数类型类型定义---------------------------
typedef enum
{
  REG_OPERAND = 0,   //寄存器操作数
  EA_OPERAND,     //有效地址操作数
  EMPTY_OPERAND   //空地址操作数(用于标识操作数为空)
} OperandType;

//-----------------------寄存器操作数结构定义---------------------------
typedef struct tagRegOperand
{
  int regNumber;    //寄存器的编号(0, 1, 2, 3, 4)
} RegOperand;  //寄存器操作数的结构定义

//----------------------有效地址操作数中的相对地址的类型定义------------
typedef enum
{
  LABEL_EA_ADDRESS,   //标号地址类型 
  DEC_EA_ADDRESS,      //十进制数据地址类型
  EMPTY_ADDRESS = -1       //地址值为空
} EAAddressType;   

//----------------------有效地址操作数中标号地址的结构定义---------------
typedef struct  tagLabelEAAddress
{
  CaslString strLabelName;  //标号名称
} LabelEAAddress;   

//----------------------有效地址操作数中的相对地址的结构定义-------------
typedef struct tagEAAddress
{
  EAAddressType  type; //有效地址操作数中的相对地址的类型
  union  
  {
    LabelEAAddress labelAddress;  //标号地址
    int            decAddress;    //十进制数据地址
  } addressVal;   //相对地址值
} EAAddress;  

//----------------------有效地址操作数的结构定义--------------------------
typedef struct tagEAOperand
{
  int regNumber;   //变址寄存器的编号(0, 1, 2, 3, 4) (REG_EMPTY表示不使用)
  EAAddress address;     //地址
} EAOperand;   

//----------------------Cals中的操作数结构定义-----------------------------
typedef struct tagOperand
{
  OperandType type;   //操作数类型
  union 
  {
    RegOperand regOperand;    //寄存器操作数
    EAOperand  eaOperand;     //有效地址操作数
  } OperandVal;  //操作数的具体数据
} Operand;  

#endif

⌨️ 快捷键说明

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