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

изображение терминала после компиляции и запуска этого кода:

изображение терминала после компиляции и запуска этого кода

0 ответов

Другие вопросы по тегам