https://github.com/akkartik/mu/blob/master/subx/examples/ex3.subx

     1 # Add the first 10 numbers, and return the result in the exit code.
     2 #
     3 # To run (from the subx directory):
     4 #   $ ./subx translate examples/ex3.subx -o examples/ex3
     5 #   $ ./subx run examples/ex3
     6 # Expected result:
     7 #   $ echo $?
     8 #   55
     9
    10 == code
    11 #   instruction                     effective address                                                   register    displacement    immediate
    12 # . op          subop               mod             rm32          base        index         scale       r32
    13 # . 1-3 bytes   3 bits              2 bits          3 bits        3 bits      3 bits        2 bits      2 bits      0/1/2/4 bytes   0/1/2/4 bytes
    14
    15     # result: EBX = 0
    16     bb/copy-to-EBX  0/imm32
    17     # counter: ECX = 1
    18     b9/copy-to-ECX  1/imm32
    19
    20 $loop:
    21     # if (counter > 10) break
    22     81          7/subop/compare     3/mod/direct    1/rm32/ECX    .           .             .           .           .               0xa/imm32         # compare ECX
    23     7f/jump-if-greater  $exit/disp8
    24     # result += counter
    25     01/add                          3/mod/direct    3/rm32/EBX    .           .             .           1/r32/ECX   .               .                 # add ECX to EBX
    26     # ++counter
    27     41/inc-ECX
    28     # loop
    29     eb/jump  $loop/disp8
    30
    31 $exit:
    32     # syscall(exit, EBX)
    33     b8/copy-to-EAX  1/imm32/exit
    34     cd/syscall  0x80/imm8
    35
    36 # . . vim:nowrap:textwidth=0