Updated the docs to include new jump operands and setup the assembler to handle parsing all the jump instructions.
This commit is contained in:
+6
-2
@@ -2,7 +2,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define OPCODECOUNT 30
|
||||
#define OPCODECOUNT 34
|
||||
|
||||
struct _instruction {
|
||||
char* Name;
|
||||
@@ -41,7 +41,11 @@ struct _instruction instructions[OPCODECOUNT] = {
|
||||
{ "nop", NOP, NoParameter, NoParameter },
|
||||
{ "pop", POP, RegisterParameter, NoParameter },
|
||||
{ "push", PUSH, RegisterParameter, NoParameter },
|
||||
{ "lodb", LODB, RegisterParameter, RegisterParameter}
|
||||
{ "lodb", LODB, RegisterParameter, RegisterParameter},
|
||||
{ "jmpa", JMPA, RegisterParameter, NoParameter},
|
||||
{ "jza", JZA, RegisterParameter, NoParameter},
|
||||
{ "jla", JLA, RegisterParameter, NoParameter},
|
||||
{ "jga", JGA, RegisterParameter, NoParameter},
|
||||
};
|
||||
|
||||
void ExpectParameters(Mnemonic mnemonic, OpcodeParameter* paramOne, OpcodeParameter* paramTwo) {
|
||||
|
||||
@@ -264,6 +264,58 @@ void HandleOpcode(void) {
|
||||
case POP:
|
||||
ExpectRegister();
|
||||
break;
|
||||
case JMP:
|
||||
{
|
||||
Token* arg = PeekToken();
|
||||
|
||||
if (arg->Class == IdentifierClass) {
|
||||
ExpectIdentifier(0, ForwardParser);
|
||||
|
||||
opcode->Value.Mnemonic = JMPA;
|
||||
opcode->Lemexe = "JMPA";
|
||||
}
|
||||
else ExpectRegister();
|
||||
}
|
||||
break;
|
||||
case JZ:
|
||||
{
|
||||
Token* arg = PeekToken();
|
||||
|
||||
if (arg->Class == IdentifierClass) {
|
||||
ExpectIdentifier(0, ForwardParser);
|
||||
|
||||
opcode->Value.Mnemonic = JZA;
|
||||
opcode->Lemexe = "JZA";
|
||||
}
|
||||
else ExpectRegister();
|
||||
}
|
||||
break;
|
||||
case JG:
|
||||
{
|
||||
Token* arg = PeekToken();
|
||||
|
||||
if (arg->Class == IdentifierClass) {
|
||||
ExpectIdentifier(0, ForwardParser);
|
||||
|
||||
opcode->Value.Mnemonic = JGA;
|
||||
opcode->Lemexe = "JGA";
|
||||
}
|
||||
else ExpectRegister();
|
||||
}
|
||||
break;
|
||||
case JL:
|
||||
{
|
||||
Token* arg = PeekToken();
|
||||
|
||||
if (arg->Class == IdentifierClass) {
|
||||
ExpectIdentifier(0, ForwardParser);
|
||||
|
||||
opcode->Value.Mnemonic = JLA;
|
||||
opcode->Lemexe = "JLA";
|
||||
}
|
||||
else ExpectRegister();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user