mach3.c 10 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" },