📄 oxanf.h
字号:
} funcd;
struct {
unsigned char numptrs;
unsigned char hassegs;
unsigned char quals[8];
unsigned short declnum;
} ptrinf;
struct {
unsigned short seg[8];
} seginf;
struct {
unsigned char tfofs;
unsigned char fsize;
unsigned char type;
unsigned char pad;
} bfinf;
struct {
unsigned long membercnt;
unsigned long susize;
short symnum;
unsigned short quals;
} suinf;
struct {
unsigned short memdcl[8];
} sum;
struct {
unsigned long offset;
short symnum;
unsigned short declnum;
unsigned short cdeclnum; /* container_declnum */
unsigned char fieldofs; /* bitfields only */
unsigned char fieldsiz;
} memb;
struct {
unsigned short major;
unsigned short minor;
char code_format;
char target_hardware;
char target_debugger;
char target_os;
char memory_model;
char obj_format;
char target_assembler;
char pads[4];
char opt_level;
} hdr;
struct {
long symnum;
unsigned long hidden_offset;
unsigned long argsize;
short segid;
unsigned short tempmax;
} funcdef;
struct {
long tempmax;
} funcexit;
struct {
unsigned long v1;
unsigned long v2;
unsigned long v3;
short segid;
short unused;
} segdef;
struct {
unsigned long spot;
short rsym;
short rsize;
unsigned long base;
long offset;
} reloc;
struct {
long line;
long filenamenum;
} line;
struct {
long label;
} jmp;
struct {
unsigned char shift;
unsigned char size;
unsigned char sign;
} bfield;
} *PopI;
#define POPI ((PopI)(p+8))
#define DATI (POPI->s)
typedef struct _nd
{
unsigned char dtype;
unsigned char quals;
unsigned char opsize;
unsigned char flags;
long size;
DATUM *data;
unsigned short atype;
} ND, *PND;
#define OFFSET data->ulng.d[2]
#define DECLNUM data->ushrt.d[6]
#define SYMNUM data->shrt.d[7]
#define TMPNUM data->ulng.d[2]
#define POFS data->ulng.d[4]
#define ARGSIZE data->ulng.d[1]
#define ARGOFS data->ulng.d[0]
#endif /* NEED_ANFDEFS */
enum genopcodes {nilop=0,
/*01 -- instructions */
assignop=1,plusop,minusop,mulop,divop,
lshop,rshop,modop,orop,xorop,
/*11*/
andop,eqop,neqop,ltop,gtop,
leop,geop,negop,complop,notop,
/*21*/
copyop,clrdatop,truthop,jmptrueop,jmpfalseop,
jmpgotoop,nopop,callop,retvoidop,ljmptrueop,
/*31*/ ljmpfalseop,
/*41*/
pushop=41,popop,functionop,emitop,signxtdop,
/*64 */
jmploopop=64,jmpcontinueop,jmpbreakop,regainop,retstructop,
retdataop,grabop,switchop,argop,callfuncop,
/*74*/
compsavop,getbitfieldop,putbitfieldop,aliastmpop,castop,
funcstartop,funcstopop,
/*84 -- address temp creators */
duptmpop=84,derefop,getvalop,totmpop,
/*101 -- statements */
labelop=101,gfuncdefop,sfuncdefop,nestedfuncdefop,funcexitop,
nestedfuncexitop,expstmtop,ifstmtop,ifelsestmtop,switchstmtop,
/*111*/
whilestmtop,dostmtop,forstmtop,asmstmtop,initstmtop,
lineop,
/*131 -- expressions */
condop=131,twopathop,logicalop,binopop,strelemop,
ptrelemop,arrayelemop,arraydimsop,ptrdimsop,funcallop,
/*141*/
argloadop,preincrdecop,compoundop,postincrdecop,unopop,
/*161 -- info */
symbop=161,casevalop,caserangeop,switchidop,
headerop,trailerop,declop,ptrinfop,maxtempop,
/*171*/
memberinfop,arrayinfop,structinfop,funcptrinfop,funcinfop,
paraminfop,bfieldinfop,symoffsetop,symblockop,dataop,
/*181*/
datablockop,mallocblockop,thunkblockop,bssblockop,glodatop,
globssop,glofuncop,extvarop,extfuncop,relocop,
stringblockop,
/*192*/
segdefop,anfblockop,extlocop,endfileop,endallop,
endop
};
#ifdef NEED_GENOPS
/* ARRAY OF STRINGS FOR PRINTING THE ENUMERATED OPCODES ABOVE, IT MUST MATCH */
/* PSEUDO ASSEMBLY LANGUAGE (anf) CODES MAY BE ADDED IN SLOTS 31-63 AND
WILL AUTOMATICALLY BE UNDERSTOOD BY `oxcc' */
char *oxgenops[] = {"<nil>",
/*01 -- instructions */
"mov", "add", "sub", "mul", "div",
"lsh", "rsh", "mod", "or", "xor",
/*11*/
"and", "eq", "neq", "lt", "gt",
"le", "ge", "neg","compl","not",
/*21*/
"copydat","clrdat","truthof","jmptrue","jmpfalse",
"jmp","nop","call","ret","ljmptrue",
/*31*/
"ljmpfalse","","","","",
"","","","","",
/*41 -- codes 41 to 63 not understood by bytecode generator `oxccb' */
/* ADD NEW CODES FOR __anf__ BLOCKS HERE, NO NEED TO ENUMERATE ABOVE. */
"push","pop","function","emit","signxtd",
"","","","","",
/*51*/
"","","","","",
"","","","","",
/*61*/
"","","",
/*64 -- codes 64 to 100 generated only by oxcc */
"jmploop","jmpcontinue","jmpbreak","regain","retstruct",
"retdata","grab","switch","arg","call-c",
/*74*/
"compsave","getbitfield","putbitfield","aliastmp","cast",
"funcstart","funcstop","","","",
/*84*/
"duptmp","deref","getval","totmp","",
"","","","","",
/*94*/
"","","","","",
"","",
/*101 -- statements */
"Label","GFuncdef","SFuncdef","NestedFuncdef","Funcexit",
"NestedFuncexit","ExpS","If","IfElse","Switch",
/*111*/
"While","Do","For","Asm","Init",
"#Line","","","","",
/*121*/
"","","","","",
"","","","","",
/*131 -- expressions */
"Conditional","TwoPath","Logical","Binop","StrElem",
"Ptrelem","ArrayElem","ArrayDim","PtrDim","FuncCall",
/*141*/
"ArgLoad","Pre++--","Compound","Post++--","Unop",
"","","","","",
/*151*/
"","","","","",
"","","","","",
/*161 -- info */
"Symbols","CaseVal","CaseRange","SwitchId",
"Header","Trailer","Decl","PtrInfo","MaxTemp",
/*171*/
"Member","ArrayInfo","StructInfo","FuncPtrInfo","FuncInfo",
"ParamInfo","BitfieldInfo","SymOffset","SymBlock","Data",
/*181*/
"DataBlock","MallocBlock","ThunkBlock","BssBlock","Glodat",
"Globss","Glofunc","Extvar","Extfunc","Reloc",
"StringBlock",
/*192*/
"SegDef","AnfBlock","Extloc","EndFile","EndAll",
"End"
};
#else
extern char *oxgenops[];
#endif /* NEED_GENOPS */
#if NEED_ASM_OPCODES
static char *x86opcodes[] = {
"aaa","aad","aam","aas",
"adc","adcb","adcw","adcl",
"add","addb","addw","addl",
"and","andb","andw","andl",
"arpl",
"bound","boundw","boundl",
"bsf","bsfw","bsfl",
"bsr","bsrw","bsrl",
"bt","btw","btl",
"btc","btcw","btcl",
"btr","btrw","btrl",
"bts","btsw","btsl",
"call","cbw","cwde","clc","cld","cli","clts","cmc",
"cmp","cmpb","cmpw","cmpl",
"cmps","cmpsb","cmpsw","cmpsd","cmpsl",
"cwd","cdq","daa","das",
"dec","decb","decw","decl",
"div","divb","divw","divl",
"enter","hlt",
"idiv","idivb","idivw","idivl",
"imul","imulb","imulw","imull",
"in","inb","inw","inl",
"inc","incb","incw","incl",
"ins","insb","insw","insd","insl",
"int","into","iret","iretd",
"ja","jae","jb","jbe","jc","jcxz","jecxz","je","jz","jg","jge","jl","jle",
"jna","jnae","jnb","jnbe","jnc","jne","jng","jnge","jnl","jnle","jno","jnp",
"jns","jnz","jo","jp","jpe","jpo","js","jz","jmp",
"lea","leaw","leal",
"leave","lgdt","lidt","lgs","lss","lds","les","lfs","lldt","lmsw","lock",
"lods","lodsb","lodsw","lodsd","lodsl",
"loop","loope","loopz","loopne","loopnz",
"lsl","lslw","lsll",
"ltr",
"mov","movb","movw","movl",
"movs","movsb","movsw","movsd","movsl",
"movsx","movsxb","movsxw",
"movzx","movzxb","movzxw",
"mul",
"neg","negb","negw","negl",
"nop",
"not","notb","notw","notl",
"or","orb","orw","orl",
"out","outb","outw","outl",
"outs","outsb","outsw","outsd","outsl",
"pop","popw","popl",
"popa","popaw","popad","popal",
"popf","popfw","popfd","popfl",
"push","pushw","pushl",
"pusha","pushad","pushal",
"pushf","pushfd","pushfl",
"rcl","rclb","rclw","rcll",
"rcr","rcrb","rcrl",
"ror","rorw","rorl",
"rol","rolb","rolw","roll",
"rep","repe","repz","repne","repnz",
"ret","retn",
"sahf",
"sal","salb","salw","sall",
"sar","sarb","sarw","sarl",
"shl","shlb","shlw","shll",
"shr","shrb","shrw","shrl",
"sbb","sbbb","sbbw","sbbl",
"scas","scasb","scasw","scasd","scasl",
"seta","setae","setb","setbe","setc","sete","setg","setge","setl","setle",
"setna","setnae","setnb","setnbe","setnc","setne","setng","setnge","setnl",
"setnle","setno","setnp","setns","setnz","seto","setp","setpe","setpo",
"sets","setz","sgdt","sidt",
"shld",
"shrd",
"sldt","smsw","stc","std","sti",
"stos","stosb","stosw","stosd","stosl",
"str",
"sub","subb","subw","subl",
"test","testb","testw","testl",
"verr","verrw",
"wait",
"xchg","xchgb","xchgw","xchgl",
"xlat","xlatb",
"xor","xorb","xorw","xorl",
"fabs","fadd","fadds","faddl","faddp","fbld","fbstp","fchs","fclex",
"fnclex","fcom","fcoms","fcoml","fcomp","fcomps","fcompl","fcompp","fcos",
"fdecstp","fdisi","fndisi","fdiv","fdivs","fdivl","fdivp","fdivr","fdivrs",
"fdivrl","fdivrp","feni","fneni","ffree","fiadd","fiaddw","fiadds","ficom",
"ficomw","ficoms","ficomp","ficompw","ficomps","fidiv","fidivw","fidivs",
"fidivr","fidivrw","fidivrs","fild","fildw","filds","fildl","fimul","fimulw",
"fimuls","fincstp","finit","fininit","fist","fistw","fists","fistp","fistpw",
"fistps","fistpl","fisub","fisubw","fisubs","fisubr","fisubrw","fisubrs",
"fld","fldw","flds","fldl","fldcw","fldenv","fldlg2","fldln2","fldl2e",
"fldl2t","fldpi","fldz","fld1","fmul","fmuls","fmull","fmult","fmulp",
"fnop","fpatan","fprem","fprem1","fptan","frndint","frstor","fsave",
"fnsave","fscale","fsetpm","fsin","fsincos","fsqrt","fst","fsts","fstl",
"fstcw","fnstcw","fsetenv","fnsetenv","fstp","fstps","fstpl","fstpt",
"fstsw","fnstsw","fsub","fsubs","fsubl","fsubp","fsubr","fsubrs","fsubrl",
"fsubrp","ftst","fucom","fucomp","fucompp","fwait","fxam","fxch","fxtract",
"fyl2x","fyl2xpi","f2xmi",
0
};
static char *x86words[] = {
"ah","al","bh","bl","ch","cl","dh","dl","ax","bx","cx","dx","ds","es","ss",
"fs","gs","si","di","bp","sp","eax","ebx","ecx","edx","esi","edi","ebp","esp",
"LENGTH","TYPE","SIZE","BYTE","TBYTE","WORD","DWORD","FWORD","QWORD","PTR",
"OFFSET","EVEN","ALIGN","NEAR","FAR","SHORT","HIGH","LOW","SEG",
"length","size","type","byte","tbyte","word","dword","fword","qword","ptr",
"offset","even","align","near","far","short","high","low","seg",
0
};
#endif /* NEED_ASM_OPCODES */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -