📄 pass2.cpp
字号:
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[2]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end I2R*/
/*------------------------------------------------------------------*/
/* Instruction 3Integer Registers */
void Pass2::I3R(U1 opcode, struct Token *tptr)
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 4;
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[2]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[3]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end I3R*/
/*------------------------------------------------------------------*/
void Pass2::I4R(U1 opcode, struct Token *tptr) /* Instruction 4Integer Registers */
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 5;
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[2]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[3]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[4]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end I4R*/
/*-----------------------------------------------------------------*/
void Pass2::IFC(U1 opcode, struct Token *tptr)
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 6; /* float = 4 bytes */
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_FLT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
t = (*toker).getNextLineToken();
if(t.type==TOK_FLT_CONST)
{
strcat(listing,t.text);
floatToBytecode((F4)t.fval, &encoded[2]);
}
else
{
ERROR2("IFC(): line %lu, expecting float constant %s\n",t.line,t.text);
return;
}
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end IFC*/
/*-----------------------------------------------------------------*/
void Pass2::IFR(U1 opcode, struct Token *tptr)
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 3;
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_FLT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[2]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end IFR*/
/*-----------------------------------------------------------------*/
void Pass2::IF(U1 opcode, struct Token *tptr)
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 2;
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_FLT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end IF*/
/*-----------------------------------------------------------------*/
void Pass2::I2F(U1 opcode, struct Token *tptr)
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 3;
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_FLT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_FLT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[2]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end I2F*/
/*-----------------------------------------------------------------*/
void Pass2::I3F(U1 opcode, struct Token *tptr)
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 4;
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_FLT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_FLT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[2]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_FLT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[3]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end I3F*/
/*-----------------------------------------------------------------*/
void Pass2::IRF(U1 opcode, struct Token *tptr)
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 3;
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_INT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_FLT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[2]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end IRF*/
/*-----------------------------------------------------------------*/
void Pass2::IDF(U1 opcode, struct Token *tptr)
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 3;
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_DBL_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
bret = (*toker).match(&t,TOK_FLT_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[2]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end IDF*/
/*-----------------------------------------------------------------*/
void Pass2::IDC(U1 opcode, struct Token *tptr)
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 10; /* double = 8 bytes */
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_DBL_REG);
if(bret==TRUE)
{
strcat(listing,t.text);
encoded[1]=(U1)t.val;
}
else{ return; }
bret = (*toker).match(&t,TOK_COMMA);
if(bret==TRUE){ strcat(listing,t.text); }
else{ return; }
t = (*toker).getNextLineToken();
if(t.type==TOK_FLT_CONST)
{
strcat(listing,t.text);
doubleToBytecode(t.fval, &encoded[2]);
}
else
{
ERROR2("IDC(): line %lu, expecting double constant %s\n",t.line,t.text);
return;
}
bret = (*toker).match(&t,TOK_NO_MORE);
if(bret!=TRUE){ return; }
commitToFiles(nBYTES);
bytePosPass2 = bytePosPass2 + nBYTES;
return;
}/*end IDC*/
/*-----------------------------------------------------------------*/
void Pass2::IDR(U1 opcode, struct Token *tptr)
{
struct Token t;
U1 bret;
U1 nBYTES;
nBYTES = 3;
sprintf(lineNumber,"%lu",(*tptr).line);
strcpy(listing,(*tptr).text);
strcat(listing," ");
encoded[0]=opcode;
bret = (*toker).match(&t,TOK_DBL_REG);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -