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