diff --git a/part1/sim8086.c b/part1/sim8086.c index 0e764e4..31a918c 100644 --- a/part1/sim8086.c +++ b/part1/sim8086.c @@ -441,23 +441,23 @@ int main(int argc, char **argv) // NOTE: Parse opcode control bits // ============================================================= S86_ASSERT(stream.size == 1); - uint8_t w = (stream.bytes[0] & 0b0000'1000) >> 4; + uint8_t w = (stream.bytes[0] & 0b0000'1000) >> 3; uint8_t reg = (stream.bytes[0] & 0b0000'0111) >> 0; // NOTE: Parse data payload // ============================================================= stream.bytes[stream.size++] = S86_BufferIteratorNextByte(&buffer_it); - uint16_t data = stream.bytes[stream.size - 1]; + int16_t data = stream.bytes[stream.size - 1]; if (w) { // 16 bit data stream.bytes[stream.size++] = S86_BufferIteratorNextByte(&buffer_it); - data |= (uint16_t)(stream.bytes[stream.size - 1]) << 8; + data |= (int16_t)(stream.bytes[stream.size - 1]) << 8; } // NOTE: Disassemble // ============================================================= S86_Str8 dest_register = REGISTER_FIELD_ENCODING[w][reg]; - S86_PrintLnFmt("mov %.*s, %u", S86_STR8_FMT(dest_register), data); + S86_PrintLnFmt("mov %.*s, %d", S86_STR8_FMT(dest_register), data); } break; case S86_InstructionType_MOVMemToAccum: { diff --git a/project.rdbg b/project.rdbg index 4aa0a50..21eb7d3 100644 Binary files a/project.rdbg and b/project.rdbg differ