40 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#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;
 |