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

📄 win32.md

📁 window下的c编译器。
💻 MD
📖 第 1 页 / 共 3 页
字号:
%{
enum { EAX=0, ECX=1, EDX=2, EBX=3, ESI=6, EDI=7 };
#include "c.h"
#define NODEPTR_TYPE Node
#define OP_LABEL(p) ((p)->op)
#define LEFT_CHILD(p) ((p)->kids[0])
#define RIGHT_CHILD(p) ((p)->kids[1])
#define STATE_LABEL(p) ((p)->x.state)
static void address     ARGS((Symbol, Symbol, int));
static void blkfetch    ARGS((int, int, int, int));
static void blkloop     ARGS((int, int, int, int, int, int[]));
static void blkstore    ARGS((int, int, int, int));
static int  ckstack     ARGS((Node, int));
static void defaddress  ARGS((Symbol));
static void defconst    ARGS((int, Value));
static void defstring   ARGS((int, char *,int));
static void defsymbol   ARGS((Symbol));
static void doarg       ARGS((Node));
static void emit0       ARGS((Node));
static void emit2       ARGS((Node));
static void export      ARGS((Symbol));
static void clobber     ARGS((Node));
static void function    ARGS((Symbol, Symbol [], Symbol [], int));
static void global      ARGS((Symbol));
static void import      ARGS((Symbol));
static void local       ARGS((Symbol));
static void progbeg     ARGS((int, char **));
static void progend     ARGS((void));
static void segment     ARGS((int));
static void space       ARGS((int));
static void target      ARGS((Node));
static int memop ARGS((Node));
static int hasargs ARGS((Node));
#ifndef ASM_LIB
static int sametree ARGS((Node, Node));
#else
extern int sametree ARGS((Node,Node));
#endif
static int iscon16(Node);
static int immediateOpShort(Node);
static int iszero(Node);
static int incrmem(Node);
Symbol charreg[32], shortreg[32], intreg[32];
static Symbol fltreg[32];
int cseg;
static int dequal(Node,int);
static int fequal(Node,int);
static Symbol quo, rem;

%}
%start stmt
%term CNSTC=	19
%term CNSTD=	18
%term CNSTF=	17
%term CNSTI=	21
%term CNSTP=	24
%term CNSTS=	20
%term CNSTU=	23
%term CNSTL=	22
%term ARGB=	42
%term ARGD=	34
%term ARGF=	33
%term ARGI=	37
%term ARGP=	40
%term ARGL=	38
%term ASGNB=	58
%term ASGNC=	51
%term ASGND=	50
%term ASGNF=	49
%term ASGNI=	53
%term ASGNS=	52
%term ASGNP=	56
%term ASGNL=	54
%term INDIRB=	74
%term INDIRC=	67
%term INDIRD=	66
%term INDIRF=	65
%term INDIRI=	69
%term INDIRS=	68
%term INDIRL=	70
%term INDIRP=	72
%term CVC=	80
%term CVCI=	85
%term CVCU=	87
%term CVD=	96
%term CVDF=	97
%term CVDI=	101
%term CVDL=	102
;;
;;%term CVF=	112
;;
%term CVFD=	114
;;
;;%term CVI=	128
;;
%term CVIC=	131
%term CVID=	130
%term CVIS=	132
%term CVIL=	134
;;
;; discontinued
;;   %term CVIU=135
;;   %term CVUI=   181
;;   %term CVPU=151
;;   %term = CVUI=181
;;   %term CVUP=184
;;
;;%term CVP=	144
;;
;;%term CVS=	160
;;
%term CVSI=	165
%term CVSU=	167
;;
;;%term CVU=	176
;;
%term CVUD=     178
%term CVUC=	179
%term CVUL=	182
%term CVUS=	180
;;
;;%term NEG=	192
;;
%term NEGD=	194
%term NEGF=	193
%term NEGI=	197
%term NEGL=	198
;;
;;%term CALL=	208
;;
%term CALLB=	218
%term CALLD=	210
%term CALLF=	209
%term CALLI=	213
%term CALLV=	217
%term CALLL=	214
;;
;;%term LOAD=	224
;;
;;%term LOADB=	234
;;
%term LOADC=	227
%term LOADD=	226
%term LOADF=	225
%term LOADI=	229
%term LOADP=	232
%term LOADS=	228
%term LOADU=	231
;;
;;%term RET=	240
;;
%term RETD=	242
%term RETL=	246
%term RETF=	241
%term RETI=	245
;;
;;%term ADDRG=	256
;;
%term ADDRGP=	264
;;
;;%term ADDRF=	272
;;
%term ADDRFP=	280
;;
;;%term ADDRL=	288
;;
%term ADDRLP=	296
%term ADDD=	306
%term ADDF=	305
%term ADDI=	309
%term ADDP=	312
%term ADDU=	311
%term ADDL=	310
%term SUBD=	322
%term SUBF=	321
%term SUBI=	325
%term SUBP=	328
%term SUBU=	327
%term SUBL=	326
%term LSHI=	341
%term LSHU=	343
%term LSHL=	342
%term MODI=	357
%term MODU=	359
%term MODL=	358
%term RSHI=	373
%term RSHU=	375
%term RSHL=	374
%term BANDU=	391
%term BANDL=	390
%term BCOML=	406
%term BCOMU=	407
%term BORL=	422
%term BORU=	423
%term BXORL=	438
%term BXORU=	439
%term DIVD=	450
%term DIVF=	449
%term DIVI=	453
%term DIVL=	454
%term DIVU=	455
%term MULD=	466
%term MULF=	465
%term MULI=	469
%term MULL=	470
%term MULU=	471
%term EQD=	482
%term EQF=	481
%term EQLO=	486
%term EQI=	485
%term GED=	498
%term GEF=	497
%term GEI=	501
%term GEU=	503
%term GEL=	502
%term GTD=	514
%term GTF=	513
%term GTI=	517
%term GTU=	519
%term GTL=	518
%term LED=	530
%term LEF=	529
%term LEI=	533
%term LEL=	534
%term LEU=	535
%term LTD=	546
%term LTF=	545
%term LTI=	549
%term LTL=	550
%term LTU=	551
%term NED=	562
%term NEF=	561
%term NEI=	565
%term NEL=	566
%term JUMPI=	581
%term JUMPV=	585
%term LABELV=	601
%term CVLI=	613
%term CVLD=	610
%term VREGP=	616
%%

