as_table 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. adc dst:REG, src:EADDR ==> @text1( 0x13);
  2. mod_RM( dst->reg, src).
  3. add dst:REG, src:EADDR ==> @text1( 0x3);
  4. mod_RM( dst->reg, src).
  5. ... dst:ACCU, src:DATA ==> @text1( 0x5);
  6. @text2( %$(src->expr)).
  7. ... dst:EADDR, src:DATA ==> @text1( 0x81);
  8. mod_RM( 0, dst);
  9. @text2( %$(src->expr)).
  10. ... dst:ACCU, src:lABEL ==> @text1( 0x5);
  11. @reloc2( %$(src->lab), %$(src->off), !PC_REL).
  12. ... dst:EADDR, src:lABEL ==> @text1( 0x81);
  13. mod_RM( 0, dst);
  14. @reloc2( %$(src->lab), %$(src->off), !PC_REL).
  15. and dst:REG, src:EADDR ==> @text1( 0x23);
  16. mod_RM( dst->reg, src).
  17. ... dst:ACCU, src:DATA ==> @text1( 0x25);
  18. @text2( %$(src->expr)).
  19. call dst:lABEL ==> @text1( 0xe8);
  20. @reloc2( %$(dst->lab), %$(dst->off), PC_REL).
  21. ... dst:EADDR ==> @text1( 0xff);
  22. mod_RM( 2, dst).
  23. cmp dst:REG, src:EADDR ==> @text1( 0x3b);
  24. mod_RM( dst->reg, src).
  25. ... dst:ACCU, src:DATA ==> @text1( 0x3d);
  26. @text2( %$(src->expr)).
  27. ... dst:EADDR, src:DATA ==> @text1( 0x81);
  28. mod_RM(7,dst);
  29. @text2( %$(src->expr)).
  30. cwd ==> @text1( 0x99).
  31. dec dst:REG ==> R53( 9, dst->reg).
  32. ... dst:EADDR ==> @text1( 0xff);
  33. mod_RM( 1, dst).
  34. div divisor:EADDR ==> @text1( 0xf7);
  35. mod_RM( 6, divisor).
  36. idiv divisor:EADDR ==> @text1( 0xf7);
  37. mod_RM( 7, divisor).
  38. inc dst:REG ==> R53( 8, dst->reg).
  39. ... dst:EADDR ==> @text1( 0xff);
  40. mod_RM( 0, dst).
  41. jb dst:ILB ==> @text1( 0x72);
  42. @text1( %dist( dst->lab)).
  43. je dst:ILB ==> @text1( 0x74);
  44. @text1( %dist( dst->lab)).
  45. ... dst:lABEL ==> save_op( dst);
  46. assemble( "jne 9f");
  47. jmp_instr( &saved_op);
  48. assemble( "9:").
  49. jg dst:ILB ==> @text1( 0x7f);
  50. @text1( %dist( dst->lab)).
  51. ... dst:lABEL ==> save_op( dst);
  52. assemble( "jle 9f");
  53. jmp_instr( &saved_op);
  54. assemble( "9:").
  55. jge dst:ILB ==> @text1( 0x7d);
  56. @text1( %dist( dst->lab)).
  57. ... dst:lABEL ==> save_op( dst);
  58. assemble( "jl 9f");
  59. jmp_instr( &saved_op);
  60. assemble( "9:").
  61. jl dst:ILB ==> @text1( 0x7c);
  62. @text1( %dist( dst->lab)).
  63. ... dst:lABEL ==> save_op( dst);
  64. assemble( "jge 9f");
  65. jmp_instr( &saved_op);
  66. assemble( "9:").
  67. jle dst:ILB ==> @text1( 0x7e);
  68. @text1( %dist( dst->lab)).
  69. ... dst:lABEL ==> save_op( dst);
  70. assemble( "jg 9f");
  71. jmp_instr( &saved_op);
  72. assemble( "9:").
  73. jmp dst:ILB ==> @text1( 0xeb);
  74. @text1( %dist( dst->lab)).
  75. ... dst:lABEL ==> @text1( 0xe9);
  76. @reloc2( %$(dst->lab), %$(dst->off), PC_REL).
  77. jne dst:ILB ==> @text1( 0x75);
  78. @text1( %dist( dst->lab)).
  79. ... dst:lABEL ==> save_op( dst);
  80. assemble( "je 9f");
  81. jmp_instr( &saved_op);
  82. assemble( "9:").
  83. lea dst:REG, src:EADDR ==> @text1( 0x8d);
  84. mod_RM( dst->reg, src).
  85. loop dst:ILB ==> @text1( 0xe2);
  86. @text1( %dist( dst->lab)).
  87. mov dst:REG, src:EADDR ==> mov_REG_EADDR( dst, src).
  88. ... dst:REG, src:DATA ==> R53( 0x17, dst->reg);
  89. @text2( %$(src->expr)).
  90. ... dst:REG, src:lABEL ==> R53( 0x17, dst->reg);
  91. @reloc2( %$(src->lab), %$(src->off), !PC_REL).
  92. ... dst:EADDR, src:REG ==> @text1( 0x89);
  93. mod_RM( src->reg, dst).
  94. ... dst:EADDR, src:DATA ==> @text1( 0xc7);
  95. mod_RM( 0, dst);
  96. @text2( %$(src->expr)).
  97. ... dst:EADDR, src:lABEL ==> @text1( 0xc7);
  98. mod_RM( 0, dst);
  99. @reloc2( %$(src->lab), %$(src->off), !PC_REL).
  100. movb dst:REG, src:EADDR ==> @text1( 0x8a);
  101. mod_RM( dst->reg, src).
  102. ... dst:EADDR, src:REG ==> @text1( 0x88);
  103. mod_RM( src->reg, dst).
  104. mul mplier:EADDR ==> @text1( 0xf7);
  105. mod_RM( 4, mplier).
  106. neg dst:EADDR ==> @text1( 0xf7);
  107. mod_RM( 3, dst).
  108. not dst:EADDR ==> @text1( 0xf7);
  109. mod_RM( 2, dst).
  110. or dst:REG, src:EADDR ==> @text1( 0x0b);
  111. mod_RM( dst->reg, src).
  112. pop dst:REG ==> R53( 0xb, dst->reg).
  113. ... dst:EADDR ==> @text1( 0x8f);
  114. mod_RM( 0, dst).
  115. POP dst ==> @if ( push_waiting)
  116. mov_instr( dst, AX_oper);
  117. @assign( push_waiting, FALSE).
  118. @else
  119. pop_instr( dst).
  120. @fi.
  121. push src:REG ==> R53( 0xa, src->reg).
  122. ... src:EADDR ==> @text1( 0xff);
  123. mod_RM( 6, src).
  124. PUSH src ==> mov_instr( AX_oper, src);
  125. @assign( push_waiting, TRUE).
  126. rcr dst:EADDR, src:CONST1 ==> @text1( 0xd1);
  127. mod_RM( 3, dst).
  128. rep ins:MOVS ==> @text1( 0xf3);
  129. @text1( 0xa5). /* Wie zet direction flag? */
  130. ret ==> @text1( 0xc3). /* Altijd NEAR! */
  131. rol dst:EADDR, src:REG_CL ==> @text1( 0xd3);
  132. mod_RM( 0, dst).
  133. ror dst:EADDR, src:REG_CL ==> @text1( 0xd3);
  134. mod_RM( 1, dst).
  135. sal dst:EADDR, src:REG_CL ==> @text1( 0xd3);
  136. mod_RM( 4, dst).
  137. sar dst:EADDR, src:REG_CL ==> @text1( 0xd3);
  138. mod_RM( 7, dst).
  139. ... dst:EADDR, src:CONST1 ==> @text1( 0xd1);
  140. mod_RM( 7, dst).
  141. sbb dst:REG, src:EADDR ==> @text1( 0x1b);
  142. mod_RM( dst->reg, src).
  143. ... dst:ACCU, src:DATA ==> @text1( 0x1d);
  144. @text2( %$(src->expr)).
  145. shl dst, src ==> sal_instr( dst, src).
  146. shr dst:EADDR, src:REG_CL ==> @text1( 0xd3);
  147. mod_RM( 5, dst).
  148. ... dst:EADDR, src:CONST1 ==> @text1( 0xd1);
  149. mod_RM( 5, dst).
  150. sub dst:REG, src:EADDR ==> @text1( 0x2b);
  151. mod_RM( dst->reg, src).
  152. ... dst:EADDR, src:DATA ==> @text1( 0x81);
  153. mod_RM( 5, dst);
  154. @text2( %$(src->expr)).
  155. test dst:REG, src:EADDR ==> @text1( 0x85);
  156. mod_RM( dst->reg, src).
  157. xchg dst:EADDR, src:REG ==> @text1( 0x87);
  158. mod_RM( src->reg, dst).
  159. xor dst:REG, src:EADDR ==> @text1( 0x33);
  160. mod_RM( dst->reg, src).