segment .text global main extern printf, scanf a equ local1 b equ local2 main: 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 rdi, [.prompt] xor eax, eax call printf lea rdi, [.scanf] lea rsi, [rbp+a] lea rdx, [rbp+b] xor eax, eax call scanf cmp ax, 2 jne .done movsd xmm0, [rbp+a] movsd xmm1, [rbp+b] ucomisd xmm0, xmm1 jb .b .bret movsd xmm0, [rbp+a] ucomisd xmm0, xmm1 jbe .be .beret movsd xmm0, [rbp+a] movsd xmm1, [rbp+b] ucomisd xmm0, xmm1 jg .a .aret movsd xmm0, [rbp+a] movsd xmm1, [rbp+b] ucomisd xmm0, xmm1 jae .ae .aeret movsd xmm0, [rbp+a] movsd xmm1, [rbp+b] ucomisd xmm0, xmm1 je .e .eret movsd xmm0, [rbp+a] movsd xmm1, [rbp+b] ucomisd xmm0, xmm1 jne .ne .neret jmp .loop segment .data .printb db "%f < %f",0x0a,0 segment .text .b: lea rdi, [.printb] mov eax, 2 call printf jmp .bret segment .data .printbe db "%f <= %f",0x0a,0 segment .text .be: lea rdi, [.printbe] mov eax, 2 call printf jmp .beret segment .data .printa db "%f > %f",0x0a,0 segment .text .a: lea rdi, [.printa] mov eax, 2 call printf jmp .aret segment .data .printae db "%f >= %f",0x0a,0 segment .text .ae: lea rdi, [.printae] mov eax, 2 call printf jmp .aeret segment .data .printe db "%f == %f",0x0a,0 segment .text .e: lea rdi, [.printe] mov eax, 2 call printf jmp .eret segment .data .printne db "%f != %f",0x0a,0 segment .text .ne: lea rdi, [.printne] mov eax, 2 call printf jmp .neret .done mov eax, 0 leave ret