Changeset 146


Ignore:
Timestamp:
Sep 30, 2010, 3:27:15 PM (9 years ago)
Author:
sacerdot
Message:

Code improved.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Deliverables/D4.1/Pretty.ml

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