Ignore:
Timestamp:
Oct 20, 2010, 1:35:59 PM (9 years ago)
Author:
mulligan
Message:

New features:

1) conditional jumps to labels implemented

[Note: all conditional jumps are to relative addresses;

if the label is too far away, an assert false is currently raised]

2) we now have a preamble of declarations of data labels in external

memory and a new pseudo-instruction "Mov" to place the value of a
data label into DPTR.

File:
1 edited

Legend:

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

    r150 r200  
    2424  | `INDIRECT x -> if not x then "@R0" else "@R1"
    2525  | `IND_DPTR -> "@DPTR"
     26  | `Label s -> s
    2627;;
     28
     29let pp_jump =
     30 function
     31    `CJNE (`U1 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ " " ^ pp_arg a2 ^ " " ^ pp_arg a3
     32  | `CJNE (`U2 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ " " ^ pp_arg a2 ^ " " ^ pp_arg a3
     33  | `DJNZ (a1,a2) -> "djnz " ^ pp_arg a1 ^ " " ^ pp_arg a2
     34  | `JB (a1,a2) -> "jb " ^ pp_arg a1 ^ " " ^ pp_arg a2
     35  | `JBC (a1,a2) -> "jbc " ^ pp_arg a1 ^ " " ^ pp_arg a2
     36  | `JC a1 -> "jc " ^ pp_arg a1
     37  | `JNB (a1,a2) -> "jnb " ^ pp_arg a1 ^ " " ^ pp_arg a2
     38  | `JNC a1 -> "jnc " ^ pp_arg a1
     39  | `JNZ a1 -> "jnz " ^ pp_arg a1
     40  | `JZ a1 -> "jz  " ^ pp_arg a1
    2741
    2842let pp_instruction =
     
    3044    `Label l -> l ^ ":"
    3145  | `Cost l -> l ^ ":"
    32   | `Jmp j -> "Jump: " ^ j
    33   | `Call j -> "Call: " ^ j
     46  | `Jmp j -> "Jump " ^ j
     47  | `Call j -> "Call " ^ j
     48  | `WithLabel i -> pp_jump i
     49  |  (#jump as i) -> pp_jump i
     50  | `Mov (a1,a2) -> "Mov " ^ pp_arg a1 ^ " " ^ a2
    3451  | `ACALL a1 -> "acall " ^ pp_arg a1
    3552  | `ADD (a1,a2) -> "add " ^ pp_arg a1 ^ " " ^ pp_arg a2
     
    3956  | `ANL (`U2 (a1,a2)) -> "anl " ^ pp_arg a1 ^ " " ^ pp_arg a2
    4057  | `ANL (`U3 (a1,a2)) -> "anl " ^ pp_arg a1 ^ " " ^ pp_arg a2
    41   | `CJNE (`U1 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ " " ^ pp_arg a2 ^ " " ^ pp_arg a3
    42   | `CJNE (`U2 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ " " ^ pp_arg a2 ^ " " ^ pp_arg a3
    4358  | `CLR a1 -> "clr " ^ pp_arg a1
    4459  | `CPL a1 -> "cpl " ^ pp_arg a1
     
    4661  | `DEC a1 -> "dec " ^ pp_arg a1
    4762  | `DIV (a1,a2) -> "div " ^ pp_arg a1 ^ " " ^ pp_arg a2
    48   | `DJNZ (a1,a2) -> "djnz " ^ pp_arg a1 ^ " " ^ pp_arg a2
    4963  | `INC a1 -> "inc " ^ pp_arg a1
    50   | `JB (a1,a2) -> "jb " ^ pp_arg a1 ^ " " ^ pp_arg a2
    51   | `JBC (a1,a2) -> "jbc " ^ pp_arg a1 ^ " " ^ pp_arg a2
    52   | `JC a1 -> "jc " ^ pp_arg a1
    5364  | `JMP a1 -> "jmp " ^ pp_arg a1
    54   | `JNB (a1,a2) -> "jnb " ^ pp_arg a1 ^ " " ^ pp_arg a2
    55   | `JNC a1 -> "jnc " ^ pp_arg a1
    56   | `JNZ a1 -> "jnz " ^ pp_arg a1
    57   | `JZ a1 -> "jz  " ^ pp_arg a1
    5865  | `LCALL a1 -> "lcall " ^ pp_arg a1
    5966  | `LJMP a1 -> "ljmp " ^ pp_arg a1
Note: See TracChangeset for help on using the changeset viewer.