reg: INDIRC(VREGP)	"# read register\n"
reg: INDIRI(VREGP)	"# read register\n"
reg: INDIRP(VREGP)	"# read register\n"
reg: INDIRS(VREGP)	"# read register\n"
freg: INDIRD(VREGP)	"# read register\n"
freg: INDIRF(VREGP)	"# read register\n"
stmt: ASGNC(VREGP,reg)	"# write register\n"
stmt: ASGNI(VREGP,reg)	"# write register\n"
stmt: ASGNP(VREGP,reg)	"# write register\n" 

stmt: ASGNS(VREGP,reg)	"# write register\n"
stmt: ASGND(VREGP,freg)	"# write register\n"
stmt: ASGNF(VREGP,freg)	"# write register\n"
con: CNSTC	"$%a"
con: CNSTI	"$%a"
con: CNSTP	"$%a"
con: CNSTS	"$%a"
con: CNSTU	"$%a"
stmt: reg	""
stmt: freg	""
;;reg: CVIU(reg)  "%0"  notarget(a)
;;reg: CVPU(reg)  "%0"  notarget(a)
;;reg: CVUI(reg)  "%0"  notarget(a)
;;reg: CVUP(reg)  "%0"  notarget(a)

acon: ADDRGP	"%a"
acon: CNSTC	"%a"
acon: CNSTI	"%a"
acon: CNSTP	"%a"
acon: CNSTS	"%a"
acon: CNSTU	"%a"

baseaddr: ADDRGP	"%a"
base: reg   	    	"(%0)"
base: ADDI(reg,acon)	"%1(%0)"
base: ADDP(reg,acon)	"%1(%0)"
base: ADDU(reg,acon)	"%1(%0)"
base: ADDRFP		"%a(%%ebp)"
base: ADDRLP		"%a(%%ebp)"

con1: CNSTI	"1"	(a->syms[0]->u.c.v.i == 1 ? 0 : LBURG_MAX)
con1: CNSTU	"1"	(a->syms[0]->u.c.v.u == 1 ? 0 : LBURG_MAX)

icon: CNSTI	"2"	(a->syms[0]->u.c.v.i == 1 ? 0 : LBURG_MAX)
icon: CNSTU	"2"	(a->syms[0]->u.c.v.u == 1 ? 0 : LBURG_MAX)
icon: CNSTI	"4"	(a->syms[0]->u.c.v.i == 2 ? 0 : LBURG_MAX)
icon: CNSTU	"4"	(a->syms[0]->u.c.v.u == 2 ? 0 : LBURG_MAX)
icon: CNSTI	"8"	(a->syms[0]->u.c.v.i == 3 ? 0 : LBURG_MAX)
icon: CNSTU	"8"	(a->syms[0]->u.c.v.u == 3 ? 0 : LBURG_MAX)

index: reg              "%0"
index: LSHI(reg,icon)	"%0,%1"
index: LSHU(reg,icon)	"%0,%1"

addr: base			"%0" 1
addr: baseaddr			"%0"
addr: ADDI(index,baseaddr)	"%1(,%0)"
addr: ADDI(reg,baseaddr)	"%1(%0)"
addr: ADDI(index,reg)		"(%1,%0)"

addr: ADDP(index,baseaddr)	"%1(,%0)"
addr: ADDP(reg,baseaddr)	"%1(%0)"
addr: ADDP(reg,acon)	"%1(%0)"
addr: ADDP(index,reg)		"(%1,%0)"
addr: ADDU(index,baseaddr)	"%1(,%0)"
addr: ADDU(reg,baseaddr)	"%1(%0)"
addr: ADDU(index,reg)		"(%1,%0)"
addr: ADDU(index,acon)          "%1(,%0)"

addr: index			"(,%0)"

memb: INDIRC(addr)	"%0"
memw: INDIRS(addr)	"%0"
mem:  INDIRI(addr)	"%0" 
mem:  INDIRP(addr)	"%0"

rc5: CNSTI	"$%a"	range(a, 0, 31)
rc5: reg	"%%cl"

rc: reg		"%0"
rc: con		"%0"

mr:   reg  "%0"
mr:   mem  "%0"

mrb:   reg  "%0"
mrb:   memb  "%0"

⌨️ 快捷键说明

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