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

📄 mach4.c

📁 坦尼保姆
💻 C
字号:
#define RCSID4 "$Header: mach4.c,v 3.6 91/01/10 13:57:29 ceriel Exp $"/* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". * */operation	:	prefix oper	;prefix	:	/* empty */	|	prefix PREFIX			{	emit1($2);}	;oper	:	NOOP_1			{	emit1($1);}	|	NOOP_2			{	emit2($1);}	|	JOP expr			{	branch($1,$2);}	|	PUSHOP ea_1			{	pushop($1);}	|	IOOP expr			{	emit1($1);#ifdef RELOCATION				newrelo($2.typ, RELO1);#endif				emit1($2.val);			}	|	IOOP R16			{	if ($2!=2) serror("register error");				emit1($1+010);			}	|	ADDOP ea_ea			{	addop($1);}	|	ROLOP ea_ea			{	rolop($1);}	|	INCOP ea_1			{	incop($1);}	|	IMUL ea_ea			{	imul($1);}	|	IMUL ea_1			{	regsize($1); emit1(0366|($1&1)); ea_1($1&070);}	|	NOTOP ea_1			{	regsize($1); emit1(0366|($1&1)); ea_1($1&070);}	|	CALLOP ea_1			{	callop($1&0xFFFF);}	|	CALFOP expr ':' expr			{	emit1($1>>8);#ifdef RELOCATION				newrelo($4.typ, RELO2);#endif				emit2($4.val);#ifdef RELOCATION				newrelo($2.typ, RELO2);#endif				emit2($2.val);			}	|	CALFOP mem			{	emit1(0377); ea_2($1&0xFF);}	|	ENTER absexp ',' absexp			{	fit(fitw($2)); fit(fitb($4));				emit1($1); emit2((int)$2); emit1((int)$4);			}	|	LEAOP R16 ',' mem			{	emit1($1); ea_2($2<<3);}	|	ARPLOP mem ',' R16			{	emit1($1); ea_2($4<<3);}	|	EXTOP	R16 ',' ea_2			{	emit1(0xF); emit1($1);				ea_2($2<<3);			}	|	EXTOP1	ea_1			{	regsize(1); emit1(0xF); emit1($1&07); 				ea_1($1&070);			}	|	ESC absexp ',' mem			{	fit(fit6($2));				emit1(0330 | $2>>3);				ea_2(($2&7)<<3);			}	|	INT absexp			{	if ($2==3)					emit1(0314);				else {					emit1(0315); emit1($2);				}			}	|	RET			{	emit1($1);}	|	RET expr			{	emit1($1-1);#ifdef RELOCATION				newrelo($2.typ, RELO2);#endif				emit2($2.val);			}	|	XCHG ea_ea			{	xchg($1);}	|	TEST ea_ea			{	test($1);}	|	MOV ea_ea			{	mov($1);}/* Intel 8087 coprocessor instructions * /	|	FNOOP			{	emit1($1); emit1($1>>8);}	|	FMEM mem			{	emit1($1); ea_2(($1>>8)&070);}	|	FST_I st_i			{	emit1($1); emit1(($1>>8)|$2); }	|	FST_I ST			{	emit1($1); emit1($1>>8); }	|	FST_ST ST ',' st_i			{	emit1($1); emit1(($1>>8)|$4); }	|	FST_ST2 ST ',' st_i			{	emit1($1); emit1(($1>>8)|$4); }	|	FST_ST st_i ',' ST			{	emit1($1|4); emit1((($1>>8)|$2)); }	|	FST_ST2 st_i ',' ST			{	emit1($1|4); emit1((($1>>8)|$2)^010); } */	;st_i	:	ST '(' absexp ')'			{	if (!fit3($3)) {					serror("illegal index in FP stack");				}				$$ = $3;			}	;mem	:	'(' expr ')'			{	mrg_2 = 6; exp_2 = $2;				RELOMOVE(rel_2, relonami);			}	|	bases			{	exp_2.val = 0; exp_2.typ = S_ABS; indexed();}	|	expr bases			{	exp_2 = $1; indexed();				RELOMOVE(rel_2, relonami);			}	;bases	:	'(' R16 ')'			{	mrg_2 = sr_m[$2];}	|	'(' R16 ')' '(' R16 ')'			{	mrg_2 = dr_m[$2][$5];}	;ea_2	:	mem	|	R8			{	mrg_2 = $1 | 0300;}	|	R16			{	mrg_2 = $1 | 0310;}	|	RSEG			{	mrg_2 = $1 | 020;}	|	expr			{	mrg_2 = 040; exp_2 = $1;				RELOMOVE(rel_2, relonami);			}	;ea_1	:	ea_2			{	mrg_1 = mrg_2; exp_1 = exp_2;				RELOMOVE(rel_1, rel_2);			}	;ea_ea	:	ea_1 ',' ea_2	;

⌨️ 快捷键说明

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