Version 1 of assemble

Updated 2011-03-09 13:26:42 by dkf
tcl::unsupported::assemble talScript

Assembles the TAL in talScript into bytecode, and then executes it.

Example

Ulam's 3n+1 problem

proc ulam {n} {
    assemble {
        load n;                # max
        dup;                # max n
        jump start;     # max n
    
        label loop;        # max n
        over 1;         # max n max
        over 1;                # max in max n
        ge;             # man n max>=n
        jumpTrue skip;  # max n

        reverse 2;      # n max
        pop;            # n
        dup;            # n n
    
        label skip;        # max n
        dup;            # max n n
        push 2;         # max n n 2
        mod;            # max n n%2
        jumpTrue odd;   # max n
    
        push 2;         # max n 2
        div;            # max n/2 -> max n
        jump start;     # max n
     
        label odd;        # max n
        push 3;         # max n 3
        mult;           # max 3*n
        push 1;         # max 3*n 1
        add;            # max 3*n+1
            
        label start;        # max n
        dup;                # max n n
        push 1;                # max n n 1
        neq;                # max n n>1
        jumpTrue loop;        # max n
            
        pop;                # max
    }
}