summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2020-06-19 20:49:13 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2020-06-19 20:49:13 +0200
commit54c57c5de0ae74914fa0676728ba49d0ed46ba14 (patch)
treeb664c47af02c590462b5d9104502c20c1c54389c
parente5d9e83157f226ee6cad499f2a07b850cdcfc47c (diff)
downloadcompilertests-54c57c5de0ae74914fa0676728ba49d0ed46ba14.tar.gz
compilertests-54c57c5de0ae74914fa0676728ba49d0ed46ba14.tar.bz2
asm-i386: added nop for easier debugging in emul
-rw-r--r--ecomp-c/asm-i386.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/ecomp-c/asm-i386.c b/ecomp-c/asm-i386.c
index 6f7fa5f..6f599de 100644
--- a/ecomp-c/asm-i386.c
+++ b/ecomp-c/asm-i386.c
@@ -31,6 +31,7 @@
* EB XX jmp rel8
* E9 XX XX XX XX jmp rel32
* F4 hlt
+ * 90 nop
*
* r32/rr
* eax 000
@@ -683,6 +684,7 @@ typedef enum {
OPCODE_JA,
OPCODE_JAE,
OPCODE_HLT,
+ OPCODE_NOP,
OPCODE_UNKNOWN
} Opcode;
@@ -706,6 +708,7 @@ static char *opcodename[OPCODE_UNKNOWN+1] = {
"ja",
"jae",
"hlt",
+ "nop",
"<unknown>"
};
@@ -863,6 +866,13 @@ static OpcodeInfo *parseOpcode( void )
opcode_info->size = 2;
}
break;
+ case 'n':
+ if( strcmp( ident, "nop" ) == 0 ) {
+ opcode_info->opcode = OPCODE_NOP;
+ opcode_info->nof_operands = 0;
+ opcode_info->size = 1;
+ }
+ break;
case 'p':
if( strcmp( ident, "push" ) == 0 ) {
opcode_info->opcode = OPCODE_PUSH;
@@ -1032,6 +1042,7 @@ static void parseOperands( OpcodeInfo *opcode_info )
switch( opcode_info->opcode ) {
case OPCODE_HLT:
+ case OPCODE_NOP:
case OPCODE_PSEUDO_DD:
break;
case OPCODE_PSEUDO_DB: {
@@ -1449,6 +1460,7 @@ static void compute_addresses( OpcodeInfo *opcode_info )
case OPCODE_JA:
case OPCODE_JAE:
case OPCODE_HLT:
+ case OPCODE_NOP:
opcode->addr = LC;
label = opcode->label;
@@ -1535,6 +1547,9 @@ static void emit_opcode( OpcodeInfo *opcode_info )
case OPCODE_HLT:
Emit( "%c", 0xF4 );
break;
+ case OPCODE_NOP:
+ Emit( "%c", 0x90 );
+ break;
case OPCODE_MOV:
if( opcode_info->operand->type == OPERAND_REGISTER &&
opcode_info->operand->next->type == OPERAND_ABSOLUTE ) {