1 | open BitVectors;; |
---|
2 | open ASM;; |
---|
3 | |
---|
4 | let pp_instruction = |
---|
5 | function |
---|
6 | `Label l -> l ^ ":" |
---|
7 | | `Cost l -> l ^ ":" |
---|
8 | | `ACALL (`ADDR11 w) -> |
---|
9 | "ACALL addr11 (" ^ string_of_vect w ^ ")" |
---|
10 | | `ADD (`A,`REG (r1,r2,r3)) -> |
---|
11 | "ADD `A `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
12 | | `ADD (`A, `DIRECT b1) -> |
---|
13 | "ADD `A direct (" ^ string_of_vect b1 ^ ")" |
---|
14 | | `ADD (`A, `INDIRECT i1) -> |
---|
15 | "ADD `A @Ri (" ^ string_of_bit i1 ^ ")" |
---|
16 | | `ADD (`A, `DATA b1) -> |
---|
17 | "ADD `A #data (" ^ string_of_vect b1 ^ ")" |
---|
18 | | `ADDC (`A, `REG(r1,r2,r3)) -> |
---|
19 | "ADDC `A `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
20 | | `ADDC (`A, `DIRECT b1) -> |
---|
21 | "ADDC `A direct (" ^ string_of_vect b1 ^ ")" |
---|
22 | | `ADDC (`A,`INDIRECT i1) -> |
---|
23 | "ADDC `A @Ri (" ^ string_of_bit i1 ^ ")" |
---|
24 | | `ADDC (`A,`DATA b1) -> |
---|
25 | "ADDC `A #data (" ^ string_of_vect b1 ^ ")" |
---|
26 | | `AJMP (`ADDR11 w) -> |
---|
27 | "AJMP addr11 (" ^ string_of_vect w ^ ")" |
---|
28 | | `ANL (`U1 (`A, `REG (r1,r2,r3))) -> |
---|
29 | "ANL `A `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
30 | | `ANL (`U1 (`A, `DIRECT b1)) -> |
---|
31 | "ANL `A direct (" ^ string_of_vect b1 ^ ")" |
---|
32 | | `ANL (`U1 (`A, `INDIRECT i1)) -> |
---|
33 | "ANL `A @Ri (" ^ string_of_bit i1 ^ ")" |
---|
34 | | `ANL (`U1 (`A, `DATA b1)) -> |
---|
35 | "ANL `A #data (" ^ string_of_vect b1 ^ ")" |
---|
36 | | `ANL (`U2 (`DIRECT b1,`A)) -> |
---|
37 | "ANL direct `A (" ^ string_of_vect b1 ^ ")" |
---|
38 | | `ANL (`U2 (`DIRECT b1,`DATA b2)) -> |
---|
39 | "ANL direct #data (" ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
40 | | `ANL (`U3 (`C,`BIT b1)) -> |
---|
41 | "ANL `C bit (" ^ string_of_vect b1 ^ ")" |
---|
42 | | `ANL (`U3 (`C,`NBIT b1)) -> |
---|
43 | "ANL `C /bit (" ^ string_of_vect b1 ^ ")" |
---|
44 | | `CJNE (`U1 (`A, `DIRECT b1), `REL b2) -> |
---|
45 | "CJNE `A direct rel (" ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
46 | | `CJNE (`U1 (`A, `DATA b1), `REL b2) -> |
---|
47 | "CJNE `A #data rel (" ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
48 | | `CJNE (`U2 (`REG(r1,r2,r3), `DATA b1), `REL b2) -> |
---|
49 | "CJNE `Rn #data rel (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
50 | | `CJNE (`U2 (`INDIRECT i1, `DATA b1), `REL b2) -> |
---|
51 | "CJNE @Ri #data rel (" ^ string_of_bit i1 ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
52 | | `CLR `A -> "CLR `A" |
---|
53 | | `CLR `C -> "CLR `C" |
---|
54 | | `CLR (`BIT b1) -> "CLR bit (" ^ string_of_vect b1 ^ ")" |
---|
55 | | `CPL `A -> "CPL A" |
---|
56 | | `CPL `C -> "CPL C" |
---|
57 | | `CPL `BIT b1 -> "CPL bit (" ^ string_of_vect b1 ^ ")" |
---|
58 | | `DA `A -> |
---|
59 | "DA `A" |
---|
60 | | `DEC `A -> |
---|
61 | "DEC `A" |
---|
62 | | `DEC (`REG(r1,r2,r3)) -> |
---|
63 | "DEC `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
64 | | `DEC (`DIRECT b1) -> |
---|
65 | "DEC direct (" ^ string_of_vect b1 ^ ")" |
---|
66 | | `DEC (`INDIRECT i1) -> |
---|
67 | "DEC @Ri (" ^ string_of_bit i1 ^ ")" |
---|
68 | | `DIV (`A, `B) -> |
---|
69 | "DIV `A `B" |
---|
70 | | `DJNZ (`REG(r1,r2,r3), `REL b1) -> |
---|
71 | "DJNZ `Rn rel (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ string_of_vect b1 ^ ")" |
---|
72 | | `DJNZ (`DIRECT b1, `REL b2) -> |
---|
73 | "DJNZ direct rel (" ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
74 | | `INC `A -> |
---|
75 | "INC `A" |
---|
76 | | `INC (`REG(r1,r2,r3)) -> |
---|
77 | "INC `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
78 | | `INC (`DIRECT b1) -> |
---|
79 | "INC direct (" ^ string_of_vect b1 ^ ")" |
---|
80 | | `INC (`INDIRECT i1) -> |
---|
81 | "INC @Ri (" ^ string_of_bit i1 ^ ")" |
---|
82 | | `INC `DPTR -> |
---|
83 | "INC `DPTR" |
---|
84 | | `JB (`BIT b1, `REL b2) -> |
---|
85 | "JB bit rel (" ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
86 | | `JBC (`BIT b1, `REL b2) -> |
---|
87 | "JBC bit rel (" ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
88 | | `JC (`REL b1) -> |
---|
89 | "JC rel (" ^ string_of_vect b1 ^ ")" |
---|
90 | | `JMP `IND_DPTR -> |
---|
91 | "JMP @A + `DPTR" |
---|
92 | | `JNB (`BIT b1, `REL b2) -> |
---|
93 | "JNB bit rel (" ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
94 | | `JNC (`REL b1) -> |
---|
95 | "JNC rel (" ^ string_of_vect b1 ^ ")" |
---|
96 | | `JNZ (`REL b1) -> |
---|
97 | "JNZ rel (" ^ string_of_vect b1 ^ ")" |
---|
98 | | `JZ (`REL b1) -> |
---|
99 | "JZ rel (" ^ string_of_vect b1 ^ ")" |
---|
100 | | `LCALL (`ADDR16 w) -> |
---|
101 | "LCALL addr16 (" ^ string_of_vect w ^ ")" |
---|
102 | | `LJMP (`ADDR16 w) -> |
---|
103 | "LJMP addr16 (" ^ string_of_vect w ^ ")" |
---|
104 | | `MOV (`U1 (`A, `REG(r1,r2,r3))) -> |
---|
105 | "MOV `A `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
106 | | `MOV (`U1 (`A, `DIRECT b1)) -> |
---|
107 | "MOV `A direct (" ^ string_of_vect b1 ^ ")" |
---|
108 | | `MOV (`U1 (`A, `INDIRECT i1)) -> |
---|
109 | "MOV `A @Ri (" ^ string_of_bit i1 ^ ")" |
---|
110 | | `MOV (`U1 (`A, `DATA b1)) -> |
---|
111 | "MOV `A #data (" ^ string_of_vect b1 ^ ")" |
---|
112 | | `MOV (`U2 (`REG(r1,r2,r3), `A)) -> |
---|
113 | "MOV `Rn `A (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
114 | | `MOV (`U2 (`REG(r1,r2,r3), (`DIRECT b1))) -> |
---|
115 | "MOV `Rn direct (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
116 | | `MOV (`U2 (`REG(r1,r2,r3), (`DATA b1))) -> |
---|
117 | "MOV `Rn #data (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
118 | | `MOV (`U3 (`DIRECT b1, `A)) -> |
---|
119 | "MOV direct `A (" ^ string_of_vect b1 ^ ")" |
---|
120 | | `MOV (`U3 (`DIRECT b1, `REG(r1,r2,r3))) -> |
---|
121 | "MOV direct `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
122 | | `MOV (`U3 (`DIRECT b1, `DIRECT b2)) -> |
---|
123 | "MOV direct direct (" ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
124 | | `MOV (`U3 (`DIRECT b1, `INDIRECT i1)) -> |
---|
125 | "MOV direct @Ri (" ^ string_of_vect b1 ^ string_of_bit i1 ^ ")" |
---|
126 | | `MOV (`U3 (`DIRECT b1, `DATA b2)) -> |
---|
127 | "MOV direct #data (" ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
128 | | `MOV (`U2 (`INDIRECT i1, `A)) -> |
---|
129 | "MOV @Ri `A (" ^ string_of_bit i1 ^ ")" |
---|
130 | | `MOV (`U2 (`INDIRECT i1, `DIRECT b1)) -> |
---|
131 | "MOV @Ri direct (" ^ string_of_bit i1 ^ string_of_vect b1 ^ ")" |
---|
132 | | `MOV (`U2 (`INDIRECT i1, `DATA b1)) -> |
---|
133 | "MOV @Ri #data (" ^ string_of_bit i1 ^ string_of_vect b1 ^ ")" |
---|
134 | | `MOV (`U5 (`C, `BIT b1)) -> |
---|
135 | "MOV `C bit (" ^ string_of_vect b1 ^ ")" |
---|
136 | | `MOV (`U6 (`BIT b1, `C)) -> |
---|
137 | "MOV bit `C (" ^ string_of_vect b1 ^ ")" |
---|
138 | | `MOV (`U4 (`DPTR, `DATA16 w)) -> |
---|
139 | "MOV `DPTR #data16 (" ^ string_of_vect w ^ ")" |
---|
140 | | `MOVC (`A, `A_DPTR) -> |
---|
141 | "MOVC `A @A + `DPTR" |
---|
142 | | `MOVC (`A, `A_PC) -> |
---|
143 | "MOVC `A @A + `PC" |
---|
144 | | `MOVX (`U1 (`A, `EXT_INDIRECT i1)) -> |
---|
145 | "MOVX `A @Ri (" ^ string_of_bit i1 ^ ")" |
---|
146 | | `MOVX (`U1 (`A, `EXT_IND_DPTR)) -> |
---|
147 | "MOVX `A @DPTR" |
---|
148 | | `MOVX (`U2 (`EXT_INDIRECT i1, `A)) -> |
---|
149 | "MOVX @Ri `A ( " ^ string_of_bit i1 ^ ")" |
---|
150 | | `MOVX (`U2 (`EXT_IND_DPTR, `A)) -> |
---|
151 | "MOVX @DPTR `A" |
---|
152 | | `MUL(`A, `B) -> |
---|
153 | "MUL `A `B" |
---|
154 | | `NOP -> |
---|
155 | "NOP" |
---|
156 | | `ORL (`U1(`A, `REG(r1,r2,r3))) -> |
---|
157 | "ORL `A `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
158 | | `ORL (`U1(`A, `DIRECT b1)) -> |
---|
159 | "ORL `A direct (" ^ string_of_vect b1 ^ ")" |
---|
160 | | `ORL (`U1(`A, `INDIRECT i1)) -> |
---|
161 | "ORL `A @Ri (" ^ string_of_bit i1 ^ ")" |
---|
162 | | `ORL (`U1(`A, `DATA b1)) -> |
---|
163 | "ORL `A #data (" ^ string_of_vect b1 ^ ")" |
---|
164 | | `ORL (`U2(`DIRECT b1, `A)) -> |
---|
165 | "ORL direct `A (" ^ string_of_vect b1 ^ ")" |
---|
166 | | `ORL (`U2 (`DIRECT b1, `DATA b2)) -> |
---|
167 | "ORL direct #data (" ^ string_of_vect b1 ^ string_of_vect b2 ^ ")" |
---|
168 | | `ORL (`U3 (`C, `BIT b1)) -> |
---|
169 | "ORL `C bit (" ^ string_of_vect b1 ^ ")" |
---|
170 | | `ORL (`U3 (`C, `NBIT b1)) -> |
---|
171 | "ORL `C \\bit (" ^ string_of_vect b1 ^ ")" |
---|
172 | | `POP (`DIRECT b1) -> |
---|
173 | "POP direct (" ^ string_of_vect b1 ^ ")" |
---|
174 | | `PUSH (`DIRECT b1) -> |
---|
175 | "PUSH direct (" ^ string_of_vect b1 ^ ")" |
---|
176 | | `RET -> |
---|
177 | "RET" |
---|
178 | | `RETI -> |
---|
179 | "RETI" |
---|
180 | | `RL `A -> |
---|
181 | "RL `A" |
---|
182 | | `RLC `A -> |
---|
183 | "RLC `A" |
---|
184 | | `RR `A -> |
---|
185 | "RR `A" |
---|
186 | | `RRC `A -> |
---|
187 | "RRC `A" |
---|
188 | | `SETB `C -> |
---|
189 | "SETB `C" |
---|
190 | | `SETB (`BIT b1) -> |
---|
191 | "SETB bit (" ^ string_of_vect b1 ^ ")" |
---|
192 | | `SJMP (`REL b1) -> |
---|
193 | "SJMP rel (" ^ string_of_vect b1 ^ ")" |
---|
194 | | `SUBB (`A, `REG(r1,r2,r3)) -> |
---|
195 | "SUBB `A `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
196 | | `SUBB (`A, `DIRECT b1) -> |
---|
197 | "SUBB `A direct (" ^ string_of_vect b1 ^ ")" |
---|
198 | | `SUBB (`A, `INDIRECT i1) -> |
---|
199 | "SUBB `A @Ri (" ^ string_of_bit i1 ^ ")" |
---|
200 | | `SUBB (`A, `DATA b1) -> |
---|
201 | "SUBB `A #data (" ^ string_of_vect b1 ^ ")" |
---|
202 | | `SWAP `A -> |
---|
203 | "SWAP `A" |
---|
204 | | `XCH (`A, `REG(r1,r2,r3)) -> |
---|
205 | "XCH `A `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
206 | | `XCH (`A, `DIRECT b1) -> |
---|
207 | "XCH `A direct (" ^ string_of_vect b1 ^ ")" |
---|
208 | | `XCH (`A, `INDIRECT i1) -> |
---|
209 | "XCH `A @Ri (" ^ string_of_bit i1 ^ ")" |
---|
210 | | `XCHD(`A, `INDIRECT i1) -> |
---|
211 | "XCHD `A @Ri (" ^ string_of_bit i1 ^ ")" |
---|
212 | | `XRL(`U1(`A, `REG(r1,r2,r3))) -> |
---|
213 | "XRL `A `Rn (" ^ string_of_bit r1 ^ string_of_bit r2 ^ string_of_bit r3 ^ ")" |
---|
214 | | `XRL(`U1(`A, `DIRECT b1)) -> |
---|
215 | "XRL `A direct (" ^ string_of_vect b1 ^ ")" |
---|
216 | | `XRL(`U1(`A, `INDIRECT i1)) -> |
---|
217 | "XRL `A @Ri (" ^ string_of_bit i1 ^ ")" |
---|
218 | | `XRL(`U1(`A, `DATA b1)) -> |
---|
219 | "XRL `A #data (" ^ string_of_vect b1 ^ ")" |
---|
220 | | `XRL(`U2(`DIRECT b1, `A)) -> |
---|
221 | "XRL direct `A (" ^ string_of_vect b1 ^ ")" |
---|
222 | | `XRL(`U2(`DIRECT b1, `DATA b2)) -> |
---|
223 | "XRL direct #data (" ^ string_of_vect b2 ^ ")" |
---|