diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2020-06-19 20:49:13 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2020-06-19 20:49:13 +0200 |
commit | 54c57c5de0ae74914fa0676728ba49d0ed46ba14 (patch) | |
tree | b664c47af02c590462b5d9104502c20c1c54389c | |
parent | e5d9e83157f226ee6cad499f2a07b850cdcfc47c (diff) | |
download | compilertests-54c57c5de0ae74914fa0676728ba49d0ed46ba14.tar.gz compilertests-54c57c5de0ae74914fa0676728ba49d0ed46ba14.tar.bz2 |
asm-i386: added nop for easier debugging in emul
-rw-r--r-- | ecomp-c/asm-i386.c | 15 |
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 ) { |