Scanf запускается дважды, а не один раз при сборке x86_64
Я пытался запустить этот код, и что случилось -
а. scanf хочет "epsilon = %lf"
б. по какой-то причине программа не продолжает печатать epsilon, но снова проверяет на наличие "order = %d"
с. напечатать эпсилон на этом этапе
д. Сканируем еще раз для "order = %d"
е. распечатать первый заказ и выйти
Я хотел бы знать, почему программа дважды входила в scanf, и как это исправить =]
(есть терминал img ниже, чтобы увидеть шаги ae в актуальной программе)
global main
extern printf
extern scanf
section .data
epsilon_formatIN: db "epsilon = %lf",10,0
epsilon_formatOUT: db "epsilon = %lf",10,0
order_formatIN: db "order = %d",10,0
order_formatOUT: db "order = %d",10,0
section .bss
epsilon: resq 1
order: resb 1
section .text
main:
push rbp
mov rbp, rsp
mov rax, 0
.get_epsilon:
mov rdi, epsilon_formatIN
mov rsi, epsilon
mov rax, 0
call scanf
.print_epsilon:
mov rdi, epsilon_formatOUT
movsd xmm0, qword [epsilon]
mov rax, 1
call printf
.get_order:
mov rdi, order_formatIN
mov rsi, order
mov rax, 0
call scanf
.print_order:
mov rdi, order_formatOUT
mov rsi, [order]
mov rax, 0
call printf
pop rbp
ret
изображение терминала после компиляции и запуска этого кода: