segment .text
        global  main
        extern  printf, scanf
main:
a       equ     local1
b       equ     local2
        push    rbp
        mov     rbp, rsp
        frame   2, 2, 3
        sub     rsp, frame_size
        segment .data
.scanf  db      "%lf %lf",0
.prompt db      "Enter 2 floating point numbers: ",0
        segment .text
.loop   lea     rcx, [.prompt]
        call    printf
        lea     rcx, [.scanf]
        lea     rdx, [rsp+a]
        lea     r8, [rsp+b]
        call    scanf
        cmp     ax, 2
        jne     .done
        movsd   xmm0, [rbp+a]
        movsd   xmm1, [rbp+b]
        ucomisd xmm0, xmm1
        jb      .b
.bret   movsd   xmm0, [rsp+a]
        ucomisd xmm0, xmm1
        jbe     .be
.beret  movsd   xmm0, [rsp+a]
        movsd   xmm1, [rsp+b]
        ucomisd xmm0, xmm1
        jg      .a
.aret   movsd   xmm0, [rsp+a]
        movsd   xmm1, [rsp+b]
        ucomisd xmm0, xmm1
        jae     .ae
.aeret  movsd   xmm0, [rsp+a]
        movsd   xmm1, [rsp+b]
        ucomisd xmm0, xmm1
        je      .e
.eret   movsd   xmm0, [rsp+a]
        movsd   xmm1, [rsp+b]
        ucomisd xmm0, xmm1
        jne     .ne
.neret  jmp     .loop

        segment .data
.printb db      "%f < %f",0x0a,0
        segment .text
.b:
        lea     rcx, [.printb]
        movsd   xmm2, xmm1
        movq    r8, xmm2
        movsd   xmm1, xmm0
        movq    rdx, xmm1
        call    printf
        jmp     .bret

        segment .data
.printbe db      "%f <= %f",0x0a,0
        segment .text
.be:
        lea     rcx, [.printbe]
        movsd   xmm2, xmm1
        movq    r8, xmm2
        movsd   xmm1, xmm0
        movq    rdx, xmm1
        call    printf
        jmp     .beret

        segment .data
.printa db      "%f > %f",0x0a,0
        segment .text
.a:
        lea     rcx, [.printa]
        movsd   xmm2, xmm1
        movq    r8, xmm2
        movsd   xmm1, xmm0
        movq    rdx, xmm1
        call    printf
        jmp     .aret

        segment .data
.printae db      "%f >= %f",0x0a,0
        segment .text
.ae:
        lea     rcx, [.printae]
        movsd   xmm2, xmm1
        movq    r8, xmm2
        movsd   xmm1, xmm0
        movq    rdx, xmm1
        call    printf
        jmp     .aeret

        segment .data
.printe db      "%f == %f",0x0a,0
        segment .text
.e:
        lea     rcx, [.printe]
        movsd   xmm2, xmm1
        movq    r8, xmm2
        movsd   xmm1, xmm0
        movq    rdx, xmm1
        call    printf
        jmp     .eret

        segment .data
.printne db      "%f != %f",0x0a,0
        segment .text
.ne:
        lea     rcx, [.printne]
        movsd   xmm2, xmm1
        movq    r8, xmm2
        movsd   xmm1, xmm0
        movq    rdx, xmm1
        call    printf
        jmp     .neret

.done   mov     eax, 0
        leave
        ret