bits 8

@define case_result %numb
@define test_cases %int
@define test_end %text
@define test_end_data '\n'
@define total_tests %uint
imm r1 1

out total_tests 7

// sub (tested first because it is important)
    sub r1 5 5
    out case_result r1

    sub r1 5 3
    add r1 r1 -2
    out case_result r1

    sub r1 3 5
    add r1 r1 2
    out case_result r1
out test_cases 3
out test_end test_end_data
imm r1 1

// imm
    imm r1 3
    sub r1 r1 3
    out case_result r1
out test_cases 1
out test_end test_end_data
imm r1 1

// add
    add r1 0x9f 0x8b
    sub r1 r1 0x2a
    out case_result r1
out test_cases 1
out test_end test_end_data
imm r1 1

// rsh
    rsh r1 0x89
    sub r1 r1 68
    out case_result r1
out test_cases 1
out test_end test_end_data
imm r1 1

// lod & str
    str m0 69
    str m1 42

    lod r1 m0
    sub r1 r1 69
    out case_result r1

    lod r1 m1
    sub r1 r1 42
    out case_result r1

    imm r1 m0
    str r1 42
    imm r1 m1
    str m1 69

    lod r1 r1
    sub r1 r1 69
    out case_result r1

    imm r1 m0
    lod r1 r1
    sub r1 r1 42
    out case_result r1
out test_cases 4
out test_end test_end_data
imm r1 1

// bge
    bge .bge_ok_1 69 69
    out case_result 1

    .bge_ok_1
    out case_result 0

    bge .bge_ok_2 246 240
    out case_result 2

    .bge_ok_2
    out case_result 0
    bge .bge_fail 240 246
    bge .bge_ok_3 r0 r0

    .bge_fail
    out case_result 3

    .bge_ok_3
    out case_result 0
    imm r1 .bge_ok_4
    bge r1 r0 r0
    out case_result 4

    .bge_ok_4
    out case_result 0
out test_cases 4
out test_end test_end_data

// nor
    nor r1 3 5
    sub r1 r1 248
    out case_result r1
out test_cases 1
out test_end test_end_data
imm r1 1
