trunk/src/emu/cpu/i386/i386dasm.c
| r23689 | r23690 | |
| 41 | 41 | PARAM_REL, /* 16 or 32-bit PC-relative displacement */ |
| 42 | 42 | PARAM_REL8, /* 8-bit PC-relative displacement */ |
| 43 | 43 | PARAM_MEM_OFFS, /* 16 or 32-bit mem offset */ |
| 44 | PARAM_PREIMP, /* prefix with implicit register */ |
| 44 | 45 | PARAM_SREG, /* segment register */ |
| 45 | 46 | PARAM_CREG, /* control register */ |
| 46 | 47 | PARAM_DREG, /* debug register */ |
| r23689 | r23690 | |
| 229 | 230 | {"imul", MODRM, PARAM_REG, PARAM_RM, PARAM_IMM }, |
| 230 | 231 | {"push", 0, PARAM_I8, 0, 0 }, |
| 231 | 232 | {"imul", MODRM, PARAM_REG, PARAM_RM, PARAM_I8 }, |
| 232 | | {"insb", 0, 0, 0, 0 }, |
| 233 | | {"insw\0insd\0insd",VAR_NAME, 0, 0, 0 }, |
| 234 | | {"outsb", 0, 0, 0, 0 }, |
| 235 | | {"outsw\0outsd\0outsd",VAR_NAME, 0, 0, 0 }, |
| 233 | {"insb", 0, PARAM_PREIMP, 0, 0 }, |
| 234 | {"insw\0insd\0insd",VAR_NAME, PARAM_PREIMP, 0, 0 }, |
| 235 | {"outsb", 0, PARAM_PREIMP, 0, 0 }, |
| 236 | {"outsw\0outsd\0outsd",VAR_NAME, PARAM_PREIMP, 0, 0 }, |
| 236 | 237 | // 0x70 |
| 237 | 238 | {"jo", 0, PARAM_REL8, 0, 0 }, |
| 238 | 239 | {"jno", 0, PARAM_REL8, 0, 0 }, |
| r23689 | r23690 | |
| 289 | 290 | {"mov", 0, PARAM_EAX, PARAM_MEM_OFFS, 0 }, |
| 290 | 291 | {"mov", 0, PARAM_MEM_OFFS, PARAM_AL, 0 }, |
| 291 | 292 | {"mov", 0, PARAM_MEM_OFFS, PARAM_EAX, 0 }, |
| 292 | | {"movsb", 0, 0, 0, 0 }, |
| 293 | | {"movsw\0movsd\0movsq",VAR_NAME, 0, 0, 0 }, |
| 294 | | {"cmpsb", 0, 0, 0, 0 }, |
| 295 | | {"cmpsw\0cmpsd\0cmpsq",VAR_NAME, 0, 0, 0 }, |
| 293 | {"movsb", 0, PARAM_PREIMP, 0, 0 }, |
| 294 | {"movsw\0movsd\0movsq",VAR_NAME, PARAM_PREIMP, 0, 0 }, |
| 295 | {"cmpsb", 0, PARAM_PREIMP, 0, 0 }, |
| 296 | {"cmpsw\0cmpsd\0cmpsq",VAR_NAME, PARAM_PREIMP, 0, 0 }, |
| 296 | 297 | {"test", 0, PARAM_AL, PARAM_UI8, 0 }, |
| 297 | 298 | {"test", 0, PARAM_EAX, PARAM_IMM, 0 }, |
| 298 | | {"stosb", 0, 0, 0, 0 }, |
| 299 | | {"stosw\0stosd\0stosq",VAR_NAME, 0, 0, 0 }, |
| 300 | | {"lodsb", 0, 0, 0, 0 }, |
| 301 | | {"lodsw\0lodsd\0lodsq",VAR_NAME, 0, 0, 0 }, |
| 302 | | {"scasb", 0, 0, 0, 0 }, |
| 303 | | {"scasw\0scasd\0scasq",VAR_NAME, 0, 0, 0 }, |
| 299 | {"stosb", 0, PARAM_PREIMP, 0, 0 }, |
| 300 | {"stosw\0stosd\0stosq",VAR_NAME, PARAM_PREIMP, 0, 0 }, |
| 301 | {"lodsb", 0, PARAM_PREIMP, 0, 0 }, |
| 302 | {"lodsw\0lodsd\0lodsq",VAR_NAME, PARAM_PREIMP, 0, 0 }, |
| 303 | {"scasb", 0, PARAM_PREIMP, 0, 0 }, |
| 304 | {"scasw\0scasd\0scasq",VAR_NAME, PARAM_PREIMP, 0, 0 }, |
| 304 | 305 | // 0xb0 |
| 305 | 306 | {"mov", 0, PARAM_AL, PARAM_UI8, 0 }, |
| 306 | 307 | {"mov", 0, PARAM_CL, PARAM_UI8, 0 }, |
| r23689 | r23690 | |
| 2419 | 2420 | } |
| 2420 | 2421 | break; |
| 2421 | 2422 | |
| 2423 | case PARAM_PREIMP: |
| 2424 | switch(segment) |
| 2425 | { |
| 2426 | case SEG_CS: s += sprintf( s, "cs:" ); break; |
| 2427 | case SEG_DS: s += sprintf( s, "ds:" ); break; |
| 2428 | case SEG_ES: s += sprintf( s, "es:" ); break; |
| 2429 | case SEG_FS: s += sprintf( s, "fs:" ); break; |
| 2430 | case SEG_GS: s += sprintf( s, "gs:" ); break; |
| 2431 | case SEG_SS: s += sprintf( s, "ss:" ); break; |
| 2432 | } |
| 2433 | break; |
| 2434 | |
| 2422 | 2435 | case PARAM_SREG: |
| 2423 | 2436 | s += sprintf( s, "%s", i386_sreg[MODRM_REG1] ); |
| 2424 | 2437 | break; |