_main:
    MOV R0 1   ; b
    SUB R1 R1  ; b
    SUB R2 R2  ; a
    SUB R3 R3  ; a

_loop:
    OUT R2
    OUT R3

    PUSH R0  ; Sauvegarde de b
    PUSH R1

    PUSH R1    ; R0 R1 => b   R2 R3 => a. Retourne b = b + a = c
    SUB R1 R1
    SUB R1 R2
    SUB R0 R1
    POP R1      ; R0 = R0 + R2

    CMP R0 R2   ; Si overflow, il faut +1 R3 (a oct fort)
    JLT _add16cr1debut
    JMP _add16cr1fin
_add16cr1debut:
    SUB R3 255
_add16cr1fin:

    PUSH R0
    SUB R0 R0
    SUB R0 R3
    SUB R1 R0
    POP R0      ; R1 = R1 + R3
    CMP R1 R3
    JLT _add16cr2debut
    JMP _add16cr2fin
_add16cr2debut:
    JMP _end
_add16cr2fin:

    POP R3  ; Reprise de b
    POP R2
    JMP _loop

_end:
    POP R3
    POP R2
    RET
