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

📄 as31.h

📁 A 8051 assembler .any one can learn how to write assembler in this example.and this function code ha
💻 H
字号:
/* ----------------------------------------------------------------------
 * FILE: as31.h
 * PACKAGE: as31 - 8031/8051 Assembler.
 *
 * DESCRIPTION:
 *	The sole header file for the 8031/8051 assembler package.
 *	It defines several structures used by the yacc stack.
 *	It defines several macros for testing the bitsize of numeric
 *	quantities.
 *
 *	Some macros to extract information from the mode structure.
 *
 * REVISION HISTORY:
 *	Jan. 19, 1990 - Created. (Ken Stauffer)
 *
 * AUTHOR:
 *	All code in this file written by Ken Stauffer (University of Calgary).
 *	January, 1990.
 *
 */

/* ----------------------------------------------------------------------
 * user / keyword symbol structures:
 */

struct opcode {
	char *name;
	int type;
	unsigned char *bytes;
};

struct symbol {
	char *name;
	int type;
	long value;
	struct symbol *next;
};

#define UNDEF	0
#define LABEL	1

/* ----------------------------------------------------------------------
 * addressing mode stuff:
 */

struct mode {
	unsigned char mode;		/* value to index with */
	unsigned char size;		/* # of bytes used */
	unsigned char orval;		/* value OR'd to obcode */
	unsigned char byte1;		/* extra byte 1 */
	unsigned char byte2;		/* extra byte 2 */
};

#define set_md(m,a)	((m).mode=(a))
#define set_sz(m,a)	((m).size=(a))
#define set_ov(m,a)	((m).orval=(a))
#define set_b1(m,a)	((m).byte1=(a))
#define set_b2(m,a)	((m).byte2=(a))

#define get_md(m)	((m).mode)
#define get_sz(m)	((m).size)
#define get_ov(m)	((m).orval)
#define get_b1(m)	((m).byte1)
#define get_b2(m)	((m).byte2)

/* ----------------------------------------------------------------------
 * yacc stack stuff:
 */

struct value {
	long v;
	unsigned char d;		/* expression defined flag */
};

union ystack {
	long value;
	struct value val;
	struct opcode *op;
	struct symbol *sym;
	struct mode mode;
	char *str;
};

/* ----------------------------------------------------------------------
 * IS_BIT_MAPPED_RAM:
 *	True is the byte 'a' is the byte address of a bit mapped
 *	RAM location.
 */
#define isbmram(a)	(((a)&0xf0)==0x20)

/* ----------------------------------------------------------------------
 * IS_BIT_MAPPED_SFR:
 *	True is the byte 'a' is the byte address of a bit mapped
 *	SPECIAL FUCTION REGISTER.
 */
#define isbmsfr(a)	(((a)&0x80) && !((a) & 0x07))

/* ----------------------------------------------------------------------
 * isbit8, ...
 *	Macros to check the sizes of values and to convert
 *	a value to a certain, size.
 *
 */
#define size8		(~0x00ff)
#define size11		(~0x07ff)
#define size13		(~0x1fff)
#define size16		(~0xffff)

#define size10		(~0x03ff)
#define size12		(~0x0fff)
#define size15		(~0x7fff)

#define isbit8(v)	( !( ((v)>=0) ? (v)&size8 : -(v)>=128) )
#define isbit11(v)	( !( ((v)>=0) ? (v)&size11 : (-(v))&size10 ) )
#define isbit13(v)	( !( ((v)>=0) ? (v)&size13 : (-(v))&size12 ) )
#define isbit16(v)	( !( ((v)>=0) ? (v)&size16 : (-(v))&size15 ) )

/* ----------------------------------------------------------------------
 * Size of user hash table.
 */
#define HASHTABSIZE		1000

/* ----------------------------------------------------------------------
 * Macros to nicely test which pass we are in.
 */
#define pass1			(!pass)
#define pass2			(pass)

/* -------- TOKENS ------------------------------------------------------
 *
 * This includes the header file generated by yacc -d.
 * NOPE is defined inside of as31.y, which does not
 * need to re-include the tokens twice, thus NOPE prevents this.
 *
 */
#ifdef NOPE
#else
#include "y_tab.h"
#endif

⌨️ 快捷键说明

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