📄 g1.y
字号:
# define PREFIX 99
# define max_col 12
# include "ccx.h"
# include <ctype.h>
/* *********************************************************************** */
/* Original Part of grammar control data */
/* *********************************************************************** */
int opcodeTable[] = {
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/* -----------------------------------------------------------------------*/
/*00*/ 6, 6, 6, 6, 1, 4, 0, 0, 6, 6, 6, 6, 1, 4, 0, -1,
/*10*/ 6, 6, 6, 6, 1, 4, 0, 0, 6, 6, 6, 6, 1, 4, 0, 0,
/*20*/ 6, 6, 6, 6, 1, 4, 99, 0, 6, 6, 6, 6, 1, 4, 99, 0,
/*30*/ 6, 6, 6, 6, 1, 4, 99, 0, 6, 6, 6, 6, 1, 4, 99, 0,
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*50*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*60*/ 0, 0, 6, 6, 99, 99, 99, 99, 4, 8, 1, 7, 0, 0, 0, 0,
/*70*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*80*/ 10, 11, -1, 10, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9,
/*90*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0,
/*A0*/ 44, 44, 44, 44, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0,
/*B0*/ 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4,
/*C0*/ 10, 10, 2, 0, 6, 6, 10, 11, 3, 0, 2, 0, 0, 1, 0, 0,
/*D0*/ 9, 9, 9, 9, 1, 1, -1, 0, 12, 12, 12, 12, 12, 12, 12, 12,
/*E0*/ 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 5, 1, 0, 0, 0, 0,
/*F0*/ 0, 0, 16, 16, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 9, 13};
/* -----------------------------------------------------------------------*/
int opcode2Table[] = {
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/* -----------------------------------------------------------------------*/
/*00*/ 4, 4, 2, 2, -1, -1, 0, -1, 0, 0, -1, 0, -1, -1, -1, -1,
/*10*/ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
/*20*/ 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
/*30*/ 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
/*40*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
/*50*/ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
/*60*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, 2, 2,
/*70*/ -1, 5, 5, 5, 2, 2, 2, 0, -1, -1, -1, -1, -1, -1, 2, 2,
/*80*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*90*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
/*A0*/ 0, 0, 0, 2, 3, 2, -1, -1, 0, 0, 0, 2, 3, 2, -1, 2,
/*B0*/ 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, 5, 2, 2, 2, 2, 2,
/*C0*/ 2, 2, -1, -1, -1, -1, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0,
/*D0*/ -1, 2, 2, 2, -1, 2, -1, -1, 2, 2, -1, 2, 2, 2, -1, 2,
/*E0*/ -1, 2, 2, -1, -1, 2, -1, -1, 2, 2, -1, 2, 2, 2, -1, 2,
/*F0*/ -1, 2, 2, 2, -1, 2, -1, -1, 2, 2, 2, -1, 2, 2, 2, -1};
/* -----------------------------------------------------------------------*/
int repeatgroupTable[] = {
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/* -----------------------------------------------------------------------*/
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*20*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*30*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*50*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*60*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
/*70*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*80*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*90*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*A0*/ 0, 0, 0, 0, 2, 2, 1, 1, 0, 0, 2, 2, 2, 2, 1, 1,
/*B0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*C0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*D0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*E0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*F0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
/* -----------------------------------------------------------------------*/
int modTable[] = {
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/* -----------------------------------------------------------------------*/
/*00*/ 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1,
/*10*/ 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1,
/*20*/ 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1,
/*30*/ 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1,
/*40*/ 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4,
/*50*/ 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4,
/*60*/ 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4,
/*70*/ 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4,
/*80*/ 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6,
/*90*/ 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6,
/*A0*/ 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6,
/*B0*/ 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6,
/*C0*/ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
/*D0*/ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
/*E0*/ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
/*F0*/ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};
/* -----------------------------------------------------------------------*/
int mod16Table[] = {
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/* -----------------------------------------------------------------------*/
/*00*/ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
/*10*/ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
/*20*/ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
/*30*/ 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1,
/*40*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
/*50*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
/*60*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
/*70*/ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
/*80*/ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
/*90*/ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
/*A0*/ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
/*B0*/ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
/*C0*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/*D0*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/*E0*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/*F0*/ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5};
/* -----------------------------------------------------------------------*/
int sibTable[] = {
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/* -----------------------------------------------------------------------*/
/*00*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*10*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*20*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*30*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*40*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*50*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*60*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*70*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*80*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*90*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*A0*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*B0*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*C0*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*D0*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*E0*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
/*F0*/ 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2};
/* -----------------------------------------------------------------------*/
int regTable[] = {
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/* -----------------------------------------------------------------------*/
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
/*10*/ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
/*20*/ 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
/*30*/ 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
/*50*/ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
/*60*/ 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
/*70*/ 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
/*80*/ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
/*90*/ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
/*A0*/ 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
/*B0*/ 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
/*C0*/ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
/*D0*/ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
/*E0*/ 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
/*F0*/ 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7};
/* -----------------------------------------------------------------------*/
int rmTable[] = {
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/* -----------------------------------------------------------------------*/
/*00*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*10*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*20*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*30*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*40*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*50*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*60*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*70*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*80*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*90*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*A0*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*B0*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*C0*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*D0*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*E0*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
/*F0*/ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7};
/* -----------------------------------------------------------------------*/
/* *********************************************************************** */
/* hooks between disassembler and printing */
/* *********************************************************************** */
int a_loc=0;
int a_loc_save=0;
int i_col=0;
int i_col_save=0;
int i_psp=0;
int prefixStack[8];
int opclass;
int modclass;
int i_opclass;
int i_opcode;
int i_mod;
int i_sib;
int i_byte;
int i_word;
int i_dword;
int m_byte;
int m_dword;
int needspacing=0;
int byteaddress=0;
int imb=0;
int mbytes[64];
int NumberOfBytesProcessed=-1; // we need to keep track of bytes processed.
// I don't know why I need to start from -1.... but anyway
// this is needed to process
int addressOveride=0; // prefix 0x64
int operandOveride=0; // this is needed to process
// prefix 0x66: operand size overide
int label_start_pos; /* labe start position of case jump block */
int min_label;
int cur_position;
int labelClass;
int finished;
int lastAnchor=0;
int leaveFlag=0;
int delta=0;
extern int (*prxntf)(const char *,...); // for printing contol
/* *********************************************************************** */
/* Original Part of grammar generated sources */
/* *********************************************************************** */
//win32program = translationunit
//translationunit = {instruction}*
@ instruction(c) = )c==0(
@ prefixes* !
@ instructionbody !
@ | databody(c) !
@ databody(c) = )c==1(
@ labeldata
@ | )c==2(
@ bytex
@ | )c==3(
@ byte
@ labeldata = dword\x {: m_dword=x; :}
@ instructionbody = onebyteinstr {: opclass=1; :}
@ | byte\x )x==15(
@ twobyteinstr {: opclass=2; :}
@ byte = ?\x {: prxntf("%02X",x);a_loc++;i_col++; :}
@ {@ x @}
@ bytex = ?\x {: m_byte=x; a_loc++; i_col++; :}
@ {@ x @}
@ op = ?\x {: prxntf("%02X",x);a_loc++;i_col++; :}
@ {@ x @}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -