Apologies in advance for asking this very simple (I'm sure) question. 

I'm using NASM assembler and have an intel i5 processor... if that's relevant... also, feel free to ignore the code comments I've made to myself... or comment on my comments, either way. :)

Here is my code:

```
; test_if_nasm.asm - if/then/else in NASM assembly language

bits 64
global main
extern puts

section .data
    A    dd    7
    B    dd    5
    LC0  db    "TRUE "
    LC1  db    "FALSE "

section .text
main:
; function setup
    push    rbp         ; set up stack frame??
    mov     rbp, rsp    ; copy rsp into rbp... what is in rsp???
    sub     rsp, 32     ; subtract 32 from value in rsp & save result
                        ; in rsp... but why?

; user code goes here
    mov     edx, [A]    ; We'll see
    mov     eax, [B]    ; copy value referenced by B into eax
    cmp     edx, eax    ; compare edx to eax
    jle     printFalse  ; if edx <= eax, go to L2
    mov     edi, LC0    ; executes if eax > edx, move LC0 ("T") into edi
    call    puts        ; print... what's in edi (LC0)... right?
    jmp     exit        ; ensures exit after printing "TRUE"

printFalse:
    mov     edi, LC1    ; copy LC1 ("F") into edi
    call    puts        ; print ... what's in edi (LC1)... right?
    jmp     exit        ; don't go back and also print out true

; function return

exit:                   ; Other than this being a return function
    mov    eax, 0       ; I have not one single clue what is going
    add    rsp, 32      ; on here or why.
    pop    rbp
    ret                 ; Pretty sure this means return. Woohoo!

```

Okay, so here's my issue:

When A = 5 and B = 7, this thing prints out "FALSE" and exits - works! However, when A = 7 and B = 5, it prints out "TRUE FALSE " before exiting... how come it ignores my "jmp exit" statement following the call to puts that prints out "TRUE"?