|
|
1.1 root 1: /*
2: * Opcode table.
3: */
4: #ifdef vax
5: #include "INC$LIB:cc2.h"
6: #else
7: #include "cc2.h"
8: #endif
9:
10: /*
11: * Opcode table.
12: * Indexed by opcode number, as defined in header file h/i8086/opcode.h.
13: * Contains the number of address expressions,
14: * the opcode and the basic format (style) of each instruction.
15: * This table is parallel to the table in cc3/i8086/icode.c
16: * and to the definitions of machine ops in h/i8086/opcode.h;
17: * modifications must be made in parallel.
18: */
19: OPINFO opinfo[] = {
20: /* aaa */ 0, 0, 0x37, OF_INH,
21: /* aad */ 0, 0, 0xD5, OF_INH2,
22: /* aam */ 0, 0, 0xD4, OF_INH2,
23: /* aas */ 0, 0, 0x3F, OF_INH,
24: /* adc */ 2, 0, 0x11, OF_DOPS,
25: /* adcb */ 2, OP_BYTE, 0x10, OF_DOP,
26: /* add */ 2, 0, 0x01, OF_DOPS,
27: /* addb */ 2, OP_BYTE, 0x00, OF_DOP,
28: /* and */ 2, 0, 0x21, OF_DOP,
29: /* andb */ 2, OP_BYTE, 0x20, OF_DOP,
30: /* call */ 1, OP_NPTR, 0xE8, OF_CALL,
31: /* cbw */ 0, 0, 0x98, OF_INH,
32: /* clc */ 0, 0, 0xF8, OF_INH,
33: /* cld */ 0, 0, 0xFC, OF_INH,
34: /* cli */ 0, 0, 0xFA, OF_INH,
35: /* cmc */ 0, 0, 0xF5, OF_INH,
36: /* cmp */ 2, 0, 0x39, OF_DOPS,
37: /* cmpb */ 2, OP_BYTE, 0x38, OF_DOP,
38: /* cmpsw */ 0, 0, 0xA7, OF_INH,
39: /* cmpsb */ 0, 0, 0xA6, OF_INH,
40: /* cwd */ 0, 0, 0x99, OF_INH,
41: /* daa */ 0, 0, 0x27, OF_INH,
42: /* das */ 0, 0, 0x2F, OF_INH,
43: /* dec */ 1, 0, 0x09, OF_SOP,
44: /* decb */ 1, OP_BYTE, 0x08, OF_SOP,
45: /* div */ 1, 0, 0x31, OF_MUL,
46: /* divb */ 1, OP_BYTE, 0x30, OF_MUL,
47: /* hlt */ 0, 0, 0xF4, OF_INH,
48: #if AS_FORMAT
49: /* icall */ 1, 0, 0x10, OF_ICALL,
50: #else
51: /* call */ 1, 0, 0x10, OF_ICALL,
52: #endif
53: /* idiv */ 1, 0, 0x39, OF_MUL,
54: /* idivb */ 1, OP_BYTE, 0x38, OF_MUL,
55: #if AS_FORMAT
56: /* ijmp */ 1, 0, 0x20, OF_ICALL,
57: #else
58: /* jmp */ 1, 0, 0x20, OF_ICALL,
59: #endif
60: /* imul */ 1, 0, 0x29, OF_MUL,
61: /* imulb */ 1, OP_BYTE, 0x28, OF_MUL,
62: /* in */ 1, 0, 0xE5, OF_IN,
63: /* inb */ 1, OP_BYTE, 0xE4, OF_IN,
64: /* inc */ 1, 0, 0x01, OF_SOP,
65: /* incb */ 1, OP_BYTE, 0x00, OF_SOP,
66: /* int */ 1, OP_NPTR, 0xCD, OF_INT,
67: /* into */ 0, 0, 0xCE, OF_INH,
68: /* iret */ 0, 0, 0xCF, OF_INH,
69: #if AS_FORMAT
70: /* xicall */ 1, OP_DWORD, 0x18, OF_ICALL,
71: /* xijmp */ 1, OP_NPTR, 0x28, OF_ICALL,
72: #else
73: /* call */ 1, OP_DWORD, 0x18, OF_ICALL,
74: /* jmp */ 1, OP_NPTR, 0x28, OF_ICALL,
75: #endif
76: /* ja */ 1, OP_JUMP, 0x77, OF_JMP,
77: /* jae */ 1, OP_JUMP, 0x73, OF_JMP,
78: /* jb */ 1, OP_JUMP, 0x72, OF_JMP,
79: /* jbe */ 1, OP_JUMP, 0x76, OF_JMP,
80: /* jcxz */ 1, OP_JUMP, 0xE3, OF_REL,
81: /* je */ 1, OP_JUMP, 0x74, OF_JMP,
82: /* jg */ 1, OP_JUMP, 0x7F, OF_JMP,
83: /* jge */ 1, OP_JUMP, 0x7D, OF_JMP,
84: /* jl */ 1, OP_JUMP, 0x7C, OF_JMP,
85: /* jle */ 1, OP_JUMP, 0x7E, OF_JMP,
86: /* jmp */ 1, OP_JUMP, 0xEB, OF_JMP,
87: /* jne */ 1, OP_JUMP, 0x75, OF_JMP,
88: /* jno */ 1, OP_JUMP, 0x71, OF_JMP,
89: /* jns */ 1, OP_JUMP, 0x79, OF_JMP,
90: /* jo */ 1, OP_JUMP, 0x70, OF_JMP,
91: /* jpe */ 1, OP_JUMP, 0x7A, OF_JMP,
92: /* jpo */ 1, OP_JUMP, 0x7B, OF_JMP,
93: /* js */ 1, OP_JUMP, 0x78, OF_JMP,
94: /* lahf */ 0, 0, 0x9F, OF_INH,
95: /* lds */ 2, OP_DWORD, 0xC5, OF_LEA,
96: /* lea */ 2, 0, 0x8D, OF_LEA,
97: /* les */ 2, OP_DWORD, 0xC4, OF_LEA,
98: /* lock */ 0, 0, 0xF0, OF_INH,
99: /* lodsw */ 0, 0, 0xAD, OF_INH,
100: /* lodsb */ 0, 0, 0xAC, OF_INH,
101: /* loop */ 1, OP_JUMP, 0xE2, OF_REL,
102: /* loope */ 1, OP_JUMP, 0xE1, OF_REL,
103: /* loopne */ 1, OP_JUMP, 0xE0, OF_REL,
104: /* mov */ 2, 0, 0x89, OF_MOV,
105: /* movb */ 2, OP_BYTE, 0x88, OF_MOV,
106: /* movsw */ 0, 0, 0xA5, OF_INH,
107: /* movsb */ 0, 0, 0xA4, OF_INH,
108: /* mul */ 1, 0, 0x21, OF_MUL,
109: /* mulb */ 1, OP_BYTE, 0x20, OF_MUL,
110: /* neg */ 1, 0, 0x19, OF_SOP,
111: /* negb */ 1, OP_BYTE, 0x18, OF_SOP,
112: /* not */ 1, 0, 0x11, OF_SOP,
113: /* notb */ 1, OP_BYTE, 0x10, OF_SOP,
114: /* ret */ 1, OP_NPTR, 0xC2, OF_NRET,
115: /* ret */ 1, OP_NPTR, 0xCB, OF_NRET,
116: /* or */ 2, 0, 0x09, OF_DOP,
117: /* orb */ 2, OP_BYTE, 0x08, OF_DOP,
118: /* out */ 1, 0, 0xE7, OF_OUT,
119: /* outb */ 1, OP_BYTE, 0xE6, OF_OUT,
120: /* pop */ 1, 0, 0x8F, OF_POP,
121: /* popf */ 0, 0, 0x9D, OF_INH,
122: /* push */ 1, 0, 0xFF, OF_PUSH,
123: /* pushf */ 0, 0, 0x9C, OF_INH,
124: /* rcl */ 2, 0, 0x11, OF_SHR,
125: /* rclb */ 2, OP_BYTE, 0x10, OF_SHR,
126: /* rcr */ 2, 0, 0x19, OF_SHR,
127: /* rcrb */ 2, OP_BYTE, 0x18, OF_SHR,
128: /* repe */ 0, 0, 0xF3, OF_INH,
129: /* repne */ 0, 0, 0xF2, OF_INH,
130: /* ret */ 0, 0, 0xC3, OF_INH,
131: /* rol */ 2, 0, 0x01, OF_SHR,
132: /* rolb */ 2, OP_BYTE, 0x00, OF_SHR,
133: /* ror */ 2, 0, 0x09, OF_SHR,
134: /* rorb */ 2, OP_BYTE, 0x08, OF_SHR,
135: /* sahf */ 0, 0, 0x9E, OF_INH,
136: /* sal */ 2, 0, 0x21, OF_SHR,
137: /* salb */ 2, OP_BYTE, 0x20, OF_SHR,
138: /* sar */ 2, 0, 0x39, OF_SHR,
139: /* sarb */ 2, OP_BYTE, 0x38, OF_SHR,
140: /* sbb */ 2, 0, 0x19, OF_DOPS,
141: /* sbbb */ 2, OP_BYTE, 0x18, OF_DOP,
142: /* scasw */ 0, 0, 0xAF, OF_INH,
143: /* scasb */ 0, 0, 0xAE, OF_INH,
144: /* shl */ 2, 0, 0x21, OF_SHR,
145: /* shlb */ 2, OP_BYTE, 0x20, OF_SHR,
146: /* shr */ 2, 0, 0x29, OF_SHR,
147: /* shrb */ 2, OP_BYTE, 0x28, OF_SHR,
148: /* stc */ 0, 0, 0xF9, OF_INH,
149: /* std */ 0, 0, 0xFD, OF_INH,
150: /* sti */ 0, 0, 0xFB, OF_INH,
151: /* stosw */ 0, 0, 0xAB, OF_INH,
152: /* stosb */ 0, 0, 0xAA, OF_INH,
153: /* sub */ 2, 0, 0x29, OF_DOPS,
154: /* subb */ 2, OP_BYTE, 0x28, OF_DOP,
155: /* test */ 2, 0, 0x85, OF_DOP,
156: /* testb */ 2, OP_BYTE, 0x84, OF_DOP,
157: /* wait */ 0, 0, 0x9B, OF_INH,
158: #if AS_FORMAT
159: /* xcall */ 1, OP_NPTR, 0x9A, OF_XCALL,
160: #else
161: /* call */ 1, OP_NPTR, 0x9A, OF_XCALL,
162: #endif
163: /* xchg */ 2, 0, 0x87, OF_DOP,
164: /* xchgb */ 2, OP_BYTE, 0x86, OF_DOP,
165: #if AS_FORMAT
166: /* xjmp */ 1, OP_NPTR, 0xEA, OF_XCALL,
167: #else
168: /* jmp */ 1, OP_NPTR, 0xEA, OF_XCALL,
169: #endif
170: /* xlat */ 0, 0, 0xD7, OF_INH,
171: /* xor */ 2, 0, 0x31, OF_DOP,
172: /* xorb */ 2, OP_BYTE, 0x30, OF_DOP,
173: #if AS_FORMAT
174: /* xret */ 0, 0, 0xCB, OF_INH,
175: #else
176: /* ret */ 0, 0, 0xCB, OF_INH,
177: #endif
178:
179: #if AS_FORMAT
180: /* .byte */ 1, OP_DD|OP_NPTR, 0x00, OF_BYTE,
181: /* .word */ 1, OP_DD|OP_NPTR, 0x00, OF_WORD,
182: /* .word */ 1, OP_DD|OP_NPTR, 0x00, OF_LPTR,
183: /* .long */ 1, OP_DD|OP_NPTR, 0x00, OF_GPTR,
184: #else
185: /* db */ 1, OP_DD|OP_NPTR, 0x00, OF_BYTE,
186: /* dw */ 1, OP_DD|OP_NPTR, 0x00, OF_WORD,
187: /* dw */ 1, OP_DD|OP_NPTR, 0x00, OF_LPTR,
188: /* dd */ 1, OP_DD|OP_NPTR, 0x00, OF_GPTR,
189: #endif
190:
191: /* fadd */ 0, 0, 0xC1, OF_FDE,
192: /* faddf */ 1, 0, 0x00, OF_FRM,
193: /* faddd */ 1, 0, 0x04, OF_FRM,
194: /* faddi */ 1, 0, 0x06, OF_FRM,
195: /* faddl */ 1, 0, 0x02, OF_FRM,
196: /* fsub */ 0, 0, 0xE1, OF_FDE,
197: /* fsubf */ 1, 0, 0x20, OF_FRM,
198: /* fsubd */ 1, 0, 0x24, OF_FRM,
199: /* fsubi */ 1, 0, 0x26, OF_FRM,
200: /* fsubl */ 1, 0, 0x22, OF_FRM,
201: /* frsub */ 0, 0, 0xE9, OF_FDE,
202: /* frsubf */ 1, 0, 0x28, OF_FRM,
203: /* frsubd */ 1, 0, 0x2C, OF_FRM,
204: /* frsubi */ 1, 0, 0x2E, OF_FRM,
205: /* frsubl */ 1, 0, 0x2A, OF_FRM,
206: /* fcompp */ 0, 0, 0xD9, OF_FDE,
207: /* fcompf */ 1, 0, 0x18, OF_FRM,
208: /* fcompd */ 1, 0, 0x1C, OF_FRM,
209: /* fcompi */ 1, 0, 0x1E, OF_FRM,
210: /* fcompl */ 1, 0, 0x1A, OF_FRM,
211: /* fmul */ 0, 0, 0xC9, OF_FDE,
212: /* fmulf */ 1, 0, 0x08, OF_FRM,
213: /* fmuld */ 1, 0, 0x0C, OF_FRM,
214: /* fmuli */ 1, 0, 0x0E, OF_FRM,
215: /* fmull */ 1, 0, 0x0A, OF_FRM,
216: /* fdiv */ 0, 0, 0xF1, OF_FDE,
217: /* fdivf */ 1, 0, 0x30, OF_FRM,
218: /* fdivd */ 1, 0, 0x34, OF_FRM,
219: /* fdivi */ 1, 0, 0x36, OF_FRM,
220: /* fdivl */ 1, 0, 0x32, OF_FRM,
221: /* frdiv */ 0, 0, 0xF9, OF_FDE,
222: /* frdivf */ 1, 0, 0x38, OF_FRM,
223: /* frdivd */ 1, 0, 0x3C, OF_FRM,
224: /* frdivi */ 1, 0, 0x3E, OF_FRM,
225: /* frdivl */ 1, 0, 0x3A, OF_FRM,
226: /* fchs */ 0, 0, 0xE0, OF_FD9,
227: /* ftst */ 0, 0, 0xE4, OF_FD9,
228: /* fldz */ 0, 0, 0xEE, OF_FD9,
229: /* fld1 */ 0, 0, 0xE8, OF_FD9,
230: /* fstsw */ 1, 0, 0x3D, OF_FRM,
231: /* fldf */ 1, 0, 0x01, OF_FRM,
232: /* fldd */ 1, 0, 0x05, OF_FRM,
233: /* fldi */ 1, 0, 0x07, OF_FRM,
234: /* fldl */ 1, 0, 0x03, OF_FRM,
235: /* fldt */ 1, 0, 0x2B, OF_FRM,
236: /* fstf */ 1, 0, 0x11, OF_FRM,
237: /* fstd */ 1, 0, 0x15, OF_FRM,
238: /* fsti */ 1, 0, 0x17, OF_FRM,
239: /* fstl */ 1, 0, 0x13, OF_FRM,
240: /* fstpf */ 1, 0, 0x19, OF_FRM,
241: /* fstpd */ 1, 0, 0x1D, OF_FRM,
242: /* fstpi */ 1, 0, 0x1F, OF_FRM,
243: /* fstpl */ 1, 0, 0x1B, OF_FRM,
244: /* fstpt */ 1, 0, 0x3B, OF_FRM,
245: /* fwait */ 0, 0, 0x9B, OF_FWAIT,
246: /* fdrop */ 0, 0, 0xD8, OF_FDD,
247: /* fsqrt */ 0, 0, 0xFA, OF_FD9,
248: /* fabs */ 0, 0, 0xE1, OF_FD9,
249: /* fprem */ 0, 0, 0xF8, OF_FD9,
250: /* frnd */ 0, 0, 0xFC, OF_FD9,
251: /* ldes */ 0, 0, 0, 0,
252: /* imul immediate */ 3, 0, 0x69, OF_MUL3,
253: /* enter */ 2, 0, 0xC8, OF_INH,
254: /* leave */ 0, 0, 0xC9, OF_INH
255: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.