2016. 11. 29. 13:31

DOSBOX vs x8086 OPCODE

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요.


최근 도스 관련되서 이런저런 작업을 진행하고 있습니다.


그러다가 일단 바이너리를 x86 opcode로 disassemble을 해야 할꺼 같아서


OPCODE 관련되서 이것저것 찾아보는데요.


핵심은 DOS 별 약간씩 OPCODE 방식이 다르네요.


x8086 스펙에서약간 다른게 몇가지가 있는데요.


그래서 DOSBOX의 OPCODE 관련된 항목을 갖고 분석을 했습니다.


아래는 비교 표 입니다.


간단히 opcode (0 ~ 255 )까지만 비교 한거입니다.


84,85,86,87  이렇게 다르네요



DOSBOX , x86 opcode (http://www.mlsite.net/8086/) 입니다.


 CASE_B(0x00) /* ADD Eb,Gb */

 CASE_W(0x01) /* ADD Ew,Gw */

 CASE_B(0x02) /* ADD Gb,Eb */

 CASE_W(0x03) /* ADD Gw,Ew */

 CASE_B(0x04) /* ADD AL,Ib */

 CASE_W(0x05) /* ADD AX,Iw */

 CASE_W(0x06) /* PUSH ES */ 

 CASE_W(0x07) /* POP ES */

 CASE_B(0x08) /* OR Eb,Gb */

 CASE_W(0x09) /* OR Ew,Gw */

 CASE_B(0x0a) /* OR Gb,Eb */

 CASE_W(0x0b) /* OR Gw,Ew */

 CASE_B(0x0c) /* OR AL,Ib */

 CASE_W(0x0d) /* OR AX,Iw */

 CASE_W(0x0e) /* PUSH CS */ 

 CASE_B(0x0f) /* 2 byte opcodes*/ 

 CASE_B(0x10) /* ADC Eb,Gb */

 CASE_W(0x11) /* ADC Ew,Gw */

 CASE_B(0x12) /* ADC Gb,Eb */

 CASE_W(0x13) /* ADC Gw,Ew */

 CASE_B(0x14) /* ADC AL,Ib */

 CASE_W(0x15) /* ADC AX,Iw */

 CASE_W(0x16) /* PUSH SS */ 

 CASE_W(0x17) /* POP SS */ 

 CASE_B(0x18) /* SBB Eb,Gb */

 CASE_W(0x19) /* SBB Ew,Gw */

 CASE_B(0x1a) /* SBB Gb,Eb */

 CASE_W(0x1b) /* SBB Gw,Ew */

 CASE_B(0x1c) /* SBB AL,Ib */

 CASE_W(0x1d) /* SBB AX,Iw */

 CASE_W(0x1e) /* PUSH DS */ 

 CASE_W(0x1f) /* POP DS */

 CASE_B(0x20) /* AND Eb,Gb */

 CASE_W(0x21) /* AND Ew,Gw */

 CASE_B(0x22) /* AND Gb,Eb */

 CASE_W(0x23) /* AND Gw,Ew */

 CASE_B(0x24) /* AND AL,Ib */

 CASE_W(0x25) /* AND AX,Iw */

 CASE_B(0x26) /* SEG ES: */

 CASE_B(0x27) /* DAA */

 CASE_B(0x28) /* SUB Eb,Gb */

 CASE_W(0x29) /* SUB Ew,Gw */

 CASE_B(0x2a) /* SUB Gb,Eb */

 CASE_W(0x2b) /* SUB Gw,Ew */

 CASE_B(0x2c) /* SUB AL,Ib */

 CASE_W(0x2d) /* SUB AX,Iw */

 CASE_B(0x2e) /* SEG CS: */

 CASE_B(0x2f) /* DAS */

 CASE_B(0x30) /* XOR Eb,Gb */

 CASE_W(0x31) /* XOR Ew,Gw */

 CASE_B(0x32) /* XOR Gb,Eb */

 CASE_W(0x33) /* XOR Gw,Ew */

 CASE_B(0x34) /* XOR AL,Ib */

 CASE_W(0x35) /* XOR AX,Iw */

 CASE_B(0x36) /* SEG SS: */

 CASE_B(0x37) /* AAA */

 CASE_B(0x38) /* CMP Eb,Gb */

 CASE_W(0x39) /* CMP Ew,Gw */

 CASE_B(0x3a) /* CMP Gb,Eb */

 CASE_W(0x3b) /* CMP Gw,Ew */

 CASE_B(0x3c) /* CMP AL,Ib */ 

 CASE_W(0x3d) /* CMP AX,Iw */

 CASE_B(0x3e) /* SEG DS: */

 CASE_B(0x3f) /* AAS */

 CASE_W(0x40) /* INC AX */

 CASE_W(0x41) /* INC CX */

 CASE_W(0x42) /* INC DX */

 CASE_W(0x43) /* INC BX */

 CASE_W(0x44) /* INC SP */

 CASE_W(0x45) /* INC BP */

 CASE_W(0x46) /* INC SI */

 CASE_W(0x47) /* INC DI */

 CASE_W(0x48) /* DEC AX */

 CASE_W(0x49) /* DEC CX */

 CASE_W(0x4a) /* DEC DX */

 CASE_W(0x4b) /* DEC BX */

 CASE_W(0x4c) /* DEC SP */

 CASE_W(0x4d) /* DEC BP */

 CASE_W(0x4e) /* DEC SI */

 CASE_W(0x4f) /* DEC DI */

 CASE_W(0x50) /* PUSH AX */

 CASE_W(0x51) /* PUSH CX */

 CASE_W(0x52) /* PUSH DX */

 CASE_W(0x53) /* PUSH BX */

 CASE_W(0x54) /* PUSH SP */

 CASE_W(0x55) /* PUSH BP */

 CASE_W(0x56) /* PUSH SI */

 CASE_W(0x57) /* PUSH DI */

 CASE_W(0x58) /* POP AX */

 CASE_W(0x59) /* POP CX */

 CASE_W(0x5a) /* POP DX */

 CASE_W(0x5b) /* POP BX */

 CASE_W(0x5c) /* POP SP */

 CASE_W(0x5d) /* POP BP */

 CASE_W(0x5e) /* POP SI */

 CASE_W(0x5f) /* POP DI */

 CASE_W(0x60) /* PUSHA */

 CASE_W(0x61) /* POPA */

 CASE_W(0x62) /* BOUND */

 CASE_W(0x63) /* ARPL Ew,Rw */

 CASE_B(0x64) /* SEG FS: */

 CASE_B(0x65) /* SEG GS: */

 CASE_B(0x66) /* Operand Size Prefix */

 CASE_B(0x67) /* Address Size Prefix */

 CASE_W(0x68) /* PUSH Iw */

 CASE_W(0x69) /* IMUL Gw,Ew,Iw */

 CASE_W(0x6a) /* PUSH Ib */

 CASE_W(0x6b) /* IMUL Gw,Ew,Ib */

 CASE_B(0x6c) /* INSB */

 CASE_W(0x6d) /* INSW */

 CASE_B(0x6e) /* OUTSB */

 CASE_W(0x6f) /* OUTSW */

 CASE_W(0x70) /* JO */

 CASE_W(0x71) /* JNO */

 CASE_W(0x72) /* JB */

 CASE_W(0x73) /* JNB */

 CASE_W(0x74) /* JZ */

 CASE_W(0x75) /* JNZ */

 CASE_W(0x76) /* JBE */

 CASE_W(0x77) /* JNBE */

 CASE_W(0x78) /* JS */

 CASE_W(0x79) /* JNS */

 CASE_W(0x7a) /* JP */

 CASE_W(0x7b) /* JNP */

 CASE_W(0x7c) /* JL */

 CASE_W(0x7d) /* JNL */

 CASE_W(0x7e) /* JLE */

 CASE_W(0x7f) /* JNLE */

 CASE_B(0x80) /* Grpl Eb,Ib */

 CASE_B(0x82) /* Grpl Eb,Ib Mirror instruction*/

 CASE_W(0x81) /* Grpl Ew,Iw */

 CASE_W(0x83) /* Grpl Ew,Ix */

 CASE_B(0x84) /* TEST Eb,Gb */

 CASE_W(0x85) /* TEST Ew,Gw */

 CASE_B(0x86) /* XCHG Eb,Gb */

 CASE_W(0x87) /* XCHG Ew,Gw */

 CASE_B(0x88) /* MOV Eb,Gb */

 CASE_W(0x89) /* MOV Ew,Gw */

 CASE_B(0x8a) /* MOV Gb,Eb */

 CASE_W(0x8b) /* MOV Gw,Ew */

 CASE_W(0x8c) /* Mov Ew,Sw */

 CASE_W(0x8d) /* LEA Gw */

 CASE_B(0x8e) /* MOV Sw,Ew */

 CASE_W(0x8f) /* POP Ew */

 CASE_B(0x90) /* NOP */

 CASE_W(0x91) /* XCHG CX,AX */

 CASE_W(0x92) /* XCHG DX,AX */

 CASE_W(0x93) /* XCHG BX,AX */

 CASE_W(0x94) /* XCHG SP,AX */

 CASE_W(0x95) /* XCHG BP,AX */

 CASE_W(0x96) /* XCHG SI,AX */

 CASE_W(0x97) /* XCHG DI,AX */

 CASE_W(0x98) /* CBW */

 CASE_W(0x99) /* CWD */

 CASE_W(0x9a) /* CALL Ap */

 CASE_B(0x9b) /* WAIT */

 CASE_W(0x9c) /* PUSHF */

 CASE_W(0x9d) /* POPF */

 CASE_B(0x9e) /* SAHF */

 CASE_B(0x9f) /* LAHF */

 CASE_B(0xa0) /* MOV AL,Ob */

 CASE_W(0xa1) /* MOV AX,Ow */

 CASE_B(0xa2) /* MOV Ob,AL */

 CASE_W(0xa3) /* MOV Ow,AX */

 CASE_B(0xa4) /* MOVSB */

 CASE_W(0xa5) /* MOVSW */

 CASE_B(0xa6) /* CMPSB */

 CASE_W(0xa7) /* CMPSW */

 CASE_B(0xa8) /* TEST AL,Ib */

 CASE_W(0xa9) /* TEST AX,Iw */

 CASE_B(0xaa) /* STOSB */

 CASE_W(0xab) /* STOSW */

 CASE_B(0xac) /* LODSB */

 CASE_W(0xad) /* LODSW */

 CASE_B(0xae) /* SCASB */

 CASE_W(0xaf) /* SCASW */

 CASE_B(0xb0) /* MOV AL,Ib */

 CASE_B(0xb1) /* MOV CL,Ib */

 CASE_B(0xb2) /* MOV DL,Ib */

 CASE_B(0xb3) /* MOV BL,Ib */

 CASE_B(0xb4) /* MOV AH,Ib */

 CASE_B(0xb5) /* MOV CH,Ib */

 CASE_B(0xb6) /* MOV DH,Ib */

 CASE_B(0xb7) /* MOV BH,Ib */

 CASE_W(0xb8) /* MOV AX,Iw */

 CASE_W(0xb9) /* MOV CX,Iw */

 CASE_W(0xba) /* MOV DX,Iw */

 CASE_W(0xbb) /* MOV BX,Iw */

 CASE_W(0xbc) /* MOV SP,Iw */

 CASE_W(0xbd) /* MOV BP.Iw */

 CASE_W(0xbe) /* MOV SI,Iw */

 CASE_W(0xbf) /* MOV DI,Iw */

 CASE_B(0xc0) /* GRP2 Eb,Ib */

 CASE_W(0xc1) /* GRP2 Ew,Ib */

 CASE_W(0xc2) /* RETN Iw */

 CASE_W(0xc3) /* RETN */

 CASE_W(0xc4) /* LES */

 CASE_W(0xc5) /* LDS */

 CASE_B(0xc6) /* MOV Eb,Ib */

 CASE_W(0xc7) /* MOV EW,Iw */

 CASE_W(0xc8) /* ENTER Iw,Ib */

 CASE_W(0xc9) /* LEAVE */

 CASE_W(0xca) /* RETF Iw */

 CASE_W(0xcb) /* RETF */ 

 CASE_B(0xcc) /* INT3 */

 CASE_B(0xcd) /* INT Ib */ 

 CASE_B(0xce) /* INTO */

 CASE_W(0xcf) /* IRET */

 CASE_B(0xd0) /* GRP2 Eb,1 */

 CASE_W(0xd1) /* GRP2 Ew,1 */

 CASE_B(0xd2) /* GRP2 Eb,CL */

 CASE_W(0xd3) /* GRP2 Ew,CL */

 CASE_B(0xd4) /* AAM Ib */

 CASE_B(0xd5) /* AAD Ib */

 CASE_B(0xd6) /* SALC */

 CASE_B(0xd7) /* XLAT */

 CASE_B(0xd8) /* FPU ESC 0 */

 CASE_B(0xd9) /* FPU ESC 1 */

 CASE_B(0xda) /* FPU ESC 2 */

 CASE_B(0xdb) /* FPU ESC 3 */

 CASE_B(0xdc) /* FPU ESC 4 */

 CASE_B(0xdd) /* FPU ESC 5 */

 CASE_B(0xde) /* FPU ESC 6 */

 CASE_B(0xdf) /* FPU ESC 7 */

 CASE_B(0xd8) /* FPU ESC 0 */

 CASE_B(0xd9) /* FPU ESC 1 */

 CASE_B(0xda) /* FPU ESC 2 */

 CASE_B(0xdb) /* FPU ESC 3 */

 CASE_B(0xdc) /* FPU ESC 4 */

 CASE_B(0xdd) /* FPU ESC 5 */

 CASE_B(0xde) /* FPU ESC 6 */

 CASE_B(0xdf) /* FPU ESC 7 */

 CASE_W(0xe0) /* LOOPNZ */

 CASE_W(0xe1) /* LOOPZ */

 CASE_W(0xe2) /* LOOP */

 CASE_W(0xe3) /* JCXZ */

 CASE_B(0xe4) /* IN AL,Ib */

 CASE_W(0xe5) /* IN AX,Ib */

 CASE_B(0xe6) /* OUT Ib,AL */

 CASE_W(0xe7) /* OUT Ib,AX */

 CASE_W(0xe8) /* CALL Jw */

 CASE_W(0xe9) /* JMP Jw */

 CASE_W(0xea) /* JMP Ap */

 CASE_W(0xeb) /* JMP Jb */

 CASE_B(0xec) /* IN AL,DX */

 CASE_W(0xed) /* IN AX,DX */

 CASE_B(0xee) /* OUT DX,AL */

 CASE_W(0xef) /* OUT DX,AX */

 CASE_B(0xf0) /* LOCK */

 CASE_B(0xf1) /* ICEBP */

 CASE_B(0xf2) /* REPNZ */

 CASE_B(0xf3) /* REPZ */

 CASE_B(0xf4) /* HLT */

 CASE_B(0xf5) /* CMC */

 CASE_B(0xf6) /* GRP3 Eb(,Ib) */

 CASE_W(0xf7) /* GRP3 Ew(,Iw) */

 CASE_B(0xf8) /* CLC */

 CASE_B(0xf9) /* STC */

 CASE_B(0xfa) /* CLI */

 CASE_B(0xfb) /* STI */

 CASE_B(0xfc) /* CLD */

 CASE_B(0xfd) /* STD */

 CASE_B(0xfe) /* GRP4 Eb */

 CASE_W(0xff) /* GRP5 Ew */

-----------------------------------

00 ADD Eb Gb

01 ADD Ev Gv

02 ADD Gb Eb

03 ADD Gv Ev

04 ADD AL Ib

05 ADD eAX Iv

06 PUSH ES

07 POP ES

08 OR Eb Gb

09 OR Ev Gv

0A OR Gb Eb

0B OR Gv Ev

0C OR AL Ib

0D OR eAX Iv

0E PUSH CS

0F --

10 ADC Eb Gb

11 ADC Ev Gv

12 ADC Gb Eb

13 ADC Gv Ev

14 ADC AL Ib

15 ADC eAX Iv

16 PUSH SS

17 POP SS

18 SBB Eb Gb

19 SBB Ev Gv

1A SBB Gb Eb

1B SBB Gv Ev

1C SBB AL Ib

1D SBB eAX Iv

1E PUSH DS

1F POP DS

20 AND Eb Gb

21 AND Ev Gv

22 AND Gb Eb

23 AND Gv Ev

24 AND AL Ib

25 AND eAX Iv

26 ES:

27 DAA

28 SUB Eb Gb

29 SUB Ev Gv

2A SUB Gb Eb

2B SUB Gv Ev

2C SUB AL Ib

2D SUB eAX Iv

2E CS:

2F DAS

30 XOR Eb Gb

31 XOR Ev Gv

32 XOR Gb Eb

33 XOR Gv Ev

34 XOR AL Ib

35 XOR eAX Iv

36 SS:

37 AAA

38 CMP Eb Gb

39 CMP Ev Gv

3A CMP Gb Eb

3B CMP Gv Ev

3C CMP AL Ib

3D CMP eAX Iv

3E DS:

3F AAS

40 INC eAX

41 INC eCX

42 INC eDX

43 INC eBX

44 INC eSP

45 INC eBP

46 INC eSI

47 INC eDI

48 DEC eAX

49 DEC eCX

4A DEC eDX

4B DEC eBX

4C DEC eSP

4D DEC eBP

4E DEC eSI

4F DEC eDI

50 PUSH eAX

51 PUSH eCX

52 PUSH eDX

53 PUSH eBX

54 PUSH eSP

55 PUSH eBP

56 PUSH eSI

57 PUSH eDI

58 POP eAX

59 POP eCX

5A POP eDX

5B POP eBX

5C POP eSP

5D POP eBP

5E POP eSI

5F POP eDI

60 --

61 --

62 --

63 --

64 --

65 --

66 --

67 --

68 --

69 --

6A --

6B --

6C --

6D --

6E --

6F --

70 JO Jb

71 JNO Jb

72 JB Jb

73 JNB Jb

74 JZ Jb

75 JNZ Jb

76 JBE Jb

77 JA Jb

78 JS Jb

79 JNS Jb

7A JPE Jb

7B JPO Jb

7C JL Jb

7D JGE Jb

7E JLE Jb

7F JG Jb

80 GRP1 Eb Ib

81 GRP1 Ev Iv

82 GRP1 Eb Ib

83 GRP1 Ev Ib

84 TEST Gb Eb

85 TEST Gv Ev

86 XCHG Gb Eb

87 XCHG Gv Ev

88 MOV Eb Gb

89 MOV Ev Gv

8A MOV Gb Eb

8B MOV Gv Ev

8C MOV Ew Sw

8D LEA Gv M

8E MOV Sw Ew

8F POP Ev

90 NOP

91 XCHG eCX eAX

92 XCHG eDX eAX

93 XCHG eBX eAX

94 XCHG eSP eAX

95 XCHG eBP eAX

96 XCHG eSI eAX

97 XCHG eDI eAX

98 CBW

99 CWD

9A CALL Ap

9B WAIT

9C PUSHF

9D POPF

9E SAHF

9F LAHF

A0 MOV AL Ob

A1 MOV eAX Ov

A2 MOV Ob AL

A3 MOV Ov eAX

A4 MOVSB

A5 MOVSW

A6 CMPSB

A7 CMPSW

A8 TEST AL Ib

A9 TEST eAX Iv

AA STOSB

AB STOSW

AC LODSB

AD LODSW

AE SCASB

AF SCASW

B0 MOV AL Ib

B1 MOV CL Ib

B2 MOV DL Ib

B3 MOV BL Ib

B4 MOV AH Ib

B5 MOV CH Ib

B6 MOV DH Ib

B7 MOV BH Ib

B8 MOV eAX Iv

B9 MOV eCX Iv

BA MOV eDX Iv

BB MOV eBX Iv

BC MOV eSP Iv

BD MOV eBP Iv

BE MOV eSI Iv

BF MOV eDI Iv

C0 --

C1 --

C2 RET Iw

C3 RET

C4 LES Gv Mp

C5 LDS Gv Mp

C6 MOV Eb Ib

C7 MOV Ev Iv

C8 --

C9 --

CA RETF Iw

CB RETF

CC INT 3

CD INT Ib

CE INTO

CF IRET

D0 GRP2 Eb 1

D1 GRP2 Ev 1

D2 GRP2 Eb CL

D3 GRP2 Ev CL

D4 AAM I0

D5 AAD I0

D6 --

D7 XLAT

D8 --

D9 --

DA --

DB --

DC --

DD --

DE --

DF --

E0 LOOPNZ Jb

E1 LOOPZ Jb

E2 LOOP Jb

E3 JCXZ Jb

E4 IN AL Ib

E5 IN eAX Ib

E6 OUT Ib AL

E7 OUT Ib eAX

E8 CALL Jv

E9 JMP Jv

EA JMP Ap

EB JMP Jb

EC IN AL DX

ED IN eAX DX

EE OUT DX AL

EF OUT DX eAX

F0 LOCK

F1 --

F2 REPNZ

F3 REPZ

F4 HLT

F5 CMC

F6 GRP3a Eb

F7 GRP3b Ev

F8 CLC

F9 STC

FA CLI

FB STI

FC CLD

FD STD

FE GRP4 Eb

FF GRP5 Ev



GRP1/0 ADD

GRP1/1 OR

GRP1/2 ADC

GRP1/3 SBB

GRP1/4 AND

GRP1/5 SUB

GRP1/6 XOR

GRP1/7 CMP

GRP2/0 ROL

GRP2/1 ROR

GRP2/2 RCL

GRP2/3 RCR

GRP2/4 SHL

GRP2/5 SHR

GRP2/6 --

GRP2/7 SAR

GRP3a/0 TEST Eb Ib

GRP3a/1 --

GRP3a/2 NOT

GRP3a/3 NEG

GRP3a/4 MUL

GRP3a/5 IMUL

GRP3a/6 DIV

GRP3a/7 IDIV

GRP3b/0 TEST Ev Iv

GRP3b/1 --

GRP3b/2 NOT

GRP3b/3 NEG

GRP3b/4 MUL

GRP3b/5 IMUL

GRP3b/6 DIV

GRP3b/7 IDIV

GRP4/0 INC

GRP4/1 DEC

GRP4/2 --

GRP4/3 --

GRP4/4 --

GRP4/5 --

GRP4/6 --

GRP4/7 --

GRP5/0 INC

GRP5/1 DEC

GRP5/2 CALL

GRP5/3 CALL Mp

GRP5/4 JMP

GRP5/5 JMP Mp

GRP5/6 PUSH

GRP5/7 --

-------------------------------------------------------



'오픈소스관련' 카테고리의 다른 글

Dos Relocation 관련 작업.  (0) 2016.12.16
DOS PSP 관련 스펙.  (0) 2016.12.16
터보씨 3.0 입니다.  (0) 2016.11.08
라즈베리파이 서버 세팅 관련  (0) 2016.02.29
Phantomjs + ajax 함수 호출  (0) 2015.08.03