#define UNKNOWN 0 #define IS_REG 0x1 #define IS_ACCU 0x2 #define IS_DATA 0x4 #define IS_LABEL 0x8 #define IS_MEM 0x10 #define IS_ADDR 0x20 #define IS_ILB 0x40 #define AX 0 #define BX 3 #define CL 1 #define SP 4 #define BP 5 #define SI 6 #define DI 7 #define REG( op) ( op->type & IS_REG) #define ACCU( op) ( op->type & IS_REG && op->reg == AX) #define REG_CL( op) ( op->type & IS_REG && op->reg == CL) #define DATA( op) ( op->type & IS_DATA) #define lABEL( op) ( op->type & IS_LABEL) #define ILB( op) ( op->type & IS_ILB) #define MEM( op) ( op->type & IS_MEM) #define ADDR( op) ( op->type & IS_ADDR) #define EADDR( op) ( op->type & ( IS_ADDR | IS_MEM | IS_REG)) #define CONST1( op) ( op->type & IS_DATA && strcmp( "1", op->expr) == 0) #define MOVS( op) ( op->type & IS_LABEL&&strcmp("\"movs\"", op->lab) == 0) #define IMMEDIATE( op) ( op->type & ( IS_DATA | IS_LABEL)) #define TRUE 1 #define FALSE 0 struct t_operand { unsigned type; int reg; char *expr, *lab, *off; }; extern struct t_operand saved_op, *AX_oper;