diff --git a/src/dasm.c b/src/dasm.c index 15e29c7..7747c58 100644 --- a/src/dasm.c +++ b/src/dasm.c @@ -102,8 +102,12 @@ instruction_t parse_inst(u_int8_t *binary, unsigned long size) for (int i = 0; instructions[i].name; i++) { if (instructions[i].opcode != *binary) continue; + if (instructions[i].extended == -1) return instructions[i]; + + if (size < 2) + return invalid_instruction; unsigned mod = binary[1] & 0b111000 >> 3; return extended[instructions[i].extended][mod]; } @@ -126,7 +130,7 @@ int dasm(u_int8_t *binary, unsigned long size) binary += header_size; while (pc < size) { - instruction_t inst = parse_inst(binary); + instruction_t inst = parse_inst(binary, size - pc); if (pc + inst.size > size) { printf("Invalid file. Missing operand for instruction: '%s'. (pc: %lx)\n", inst.name, pc); return 1; diff --git a/src/dasm.h b/src/dasm.h index 4a4e3d7..cc81bc0 100644 --- a/src/dasm.h +++ b/src/dasm.h @@ -40,7 +40,7 @@ typedef struct instruction { const char *name; unsigned size; addressing_mode_t mode[5]; - unsigned extended; + int extended; } instruction_t; extern const instruction_t instructions[]; diff --git a/src/instructions.c b/src/instructions.c index f90d9a5..200269b 100644 --- a/src/instructions.c +++ b/src/instructions.c @@ -2,227 +2,227 @@ #include "dasm.h" const instruction_t instructions[] = { - {.opcode = 0x00, .name = "add", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x01, .name = "add", .mode = {R_M16, REG16, END}, .size = 3}, - {.opcode = 0x02, .name = "add", .mode = {REG8, R_M8, END}, .size = 2}, - {.opcode = 0x03, .name = "add", .mode = {REG16, R_M16, END}, .size = 3}, - {.opcode = 0x04, .name = "add al", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0x05, .name = "add ax", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0x06, .name = "push es", .mode = {END}, .size = 1}, - {.opcode = 0x07, .name = "pop es", .mode = {END}, .size = 1}, - {.opcode = 0x08, .name = "or", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x09, .name = "or", .mode = {R_M16, REG16, END}, .size = 3}, - {.opcode = 0x0A, .name = "or", .mode = {REG8, R_M8, END}, .size = 2}, - {.opcode = 0x0B, .name = "or", .mode = {REG16, R_M16, END}, .size = 3}, - {.opcode = 0x0C, .name = "or al", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0x0D, .name = "or ax", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0x0E, .name = "push cs", .mode = {END}, .size = 1}, + {.opcode = 0x00, .extended = -1, .name = "add", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x01, .extended = -1, .name = "add", .mode = {R_M16, REG16, END}, .size = 3}, + {.opcode = 0x02, .extended = -1, .name = "add", .mode = {REG8, R_M8, END}, .size = 2}, + {.opcode = 0x03, .extended = -1, .name = "add", .mode = {REG16, R_M16, END}, .size = 3}, + {.opcode = 0x04, .extended = -1, .name = "add al", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0x05, .extended = -1, .name = "add ax", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0x06, .extended = -1, .name = "push es", .mode = {END}, .size = 1}, + {.opcode = 0x07, .extended = -1, .name = "pop es", .mode = {END}, .size = 1}, + {.opcode = 0x08, .extended = -1, .name = "or", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x09, .extended = -1, .name = "or", .mode = {R_M16, REG16, END}, .size = 3}, + {.opcode = 0x0A, .extended = -1, .name = "or", .mode = {REG8, R_M8, END}, .size = 2}, + {.opcode = 0x0B, .extended = -1, .name = "or", .mode = {REG16, R_M16, END}, .size = 3}, + {.opcode = 0x0C, .extended = -1, .name = "or al", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0x0D, .extended = -1, .name = "or ax", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0x0E, .extended = -1, .name = "push cs", .mode = {END}, .size = 1}, - {.opcode = 0x10, .name = "adc", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x11, .name = "adc", .mode = {R_M16, REG16, END}, .size = 3}, - {.opcode = 0x12, .name = "adc", .mode = {REG8, R_M8, END}, .size = 2}, - {.opcode = 0x13, .name = "adc", .mode = {REG16, R_M16, END}, .size = 3}, - {.opcode = 0x14, .name = "adc al", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0x15, .name = "adc ax", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0x16, .name = "push ss", .mode = {END}, .size = 1}, - {.opcode = 0x17, .name = "pop ss", .mode = {END}, .size = 1}, - {.opcode = 0x18, .name = "sbb", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x19, .name = "sbb", .mode = {R_M16, REG16, END}, .size = 3}, - {.opcode = 0x1A, .name = "sbb", .mode = {REG8, R_M8, END}, .size = 2}, - {.opcode = 0x1B, .name = "sbb", .mode = {REG16, R_M16, END}, .size = 3}, - {.opcode = 0x1C, .name = "sbb al", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0x1D, .name = "sbb ax", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0x1E, .name = "push ds", .mode = {END}, .size = 1}, - {.opcode = 0x1F, .name = "pop ds", .mode = {END}, .size = 1}, - {.opcode = 0x20, .name = "and", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x21, .name = "and", .mode = {R_M16, REG16, END}, .size = 2}, - {.opcode = 0x22, .name = "and", .mode = {REG8, R_M8, END}, .size = 2}, - {.opcode = 0x23, .name = "and", .mode = {REG16, R_M16, END}, .size = 2}, - {.opcode = 0x24, .name = "and al", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0x25, .name = "and ax", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0x10, .extended = -1, .name = "adc", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x11, .extended = -1, .name = "adc", .mode = {R_M16, REG16, END}, .size = 3}, + {.opcode = 0x12, .extended = -1, .name = "adc", .mode = {REG8, R_M8, END}, .size = 2}, + {.opcode = 0x13, .extended = -1, .name = "adc", .mode = {REG16, R_M16, END}, .size = 3}, + {.opcode = 0x14, .extended = -1, .name = "adc al", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0x15, .extended = -1, .name = "adc ax", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0x16, .extended = -1, .name = "push ss", .mode = {END}, .size = 1}, + {.opcode = 0x17, .extended = -1, .name = "pop ss", .mode = {END}, .size = 1}, + {.opcode = 0x18, .extended = -1, .name = "sbb", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x19, .extended = -1, .name = "sbb", .mode = {R_M16, REG16, END}, .size = 3}, + {.opcode = 0x1A, .extended = -1, .name = "sbb", .mode = {REG8, R_M8, END}, .size = 2}, + {.opcode = 0x1B, .extended = -1, .name = "sbb", .mode = {REG16, R_M16, END}, .size = 3}, + {.opcode = 0x1C, .extended = -1, .name = "sbb al", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0x1D, .extended = -1, .name = "sbb ax", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0x1E, .extended = -1, .name = "push ds", .mode = {END}, .size = 1}, + {.opcode = 0x1F, .extended = -1, .name = "pop ds", .mode = {END}, .size = 1}, + {.opcode = 0x20, .extended = -1, .name = "and", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x21, .extended = -1, .name = "and", .mode = {R_M16, REG16, END}, .size = 2}, + {.opcode = 0x22, .extended = -1, .name = "and", .mode = {REG8, R_M8, END}, .size = 2}, + {.opcode = 0x23, .extended = -1, .name = "and", .mode = {REG16, R_M16, END}, .size = 2}, + {.opcode = 0x24, .extended = -1, .name = "and al", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0x25, .extended = -1, .name = "and ax", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0x27, .name = "daa", .mode = {END}, .size = 1}, - {.opcode = 0x28, .name = "sub", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x29, .name = "sub", .mode = {R_M16, REG16, END}, .size = 2}, - {.opcode = 0x2A, .name = "sub", .mode = {REG8, R_M8, END}, .size = 2}, - {.opcode = 0x2B, .name = "sub", .mode = {REG16, R_M16, END}, .size = 2}, - {.opcode = 0x2C, .name = "sub al", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0x2D, .name = "sub ax", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0x27, .extended = -1, .name = "daa", .mode = {END}, .size = 1}, + {.opcode = 0x28, .extended = -1, .name = "sub", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x29, .extended = -1, .name = "sub", .mode = {R_M16, REG16, END}, .size = 2}, + {.opcode = 0x2A, .extended = -1, .name = "sub", .mode = {REG8, R_M8, END}, .size = 2}, + {.opcode = 0x2B, .extended = -1, .name = "sub", .mode = {REG16, R_M16, END}, .size = 2}, + {.opcode = 0x2C, .extended = -1, .name = "sub al", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0x2D, .extended = -1, .name = "sub ax", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0x2F, .name = "das", .mode = {END}, .size = 1}, - {.opcode = 0x30, .name = "xor", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x31, .name = "xor", .mode = {R_M16, REG16, END}, .size = 2}, - {.opcode = 0x32, .name = "xor", .mode = {REG8, R_M8, END}, .size = 2}, - {.opcode = 0x33, .name = "xor", .mode = {REG16, R_M16, END}, .size = 2}, - {.opcode = 0x34, .name = "xor al", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0x35, .name = "xor ax", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0x2F, .extended = -1, .name = "das", .mode = {END}, .size = 1}, + {.opcode = 0x30, .extended = -1, .name = "xor", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x31, .extended = -1, .name = "xor", .mode = {R_M16, REG16, END}, .size = 2}, + {.opcode = 0x32, .extended = -1, .name = "xor", .mode = {REG8, R_M8, END}, .size = 2}, + {.opcode = 0x33, .extended = -1, .name = "xor", .mode = {REG16, R_M16, END}, .size = 2}, + {.opcode = 0x34, .extended = -1, .name = "xor al", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0x35, .extended = -1, .name = "xor ax", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0x37, .name = "aaa", .mode = {END}, .size = 1}, - {.opcode = 0x38, .name = "cmp", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x39, .name = "cmp", .mode = {R_M16, REG16, END}, .size = 3}, - {.opcode = 0x3A, .name = "cmp", .mode = {REG8, R_M8, END}, .size = 2}, - {.opcode = 0x3B, .name = "cmp", .mode = {REG16, R_M16, END}, .size = 3}, - {.opcode = 0x3C, .name = "cmp al", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0x3D, .name = "cmp ax", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0x37, .extended = -1, .name = "aaa", .mode = {END}, .size = 1}, + {.opcode = 0x38, .extended = -1, .name = "cmp", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x39, .extended = -1, .name = "cmp", .mode = {R_M16, REG16, END}, .size = 3}, + {.opcode = 0x3A, .extended = -1, .name = "cmp", .mode = {REG8, R_M8, END}, .size = 2}, + {.opcode = 0x3B, .extended = -1, .name = "cmp", .mode = {REG16, R_M16, END}, .size = 3}, + {.opcode = 0x3C, .extended = -1, .name = "cmp al", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0x3D, .extended = -1, .name = "cmp ax", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0x3F, .name = "ass", .mode = {END}, .size = 1}, - {.opcode = 0x40, .name = "inc ax", .mode = {END}, .size = 1}, - {.opcode = 0x41, .name = "inc cx", .mode = {END}, .size = 1}, - {.opcode = 0x42, .name = "inc dx", .mode = {END}, .size = 1}, - {.opcode = 0x43, .name = "inc bx", .mode = {END}, .size = 1}, - {.opcode = 0x44, .name = "inc sp", .mode = {END}, .size = 1}, - {.opcode = 0x45, .name = "inc bp", .mode = {END}, .size = 1}, - {.opcode = 0x46, .name = "inc si", .mode = {END}, .size = 1}, - {.opcode = 0x47, .name = "inc di", .mode = {END}, .size = 1}, - {.opcode = 0x48, .name = "dec ax", .mode = {END}, .size = 1}, - {.opcode = 0x49, .name = "dec cx", .mode = {END}, .size = 1}, - {.opcode = 0x4A, .name = "dec dx", .mode = {END}, .size = 1}, - {.opcode = 0x4B, .name = "dec bx", .mode = {END}, .size = 1}, - {.opcode = 0x4C, .name = "dec sp", .mode = {END}, .size = 1}, - {.opcode = 0x4D, .name = "dec bp", .mode = {END}, .size = 1}, - {.opcode = 0x4E, .name = "dec si", .mode = {END}, .size = 1}, - {.opcode = 0x4F, .name = "dec di", .mode = {END}, .size = 1}, - {.opcode = 0x50, .name = "push ax", .mode = {END}, .size = 1}, - {.opcode = 0x51, .name = "push cx", .mode = {END}, .size = 1}, - {.opcode = 0x52, .name = "push dx", .mode = {END}, .size = 1}, - {.opcode = 0x53, .name = "push bx", .mode = {END}, .size = 1}, - {.opcode = 0x54, .name = "push sp", .mode = {END}, .size = 1}, - {.opcode = 0x55, .name = "push bp", .mode = {END}, .size = 1}, - {.opcode = 0x56, .name = "push si", .mode = {END}, .size = 1}, - {.opcode = 0x57, .name = "push di", .mode = {END}, .size = 1}, - {.opcode = 0x58, .name = "pop ax", .mode = {END}, .size = 1}, - {.opcode = 0x59, .name = "pop cx", .mode = {END}, .size = 1}, - {.opcode = 0x5A, .name = "pop dx", .mode = {END}, .size = 1}, - {.opcode = 0x5B, .name = "pop bx", .mode = {END}, .size = 1}, - {.opcode = 0x5C, .name = "pop sp", .mode = {END}, .size = 1}, - {.opcode = 0x5D, .name = "pop bp", .mode = {END}, .size = 1}, - {.opcode = 0x5E, .name = "pop si", .mode = {END}, .size = 1}, - {.opcode = 0x5F, .name = "pop di", .mode = {END}, .size = 1}, - {.opcode = 0x70, .name = "jo", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x71, .name = "jno", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x72, .name = "jc", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x73, .name = "jnc", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x74, .name = "jz", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x75, .name = "jnz", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x76, .name = "jna", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x77, .name = "ja", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x78, .name = "js", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x79, .name = "jns", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x7A, .name = "jpe", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x7B, .name = "jpo", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x7C, .name = "jl", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x7D, .name = "jnl", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x7E, .name = "jng", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x7F, .name = "jg", .mode = {REL8, END}, .size = 2}, - {.opcode = 0x80, .extended = 0, .name = "EXTENDED", .mode = {END}, .size = 1}, - {.opcode = 0x81, .extended = 1, .name = "EXTENDED", .mode = {END}, .size = 1}, - {.opcode = 0x83, .extended = 2, .name = "EXTENDED", .mode = {END}, .size = 1}, - {.opcode = 0x84, .name = "test", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x85, .name = "test", .mode = {R_M16, REG16, END}, .size = 3}, - {.opcode = 0x86, .name = "xchg", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x87, .name = "xchg", .mode = {R_M16, REG16, END}, .size = 3}, - {.opcode = 0x88, .name = "mov", .mode = {R_M8, REG8, END}, .size = 2}, - {.opcode = 0x89, .name = "mov", .mode = {R_M16, REG16, END}, .size = 3}, - {.opcode = 0x8A, .name = "mov", .mode = {REG8, R_M8, END}, .size = 2}, - {.opcode = 0x8B, .name = "mov", .mode = {REG16, R_M16, END}, .size = 3}, - // {.opcode = 0x8C, .name = "mov", .mode = {R_M16, sreg, END}, .size = 3}, - {.opcode = 0x8D, .name = "lea", .mode = {REG16, R_M16, END}, .size = 3}, - // {.opcode = 0x8E, .name = "mov", .mode = {sreg, R_M16, END}, .size = 3}, - {.opcode = 0x8F, .name = "pop", .mode = {R_M16, END}, .size = 3}, - {.opcode = 0x90, .name = "xchg ax,ax", .mode = {END}, .size = 1}, - {.opcode = 0x91, .name = "xchg cx,ax", .mode = {END}, .size = 1}, - {.opcode = 0x92, .name = "xchg dx,ax", .mode = {END}, .size = 1}, - {.opcode = 0x93, .name = "xchg bx,ax", .mode = {END}, .size = 1}, - {.opcode = 0x94, .name = "xchg sp,ax", .mode = {END}, .size = 1}, - {.opcode = 0x95, .name = "xchg bp,ax", .mode = {END}, .size = 1}, - {.opcode = 0x96, .name = "xchg si,ax", .mode = {END}, .size = 1}, - {.opcode = 0x97, .name = "xchg di,ax", .mode = {END}, .size = 1}, - {.opcode = 0x98, .name = "cbw", .mode = {END}, .size = 1}, - {.opcode = 0x99, .name = "cwd", .mode = {END}, .size = 1}, - // {.opcode = 0x9A, .name = "call", .mode = {CALL_INTER, END}, .size = 1}, - {.opcode = 0x9B, .name = "wait", .mode = {END}, .size = 1}, - {.opcode = 0x9C, .name = "pushf", .mode = {END}, .size = 1}, - {.opcode = 0x9D, .name = "popf", .mode = {END}, .size = 1}, - {.opcode = 0x9E, .name = "sahf", .mode = {END}, .size = 1}, - {.opcode = 0x9F, .name = "lahf", .mode = {END}, .size = 1}, - // {.opcode = 0xA0, .name = "mov al,%s", .mode = {moffs16, END}, .size = 1}, - // {.opcode = 0xA1, .name = "mov ax,%s", .mode = {moffs16, END}, .size = 1}, - // {.opcode = 0xA2, .name = "mov %s,al", .mode = {moffs16, END}, .size = 1}, - // {.opcode = 0xA3, .name = "mov %s,ax", .mode = {moffs16, END}, .size = 1}, - {.opcode = 0xA4, .name = "movsb", .mode = {END}, .size = 1}, - {.opcode = 0xA5, .name = "movsw", .mode = {END}, .size = 1}, - {.opcode = 0xA6, .name = "cmpsb", .mode = {END}, .size = 1}, - {.opcode = 0xA7, .name = "cmpsw", .mode = {END}, .size = 1}, - {.opcode = 0xA8, .name = "test al,", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xA9, .name = "test ax,", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xAA, .name = "stosb", .mode = {END}, .size = 1}, - {.opcode = 0xAB, .name = "stosw", .mode = {END}, .size = 1}, - {.opcode = 0xAC, .name = "lodsb", .mode = {END}, .size = 1}, - {.opcode = 0xAD, .name = "lodsw", .mode = {END}, .size = 1}, - {.opcode = 0xAE, .name = "scasb", .mode = {END}, .size = 1}, - {.opcode = 0xAF, .name = "scasw", .mode = {END}, .size = 1}, - {.opcode = 0xB0, .name = "mov al", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xB1, .name = "mov cl", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xB2, .name = "mov dl", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xB3, .name = "mov bl", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xB4, .name = "mov ah", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xB5, .name = "mov ch", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xB6, .name = "mov dh", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xB7, .name = "mov bh", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xB8, .name = "mov ax", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xB9, .name = "mov cx", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xBA, .name = "mov dx", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xBB, .name = "mov bx", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xBC, .name = "mov sp", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xBD, .name = "mov bp", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xBE, .name = "mov si", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xBF, .name = "mov di", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0x3F, .extended = -1, .name = "ass", .mode = {END}, .size = 1}, + {.opcode = 0x40, .extended = -1, .name = "inc ax", .mode = {END}, .size = 1}, + {.opcode = 0x41, .extended = -1, .name = "inc cx", .mode = {END}, .size = 1}, + {.opcode = 0x42, .extended = -1, .name = "inc dx", .mode = {END}, .size = 1}, + {.opcode = 0x43, .extended = -1, .name = "inc bx", .mode = {END}, .size = 1}, + {.opcode = 0x44, .extended = -1, .name = "inc sp", .mode = {END}, .size = 1}, + {.opcode = 0x45, .extended = -1, .name = "inc bp", .mode = {END}, .size = 1}, + {.opcode = 0x46, .extended = -1, .name = "inc si", .mode = {END}, .size = 1}, + {.opcode = 0x47, .extended = -1, .name = "inc di", .mode = {END}, .size = 1}, + {.opcode = 0x48, .extended = -1, .name = "dec ax", .mode = {END}, .size = 1}, + {.opcode = 0x49, .extended = -1, .name = "dec cx", .mode = {END}, .size = 1}, + {.opcode = 0x4A, .extended = -1, .name = "dec dx", .mode = {END}, .size = 1}, + {.opcode = 0x4B, .extended = -1, .name = "dec bx", .mode = {END}, .size = 1}, + {.opcode = 0x4C, .extended = -1, .name = "dec sp", .mode = {END}, .size = 1}, + {.opcode = 0x4D, .extended = -1, .name = "dec bp", .mode = {END}, .size = 1}, + {.opcode = 0x4E, .extended = -1, .name = "dec si", .mode = {END}, .size = 1}, + {.opcode = 0x4F, .extended = -1, .name = "dec di", .mode = {END}, .size = 1}, + {.opcode = 0x50, .extended = -1, .name = "push ax", .mode = {END}, .size = 1}, + {.opcode = 0x51, .extended = -1, .name = "push cx", .mode = {END}, .size = 1}, + {.opcode = 0x52, .extended = -1, .name = "push dx", .mode = {END}, .size = 1}, + {.opcode = 0x53, .extended = -1, .name = "push bx", .mode = {END}, .size = 1}, + {.opcode = 0x54, .extended = -1, .name = "push sp", .mode = {END}, .size = 1}, + {.opcode = 0x55, .extended = -1, .name = "push bp", .mode = {END}, .size = 1}, + {.opcode = 0x56, .extended = -1, .name = "push si", .mode = {END}, .size = 1}, + {.opcode = 0x57, .extended = -1, .name = "push di", .mode = {END}, .size = 1}, + {.opcode = 0x58, .extended = -1, .name = "pop ax", .mode = {END}, .size = 1}, + {.opcode = 0x59, .extended = -1, .name = "pop cx", .mode = {END}, .size = 1}, + {.opcode = 0x5A, .extended = -1, .name = "pop dx", .mode = {END}, .size = 1}, + {.opcode = 0x5B, .extended = -1, .name = "pop bx", .mode = {END}, .size = 1}, + {.opcode = 0x5C, .extended = -1, .name = "pop sp", .mode = {END}, .size = 1}, + {.opcode = 0x5D, .extended = -1, .name = "pop bp", .mode = {END}, .size = 1}, + {.opcode = 0x5E, .extended = -1, .name = "pop si", .mode = {END}, .size = 1}, + {.opcode = 0x5F, .extended = -1, .name = "pop di", .mode = {END}, .size = 1}, + {.opcode = 0x70, .extended = -1, .name = "jo", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x71, .extended = -1, .name = "jno", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x72, .extended = -1, .name = "jc", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x73, .extended = -1, .name = "jnc", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x74, .extended = -1, .name = "jz", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x75, .extended = -1, .name = "jnz", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x76, .extended = -1, .name = "jna", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x77, .extended = -1, .name = "ja", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x78, .extended = -1, .name = "js", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x79, .extended = -1, .name = "jns", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x7A, .extended = -1, .name = "jpe", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x7B, .extended = -1, .name = "jpo", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x7C, .extended = -1, .name = "jl", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x7D, .extended = -1, .name = "jnl", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x7E, .extended = -1, .name = "jng", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x7F, .extended = -1, .name = "jg", .mode = {REL8, END}, .size = 2}, + {.opcode = 0x80, .extended = 0, .name = "EXTENDED", .mode = {END}, .size = 1}, + {.opcode = 0x81, .extended = 1, .name = "EXTENDED", .mode = {END}, .size = 1}, + {.opcode = 0x83, .extended = 2, .name = "EXTENDED", .mode = {END}, .size = 1}, + {.opcode = 0x84, .extended = -1, .name = "test", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x85, .extended = -1, .name = "test", .mode = {R_M16, REG16, END}, .size = 3}, + {.opcode = 0x86, .extended = -1, .name = "xchg", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x87, .extended = -1, .name = "xchg", .mode = {R_M16, REG16, END}, .size = 3}, + {.opcode = 0x88, .extended = -1, .name = "mov", .mode = {R_M8, REG8, END}, .size = 2}, + {.opcode = 0x89, .extended = -1, .name = "mov", .mode = {R_M16, REG16, END}, .size = 3}, + {.opcode = 0x8A, .extended = -1, .name = "mov", .mode = {REG8, R_M8, END}, .size = 2}, + {.opcode = 0x8B, .extended = -1, .name = "mov", .mode = {REG16, R_M16, END}, .size = 3}, + // {.opcode = 0x8C, .extended = -1, .name = "mov", .mode = {R_M16, sreg, END}, .size = 3}, + {.opcode = 0x8D, .extended = -1, .name = "lea", .mode = {REG16, R_M16, END}, .size = 3}, + // {.opcode = 0x8E, .extended = -1, .name = "mov", .mode = {sreg, R_M16, END}, .size = 3}, + {.opcode = 0x8F, .extended = -1, .name = "pop", .mode = {R_M16, END}, .size = 3}, + {.opcode = 0x90, .extended = -1, .name = "xchg ax,ax", .mode = {END}, .size = 1}, + {.opcode = 0x91, .extended = -1, .name = "xchg cx,ax", .mode = {END}, .size = 1}, + {.opcode = 0x92, .extended = -1, .name = "xchg dx,ax", .mode = {END}, .size = 1}, + {.opcode = 0x93, .extended = -1, .name = "xchg bx,ax", .mode = {END}, .size = 1}, + {.opcode = 0x94, .extended = -1, .name = "xchg sp,ax", .mode = {END}, .size = 1}, + {.opcode = 0x95, .extended = -1, .name = "xchg bp,ax", .mode = {END}, .size = 1}, + {.opcode = 0x96, .extended = -1, .name = "xchg si,ax", .mode = {END}, .size = 1}, + {.opcode = 0x97, .extended = -1, .name = "xchg di,ax", .mode = {END}, .size = 1}, + {.opcode = 0x98, .extended = -1, .name = "cbw", .mode = {END}, .size = 1}, + {.opcode = 0x99, .extended = -1, .name = "cwd", .mode = {END}, .size = 1}, + // {.opcode = 0x9A, .extended = -1, .name = "call", .mode = {CALL_INTER, END}, .size = 1}, + {.opcode = 0x9B, .extended = -1, .name = "wait", .mode = {END}, .size = 1}, + {.opcode = 0x9C, .extended = -1, .name = "pushf", .mode = {END}, .size = 1}, + {.opcode = 0x9D, .extended = -1, .name = "popf", .mode = {END}, .size = 1}, + {.opcode = 0x9E, .extended = -1, .name = "sahf", .mode = {END}, .size = 1}, + {.opcode = 0x9F, .extended = -1, .name = "lahf", .mode = {END}, .size = 1}, + // {.opcode = 0xA0, .extended = -1, .name = "mov al,%s", .mode = {moffs16, END}, .size = 1}, + // {.opcode = 0xA1, .extended = -1, .name = "mov ax,%s", .mode = {moffs16, END}, .size = 1}, + // {.opcode = 0xA2, .extended = -1, .name = "mov %s,al", .mode = {moffs16, END}, .size = 1}, + // {.opcode = 0xA3, .extended = -1, .name = "mov %s,ax", .mode = {moffs16, END}, .size = 1}, + {.opcode = 0xA4, .extended = -1, .name = "movsb", .mode = {END}, .size = 1}, + {.opcode = 0xA5, .extended = -1, .name = "movsw", .mode = {END}, .size = 1}, + {.opcode = 0xA6, .extended = -1, .name = "cmpsb", .mode = {END}, .size = 1}, + {.opcode = 0xA7, .extended = -1, .name = "cmpsw", .mode = {END}, .size = 1}, + {.opcode = 0xA8, .extended = -1, .name = "test al,", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xA9, .extended = -1, .name = "test ax,", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0xAA, .extended = -1, .name = "stosb", .mode = {END}, .size = 1}, + {.opcode = 0xAB, .extended = -1, .name = "stosw", .mode = {END}, .size = 1}, + {.opcode = 0xAC, .extended = -1, .name = "lodsb", .mode = {END}, .size = 1}, + {.opcode = 0xAD, .extended = -1, .name = "lodsw", .mode = {END}, .size = 1}, + {.opcode = 0xAE, .extended = -1, .name = "scasb", .mode = {END}, .size = 1}, + {.opcode = 0xAF, .extended = -1, .name = "scasw", .mode = {END}, .size = 1}, + {.opcode = 0xB0, .extended = -1, .name = "mov al", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xB1, .extended = -1, .name = "mov cl", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xB2, .extended = -1, .name = "mov dl", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xB3, .extended = -1, .name = "mov bl", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xB4, .extended = -1, .name = "mov ah", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xB5, .extended = -1, .name = "mov ch", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xB6, .extended = -1, .name = "mov dh", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xB7, .extended = -1, .name = "mov bh", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xB8, .extended = -1, .name = "mov ax", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0xB9, .extended = -1, .name = "mov cx", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0xBA, .extended = -1, .name = "mov dx", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0xBB, .extended = -1, .name = "mov bx", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0xBC, .extended = -1, .name = "mov sp", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0xBD, .extended = -1, .name = "mov bp", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0xBE, .extended = -1, .name = "mov si", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0xBF, .extended = -1, .name = "mov di", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xC2, .name = "ret", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xC3, .name = "ret", .mode = {END}, .size = 1}, - {.opcode = 0xC4, .name = "les", .mode = {REG16, R_M16, END}, .size = 3}, - {.opcode = 0xC5, .name = "lds", .mode = {R_M16, REG16, END}, .size = 3}, - {.opcode = 0xC6, .name = "mov", .mode = {R_M16, IMM8, END}, .size = 4}, - {.opcode = 0xC7, .name = "mov", .mode = {R_M16, IMM16, END}, .size = 5}, - {.opcode = 0xCA, .name = "retf", .mode = {IMM16, END}, .size = 3}, - {.opcode = 0xCB, .name = "retf", .mode = {END}, .size = 1}, - {.opcode = 0xCC, .name = "int3", .mode = {END}, .size = 1}, - {.opcode = 0xCD, .name = "int", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xCE, .name = "into", .mode = {END}, .size = 1}, - {.opcode = 0xCF, .name = "iret", .mode = {END}, .size = 1}, + {.opcode = 0xC2, .extended = -1, .name = "ret", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0xC3, .extended = -1, .name = "ret", .mode = {END}, .size = 1}, + {.opcode = 0xC4, .extended = -1, .name = "les", .mode = {REG16, R_M16, END}, .size = 3}, + {.opcode = 0xC5, .extended = -1, .name = "lds", .mode = {R_M16, REG16, END}, .size = 3}, + {.opcode = 0xC6, .extended = -1, .name = "mov", .mode = {R_M16, IMM8, END}, .size = 4}, + {.opcode = 0xC7, .extended = -1, .name = "mov", .mode = {R_M16, IMM16, END}, .size = 5}, + {.opcode = 0xCA, .extended = -1, .name = "retf", .mode = {IMM16, END}, .size = 3}, + {.opcode = 0xCB, .extended = -1, .name = "retf", .mode = {END}, .size = 1}, + {.opcode = 0xCC, .extended = -1, .name = "int3", .mode = {END}, .size = 1}, + {.opcode = 0xCD, .extended = -1, .name = "int", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xCE, .extended = -1, .name = "into", .mode = {END}, .size = 1}, + {.opcode = 0xCF, .extended = -1, .name = "iret", .mode = {END}, .size = 1}, - {.opcode = 0xD4, .name = "aam", .mode = {END}, .size = 1}, - {.opcode = 0xD5, .name = "aad", .mode = {END}, .size = 1}, - {.opcode = 0xD7, .name = "xlatb", .mode = {END}, .size = 1}, + {.opcode = 0xD4, .extended = -1, .name = "aam", .mode = {END}, .size = 1}, + {.opcode = 0xD5, .extended = -1, .name = "aad", .mode = {END}, .size = 1}, + {.opcode = 0xD7, .extended = -1, .name = "xlatb", .mode = {END}, .size = 1}, - {.opcode = 0xE0, .name = "loopne", .mode = {REL8, END}, .size = 2}, - {.opcode = 0xE1, .name = "loope", .mode = {REL8, END}, .size = 2}, - {.opcode = 0xE2, .name = "loop", .mode = {REL8, END}, .size = 2}, - {.opcode = 0xE3, .name = "jcxz", .mode = {REL8, END}, .size = 2}, - {.opcode = 0xE4, .name = "in al,%s", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xE5, .name = "in ax,%s", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xE6, .name = "out %s,al", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xE7, .name = "out %s,ax", .mode = {IMM8, END}, .size = 2}, - {.opcode = 0xE8, .name = "call", .mode = {REL16, END}, .size = 3}, - {.opcode = 0xE9, .name = "jmp", .mode = {REL16, END}, .size = 3}, - // {.opcode = 0xEA, .name = "jmp", .mode = {CALL_INTER, END}, .size = 1}, - {.opcode = 0xEB, .name = "jmp short", .mode = {REL8, END}, .size = 2}, - {.opcode = 0xEC, .name = "in al,dx", .mode = {END}, .size = 1}, - {.opcode = 0xED, .name = "in ax,dx", .mode = {END}, .size = 1}, - {.opcode = 0xEE, .name = "out dx,al", .mode = {END}, .size = 1}, - {.opcode = 0xEF, .name = "out dx,ax", .mode = {END}, .size = 1}, - {.opcode = 0xF0, .name = "lock", .mode = {END}, .size = 1}, - {.opcode = 0xF2, .name = "repne", .mode = {END}, .size = 1}, - {.opcode = 0xF3, .name = "rep", .mode = {END}, .size = 1}, - {.opcode = 0xF4, .name = "hlt", .mode = {END}, .size = 1}, - {.opcode = 0xF5, .name = "cmc", .mode = {END}, .size = 1}, + {.opcode = 0xE0, .extended = -1, .name = "loopne", .mode = {REL8, END}, .size = 2}, + {.opcode = 0xE1, .extended = -1, .name = "loope", .mode = {REL8, END}, .size = 2}, + {.opcode = 0xE2, .extended = -1, .name = "loop", .mode = {REL8, END}, .size = 2}, + {.opcode = 0xE3, .extended = -1, .name = "jcxz", .mode = {REL8, END}, .size = 2}, + {.opcode = 0xE4, .extended = -1, .name = "in al,%s", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xE5, .extended = -1, .name = "in ax,%s", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xE6, .extended = -1, .name = "out %s,al", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xE7, .extended = -1, .name = "out %s,ax", .mode = {IMM8, END}, .size = 2}, + {.opcode = 0xE8, .extended = -1, .name = "call", .mode = {REL16, END}, .size = 3}, + {.opcode = 0xE9, .extended = -1, .name = "jmp", .mode = {REL16, END}, .size = 3}, + // {.opcode = 0xEA, .extended = -1, .name = "jmp", .mode = {CALL_INTER, END}, .size = 1}, + {.opcode = 0xEB, .extended = -1, .name = "jmp short", .mode = {REL8, END}, .size = 2}, + {.opcode = 0xEC, .extended = -1, .name = "in al,dx", .mode = {END}, .size = 1}, + {.opcode = 0xED, .extended = -1, .name = "in ax,dx", .mode = {END}, .size = 1}, + {.opcode = 0xEE, .extended = -1, .name = "out dx,al", .mode = {END}, .size = 1}, + {.opcode = 0xEF, .extended = -1, .name = "out dx,ax", .mode = {END}, .size = 1}, + {.opcode = 0xF0, .extended = -1, .name = "lock", .mode = {END}, .size = 1}, + {.opcode = 0xF2, .extended = -1, .name = "repne", .mode = {END}, .size = 1}, + {.opcode = 0xF3, .extended = -1, .name = "rep", .mode = {END}, .size = 1}, + {.opcode = 0xF4, .extended = -1, .name = "hlt", .mode = {END}, .size = 1}, + {.opcode = 0xF5, .extended = -1, .name = "cmc", .mode = {END}, .size = 1}, - {.opcode = 0xF8, .name = "clc", .mode = {END}, .size = 1}, - {.opcode = 0xF9, .name = "stc", .mode = {END}, .size = 1}, - {.opcode = 0xFA, .name = "cli", .mode = {END}, .size = 1}, - {.opcode = 0xFB, .name = "sti", .mode = {END}, .size = 1}, - {.opcode = 0xFC, .name = "cld", .mode = {END}, .size = 1}, - {.opcode = 0xFD, .name = "std", .mode = {END}, .size = 1}, + {.opcode = 0xF8, .extended = -1, .name = "clc", .mode = {END}, .size = 1}, + {.opcode = 0xF9, .extended = -1, .name = "stc", .mode = {END}, .size = 1}, + {.opcode = 0xFA, .extended = -1, .name = "cli", .mode = {END}, .size = 1}, + {.opcode = 0xFB, .extended = -1, .name = "sti", .mode = {END}, .size = 1}, + {.opcode = 0xFC, .extended = -1, .name = "cld", .mode = {END}, .size = 1}, + {.opcode = 0xFD, .extended = -1, .name = "std", .mode = {END}, .size = 1}, {.name = NULL} }; @@ -230,36 +230,36 @@ const instruction_t instructions[] = { const instruction_t extended[][8] = { // 0x80 extended { - {.opcode = 0x00, .name = "add", .mode = {R_M8, IMM8, END}, .size = 2}, - {.opcode = 0x01, .name = "or", .mode = {R_M8, IMM8, END}, .size = 2}, - {.opcode = 0x02, .name = "adc", .mode = {R_M8, IMM8, END}, .size = 2}, - {.opcode = 0x03, .name = "sbb", .mode = {R_M8, IMM8, END}, .size = 2}, - {.opcode = 0x04, .name = "and", .mode = {R_M8, IMM8, END}, .size = 2}, - {.opcode = 0x05, .name = "sub", .mode = {R_M8, IMM8, END}, .size = 2}, - {.opcode = 0x06, .name = "xor", .mode = {R_M8, IMM8, END}, .size = 2}, - {.opcode = 0x07, .name = "cmp", .mode = {R_M8, IMM8, END}, .size = 2}, + {.opcode = 0x00, .extended = -1, .name = "add", .mode = {R_M8, IMM8, END}, .size = 2}, + {.opcode = 0x01, .extended = -1, .name = "or", .mode = {R_M8, IMM8, END}, .size = 2}, + {.opcode = 0x02, .extended = -1, .name = "adc", .mode = {R_M8, IMM8, END}, .size = 2}, + {.opcode = 0x03, .extended = -1, .name = "sbb", .mode = {R_M8, IMM8, END}, .size = 2}, + {.opcode = 0x04, .extended = -1, .name = "and", .mode = {R_M8, IMM8, END}, .size = 2}, + {.opcode = 0x05, .extended = -1, .name = "sub", .mode = {R_M8, IMM8, END}, .size = 2}, + {.opcode = 0x06, .extended = -1, .name = "xor", .mode = {R_M8, IMM8, END}, .size = 2}, + {.opcode = 0x07, .extended = -1, .name = "cmp", .mode = {R_M8, IMM8, END}, .size = 2}, }, // 0x81 extended { - {.opcode = 0x00, .name = "add", .mode = {R_M16, IMM16, END}, .size = 3}, - {.opcode = 0x01, .name = "or", .mode = {R_M16, IMM16, END}, .size = 3}, - {.opcode = 0x02, .name = "adc", .mode = {R_M16, IMM16, END}, .size = 3}, - {.opcode = 0x03, .name = "sbb", .mode = {R_M16, IMM16, END}, .size = 3}, - {.opcode = 0x04, .name = "and", .mode = {R_M16, IMM16, END}, .size = 3}, - {.opcode = 0x05, .name = "sub", .mode = {R_M16, IMM16, END}, .size = 3}, - {.opcode = 0x06, .name = "xor", .mode = {R_M16, IMM16, END}, .size = 3}, - {.opcode = 0x07, .name = "cmp", .mode = {R_M16, IMM16, END}, .size = 3}, + {.opcode = 0x00, .extended = -1, .name = "add", .mode = {R_M16, IMM16, END}, .size = 3}, + {.opcode = 0x01, .extended = -1, .name = "or", .mode = {R_M16, IMM16, END}, .size = 3}, + {.opcode = 0x02, .extended = -1, .name = "adc", .mode = {R_M16, IMM16, END}, .size = 3}, + {.opcode = 0x03, .extended = -1, .name = "sbb", .mode = {R_M16, IMM16, END}, .size = 3}, + {.opcode = 0x04, .extended = -1, .name = "and", .mode = {R_M16, IMM16, END}, .size = 3}, + {.opcode = 0x05, .extended = -1, .name = "sub", .mode = {R_M16, IMM16, END}, .size = 3}, + {.opcode = 0x06, .extended = -1, .name = "xor", .mode = {R_M16, IMM16, END}, .size = 3}, + {.opcode = 0x07, .extended = -1, .name = "cmp", .mode = {R_M16, IMM16, END}, .size = 3}, }, // 0x83 extended { - {.opcode = 0x00, .name = "add", .mode = {R_M16, IMM8, END}, .size = 3}, - {.opcode = 0x01, .name = "invalid", .mode = {END}, .size = 1}, - {.opcode = 0x02, .name = "adc", .mode = {R_M16, IMM8, END}, .size = 3}, - {.opcode = 0x03, .name = "sbb", .mode = {R_M16, IMM8, END}, .size = 3}, - {.opcode = 0x04, .name = "invalid", .mode = {END}, .size = 1}, - {.opcode = 0x05, .name = "sub", .mode = {R_M16, IMM8, END}, .size = 3}, - {.opcode = 0x06, .name = "invalid", .mode = {END}, .size = 1}, - {.opcode = 0x07, .name = "cmp", .mode = {R_M16, IMM8, END}, .size = 3}, + {.opcode = 0x00, .extended = -1, .name = "add", .mode = {R_M16, IMM8, END}, .size = 3}, + {.opcode = 0x01, .extended = -1, .name = "invalid", .mode = {END}, .size = 1}, + {.opcode = 0x02, .extended = -1, .name = "adc", .mode = {R_M16, IMM8, END}, .size = 3}, + {.opcode = 0x03, .extended = -1, .name = "sbb", .mode = {R_M16, IMM8, END}, .size = 3}, + {.opcode = 0x04, .extended = -1, .name = "invalid", .mode = {END}, .size = 1}, + {.opcode = 0x05, .extended = -1, .name = "sub", .mode = {R_M16, IMM8, END}, .size = 3}, + {.opcode = 0x06, .extended = -1, .name = "invalid", .mode = {END}, .size = 1}, + {.opcode = 0x07, .extended = -1, .name = "cmp", .mode = {R_M16, IMM8, END}, .size = 3}, }, };