mach3.c 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. /*
  2. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. * See the copyright notice in the ACK home directory, in the file "Copyright".
  4. */
  5. #define RCSID3 "$Id$"
  6. /*
  7. * INTEL 8086 keywords
  8. */
  9. 0, R16, 0, "ax",
  10. 0, R16, 1, "cx",
  11. 0, R16, 2, "dx",
  12. 0, R16, 3, "bx",
  13. 0, R16, 4, "sp",
  14. 0, R16, 5, "bp",
  15. 0, R16, 6, "si",
  16. 0, R16, 7, "di",
  17. 0, R8, 0, "al",
  18. 0, R8, 1, "cl",
  19. 0, R8, 2, "dl",
  20. 0, R8, 3, "bl",
  21. 0, R8, 4, "ah",
  22. 0, R8, 5, "ch",
  23. 0, R8, 6, "dh",
  24. 0, R8, 7, "bh",
  25. 0, RSEG, 0, "es",
  26. 0, RSEG, 1, "cs",
  27. 0, RSEG, 2, "ss",
  28. 0, RSEG, 3, "ds",
  29. 0, PREFIX, 046, "eseg",
  30. 0, PREFIX, 056, "cseg",
  31. 0, PREFIX, 066, "sseg",
  32. 0, PREFIX, 076, "dseg",
  33. 0, PREFIX, 0360, "lock",
  34. 0, PREFIX, 0363, "rep",
  35. 0, PREFIX, 0362, "repne",
  36. 0, PREFIX, 0362, "repnz",
  37. 0, PREFIX, 0363, "repe",
  38. 0, PREFIX, 0363, "repz",
  39. 0, NOOP_1, 047, "daa",
  40. 0, NOOP_1, 057, "das",
  41. 0, NOOP_1, 067, "aaa",
  42. 0, NOOP_1, 077, "aas",
  43. 0, NOOP_1, 0220, "nop",
  44. 0, NOOP_1, 0230, "cbw",
  45. 0, NOOP_1, 0231, "cwd",
  46. 0, NOOP_1, 0233, "wait",
  47. 0, NOOP_1, 0234, "pushf",
  48. 0, NOOP_1, 0235, "popf",
  49. 0, NOOP_1, 0236, "sahf",
  50. 0, NOOP_1, 0237, "lahf",
  51. 0, NOOP_1, 0244, "movsb",
  52. 0, NOOP_1, 0245, "movs",
  53. 0, NOOP_1, 0245, "movsw",
  54. 0, NOOP_1, 0246, "cmpsb",
  55. 0, NOOP_1, 0247, "cmps",
  56. 0, NOOP_1, 0247, "cmpsw",
  57. 0, NOOP_1, 0252, "stosb",
  58. 0, NOOP_1, 0253, "stos",
  59. 0, NOOP_1, 0253, "stosw",
  60. 0, NOOP_1, 0254, "lodsb",
  61. 0, NOOP_1, 0255, "lods",
  62. 0, NOOP_1, 0255, "lodsw",
  63. 0, NOOP_1, 0256, "scasb",
  64. 0, NOOP_1, 0257, "scas",
  65. 0, NOOP_1, 0257, "scasw",
  66. 0, NOOP_1, 0316, "into",
  67. 0, NOOP_1, 0317, "iret",
  68. 0, NOOP_1, 0327, "xlat",
  69. 0, NOOP_1, 0364, "hlt",
  70. 0, NOOP_1, 0365, "cmc",
  71. 0, NOOP_1, 0370, "clc",
  72. 0, NOOP_1, 0371, "stc",
  73. 0, NOOP_1, 0372, "cli",
  74. 0, NOOP_1, 0373, "sti",
  75. 0, NOOP_1, 0374, "cld",
  76. 0, NOOP_1, 0375, "std",
  77. 0, NOOP_2, 0324+012<<8, "aam",
  78. 0, NOOP_2, 0325+012<<8, "aad",
  79. 0, JOP, 0340, "loopne",
  80. 0, JOP, 0340, "loopnz",
  81. 0, JOP, 0341, "loope",
  82. 0, JOP, 0341, "loopz",
  83. 0, JOP, 0342, "loop",
  84. 0, JOP, 0343, "jcxz",
  85. 0, JOP, 0160, "jo",
  86. 0, JOP, 0161, "jno",
  87. 0, JOP, 0162, "jb",
  88. 0, JOP, 0162, "jc",
  89. 0, JOP, 0162, "jnae",
  90. 0, JOP, 0163, "jae",
  91. 0, JOP, 0163, "jnb",
  92. 0, JOP, 0163, "jnc",
  93. 0, JOP, 0164, "je",
  94. 0, JOP, 0164, "jz",
  95. 0, JOP, 0165, "jne",
  96. 0, JOP, 0165, "jnz",
  97. 0, JOP, 0166, "jbe",
  98. 0, JOP, 0166, "jna",
  99. 0, JOP, 0167, "ja",
  100. 0, JOP, 0167, "jnbe",
  101. 0, JOP, 0170, "js",
  102. 0, JOP, 0171, "jns",
  103. 0, JOP, 0172, "jp",
  104. 0, JOP, 0172, "jpe",
  105. 0, JOP, 0173, "jnp",
  106. 0, JOP, 0173, "jpo",
  107. 0, JOP, 0174, "jl",
  108. 0, JOP, 0174, "jnge",
  109. 0, JOP, 0175, "jge",
  110. 0, JOP, 0175, "jnl",
  111. 0, JOP, 0176, "jle",
  112. 0, JOP, 0176, "jng",
  113. 0, JOP, 0177, "jg",
  114. 0, JOP, 0177, "jnle",
  115. 0, PUSHOP, 0, "push",
  116. 0, PUSHOP, 1, "pop",
  117. 0, IOOP, 0344, "inb",
  118. 0, IOOP, 0345, "in",
  119. 0, IOOP, 0345, "inw",
  120. 0, IOOP, 0346, "outb",
  121. 0, IOOP, 0347, "out",
  122. 0, IOOP, 0347, "outw",
  123. 0, ADDOP, 000, "addb",
  124. 0, ADDOP, 001, "add",
  125. 0, ADDOP, 010, "orb",
  126. 0, ADDOP, 011, "or",
  127. 0, ADDOP, 020, "adcb",
  128. 0, ADDOP, 021, "adc",
  129. 0, ADDOP, 030, "sbbb",
  130. 0, ADDOP, 031, "sbb",
  131. 0, ADDOP, 040, "andb",
  132. 0, ADDOP, 041, "and",
  133. 0, ADDOP, 050, "subb",
  134. 0, ADDOP, 051, "sub",
  135. 0, ADDOP, 060, "xorb",
  136. 0, ADDOP, 061, "xor",
  137. 0, ADDOP, 070, "cmpb",
  138. 0, ADDOP, 071, "cmp",
  139. 0, ROLOP, 000, "rolb",
  140. 0, ROLOP, 001, "rol",
  141. 0, ROLOP, 010, "rorb",
  142. 0, ROLOP, 011, "ror",
  143. 0, ROLOP, 020, "rclb",
  144. 0, ROLOP, 021, "rcl",
  145. 0, ROLOP, 030, "rcrb",
  146. 0, ROLOP, 031, "rcr",
  147. 0, ROLOP, 040, "salb",
  148. 0, ROLOP, 040, "shlb",
  149. 0, ROLOP, 041, "sal",
  150. 0, ROLOP, 041, "shl",
  151. 0, ROLOP, 050, "shrb",
  152. 0, ROLOP, 051, "shr",
  153. 0, ROLOP, 070, "sarb",
  154. 0, ROLOP, 071, "sar",
  155. 0, INCOP, 000, "incb",
  156. 0, INCOP, 001, "inc",
  157. 0, INCOP, 010, "decb",
  158. 0, INCOP, 011, "dec",
  159. 0, NOTOP, 020, "notb",
  160. 0, NOTOP, 021, "not",
  161. 0, NOTOP, 030, "negb",
  162. 0, NOTOP, 031, "neg",
  163. 0, NOTOP, 040, "mulb",
  164. 0, NOTOP, 041, "mul",
  165. 0, NOTOP, 050, "imulb",
  166. 0, IMUL, 051, "imul", /* for 80286 */
  167. 0, NOTOP, 060, "divb",
  168. 0, NOTOP, 061, "div",
  169. 0, NOTOP, 070, "idivb",
  170. 0, NOTOP, 071, "idiv",
  171. 0, CALLOP, 020+(0350<<8), "call",
  172. 0, CALLOP, 040+(0351<<8), "jmp",
  173. 0, CALFOP, 030+(0232<<8), "callf",
  174. 0, CALFOP, 050+(0352<<8), "jmpf",
  175. 0, LEAOP, 0215, "lea",
  176. 0, LEAOP, 0304, "les",
  177. 0, LEAOP, 0305, "lds",
  178. 0, ESC, 0, "esc",
  179. 0, INT, 0, "int",
  180. 0, RET, 0303, "ret",
  181. 0, RET, 0313, "retf",
  182. 0, XCHG, 0, "xchgb",
  183. 0, XCHG, 1, "xchg",
  184. 0, TEST, 0, "testb",
  185. 0, TEST, 1, "test",
  186. 0, MOV, 0, "movb",
  187. 0, MOV, 1, "mov",
  188. 0, MOV, 1, "movw",
  189. /* Intel 8087 coprocessor keywords */
  190. 0, ST, 0, "st",
  191. 0, FNOOP, FESC+1+(0xF0<<8), "f2xm1",
  192. 0, FNOOP, FESC+1+(0xE1<<8), "fabs",
  193. 0, FNOOP, FESC+1+(0xE0<<8), "fchs",
  194. 0, FNOOP, FESC+3+(0xE2<<8), "fclex",
  195. 0, FNOOP, FESC+6+(0xD9<<8), "fcompp",
  196. 0, FNOOP, FESC+1+(0xF6<<8), "fdecstp",
  197. 0, FNOOP, FESC+3+(0xE1<<8), "fdisi",
  198. 0, FNOOP, FESC+3+(0xE0<<8), "feni",
  199. 0, FNOOP, FESC+1+(0xF7<<8), "fincstp",
  200. 0, FNOOP, FESC+3+(0xE3<<8), "finit",
  201. 0, FNOOP, FESC+1+(0xE8<<8), "fld1",
  202. 0, FNOOP, FESC+1+(0xEA<<8), "fldl2e",
  203. 0, FNOOP, FESC+1+(0xE9<<8), "fldl2t",
  204. 0, FNOOP, FESC+1+(0xEC<<8), "fldlg2",
  205. 0, FNOOP, FESC+1+(0xED<<8), "fldln2",
  206. 0, FNOOP, FESC+1+(0xEB<<8), "fldpi",
  207. 0, FNOOP, FESC+1+(0xEE<<8), "fldz",
  208. 0, FNOOP, FESC+1+(0xD0<<8), "fnop",
  209. 0, FNOOP, FESC+1+(0xF3<<8), "fpatan",
  210. 0, FNOOP, FESC+1+(0xF8<<8), "fprem",
  211. 0, FNOOP, FESC+1+(0xF2<<8), "fptan",
  212. 0, FNOOP, FESC+1+(0xFC<<8), "frndint",
  213. 0, FNOOP, FESC+1+(0xFD<<8), "fscale",
  214. 0, FNOOP, FESC+1+(0xFA<<8), "fsqrt",
  215. 0, FNOOP, FESC+7+(0xE0<<8), "fstswax", /* 80287 */
  216. 0, FNOOP, FESC+1+(0xE4<<8), "ftst",
  217. 0, FNOOP, FESC+1+(0xE5<<8), "fxam",
  218. 0, FNOOP, FESC+1+(0xF4<<8), "fxtract",
  219. 0, FNOOP, FESC+1+(0xF1<<8), "fyl2x",
  220. 0, FNOOP, FESC+1+(0xF9<<8), "fyl2pi",
  221. 0, FMEM, FESC+6+(0<<11), "fiadds",
  222. 0, FMEM, FESC+2+(0<<11), "fiaddl",
  223. 0, FMEM, FESC+0+(0<<11), "fadds",
  224. 0, FMEM, FESC+4+(0<<11), "faddd",
  225. 0, FMEM, FESC+7+(4<<11), "fbld",
  226. 0, FMEM, FESC+7+(6<<11), "fbstp",
  227. 0, FMEM, FESC+6+(2<<11), "ficoms",
  228. 0, FMEM, FESC+2+(2<<11), "ficoml",
  229. 0, FMEM, FESC+0+(2<<11), "fcoms",
  230. 0, FMEM, FESC+4+(2<<11), "fcomd",
  231. 0, FMEM, FESC+6+(3<<11), "ficomps",
  232. 0, FMEM, FESC+2+(3<<11), "ficompl",
  233. 0, FMEM, FESC+0+(3<<11), "fcomps",
  234. 0, FMEM, FESC+4+(3<<11), "fcompd",
  235. 0, FMEM, FESC+6+(6<<11), "fidivs",
  236. 0, FMEM, FESC+2+(6<<11), "fidivl",
  237. 0, FMEM, FESC+0+(6<<11), "fdivs",
  238. 0, FMEM, FESC+4+(6<<11), "fdivd",
  239. 0, FMEM, FESC+6+(7<<11), "fidivrs",
  240. 0, FMEM, FESC+2+(7<<11), "fidivrl",
  241. 0, FMEM, FESC+0+(7<<11), "fdivrs",
  242. 0, FMEM, FESC+4+(7<<11), "fdivrd",
  243. 0, FMEM, FESC+7+(5<<11), "fildq",
  244. 0, FMEM, FESC+7+(0<<11), "filds",
  245. 0, FMEM, FESC+3+(0<<11), "fildl",
  246. 0, FMEM, FESC+1+(0<<11), "flds",
  247. 0, FMEM, FESC+5+(0<<11), "fldd",
  248. 0, FMEM, FESC+3+(5<<11), "fldx",
  249. 0, FMEM, FESC+1+(5<<11), "fldcw",
  250. 0, FMEM, FESC+1+(4<<11), "fldenv",
  251. 0, FMEM, FESC+6+(1<<11), "fimuls",
  252. 0, FMEM, FESC+2+(1<<11), "fimull",
  253. 0, FMEM, FESC+0+(1<<11), "fmuls",
  254. 0, FMEM, FESC+4+(1<<11), "fmuld",
  255. 0, FMEM, FESC+5+(4<<11), "frstor",
  256. 0, FMEM, FESC+5+(6<<11), "fsave",
  257. 0, FMEM, FESC+7+(2<<11), "fists",
  258. 0, FMEM, FESC+3+(2<<11), "fistl",
  259. 0, FMEM, FESC+1+(2<<11), "fsts",
  260. 0, FMEM, FESC+5+(2<<11), "fstd",
  261. 0, FMEM, FESC+7+(7<<11), "fistpq",
  262. 0, FMEM, FESC+7+(3<<11), "fistps",
  263. 0, FMEM, FESC+3+(3<<11), "fistpl",
  264. 0, FMEM, FESC+1+(3<<11), "fstps",
  265. 0, FMEM, FESC+5+(3<<11), "fstpd",
  266. 0, FMEM, FESC+3+(7<<11), "fstpx",
  267. 0, FMEM, FESC+1+(7<<11), "fstcw",
  268. 0, FMEM, FESC+1+(6<<11), "fstenv",
  269. 0, FMEM, FESC+5+(7<<11), "fstsw",
  270. 0, FMEM, FESC+6+(4<<11), "fisubs",
  271. 0, FMEM, FESC+2+(4<<11), "fisubl",
  272. 0, FMEM, FESC+0+(4<<11), "fsubs",
  273. 0, FMEM, FESC+4+(4<<11), "fsubd",
  274. 0, FMEM, FESC+6+(5<<11), "fisubrs",
  275. 0, FMEM, FESC+2+(5<<11), "fisubrl",
  276. 0, FMEM, FESC+0+(5<<11), "fsubrs",
  277. 0, FMEM, FESC+4+(5<<11), "fsubrd",
  278. 0, FST_I, FESC+1+(0xC0<<8), "fld",
  279. 0, FST_I, FESC+5+(0xD0<<8), "fst",
  280. 0, FST_I, FESC+5+(0xC8<<8), "fstp",
  281. 0, FST_I, FESC+1+(0xC8<<8), "fxch",
  282. 0, FST_I, FESC+0+(0xD0<<8), "fcom",
  283. 0, FST_I, FESC+0+(0xD8<<8), "fcomp",
  284. 0, FST_I, FESC+5+(0xC0<<8), "ffree",
  285. 0, FST_ST, FESC+0+(0xC0<<8), "fadd",
  286. 0, FST_ST, FESC+2+(0xC0<<8), "faddp",
  287. 0, FST_ST2, FESC+0+(0xF0<<8), "fdiv",
  288. 0, FST_ST2, FESC+2+(0xF0<<8), "fdivp",
  289. 0, FST_ST2, FESC+0+(0xF8<<8), "fdivr",
  290. 0, FST_ST2, FESC+2+(0xF8<<8), "fdivrp",
  291. 0, FST_ST, FESC+0+(0xC8<<8), "fmul",
  292. 0, FST_ST, FESC+2+(0xC8<<8), "fmulp",
  293. 0, FST_ST2, FESC+0+(0xE0<<8), "fsub",
  294. 0, FST_ST2, FESC+2+(0xE0<<8), "fsubp",
  295. 0, FST_ST2, FESC+0+(0xE8<<8), "fsubr",
  296. 0, FST_ST2, FESC+2+(0xE8<<8), "fsubrp",
  297. /* 80286 keywords */
  298. 0, NOOP_1, 0140, "pusha",
  299. 0, NOOP_1, 0141, "popa",
  300. 0, NOOP_1, 0154, "insb",
  301. 0, NOOP_1, 0155, "ins",
  302. 0, NOOP_1, 0155, "insw",
  303. 0, NOOP_1, 0156, "outsb",
  304. 0, NOOP_1, 0157, "outs",
  305. 0, NOOP_1, 0157, "outsw",
  306. 0, ARPLOP, 0143, "arpl",
  307. 0, ENTER, 0310, "enter",
  308. 0, NOOP_1, 0311, "leave",
  309. 0, LEAOP, 0142, "bound",
  310. 0, NOOP_2, 017+06<<8, "clts",
  311. 0, EXTOP, 0002, "lar",
  312. 0, EXTOP, 0003, "lsl",
  313. 0, EXTOP1, 0021, "lgdt",
  314. 0, EXTOP1, 0001, "sgdt",
  315. 0, EXTOP1, 0031, "lidt",
  316. 0, EXTOP1, 0011, "sidt",
  317. 0, EXTOP1, 0020, "lldt",
  318. 0, EXTOP1, 0000, "sldt",
  319. 0, EXTOP1, 0030, "ltr",
  320. 0, EXTOP1, 0010, "str",
  321. 0, EXTOP1, 0061, "lmsw",
  322. 0, EXTOP1, 0041, "smsw",
  323. 0, EXTOP1, 0050, "verw",
  324. 0, EXTOP1, 0040, "verr",