Загрузка данных


; --- SECTION .DATA: Определяем данные (строки для вывода) ---
section .data
    prompt_msg db "Сейчас утро? (Y/N): ", 0x0A ; Запрос с новой строки
    prompt_len equ $ - prompt_msg             ; Длина строки запроса

    morning_msg db "Доброе утро!", 0x0A      ; Сообщение для 'N'
    morning_len equ $ - morning_msg           ; Длина сообщения

    day_msg db "Добрый день!", 0x0A          ; Сообщение для других символов
    day_len equ $ - day_msg                   ; Длина сообщения

    input_buffer db 0                         ; Буфер для хранения символа с клавиатуры (1 байт)

; --- SECTION .TEXT: Определяем исполняемый код ---
section .text
    global _start ; Точка входа для линкера

_start:
    ; --- Вывести запрос "Сейчас утро? (Y/N): " ---
    ; Syscall: write (номер 1)
    ; rdi: File Descriptor (1 = stdout)
    ; rsi: Адрес строки
    ; rdx: Длина строки
    mov rax, 1             ; Syscall #1 (write)
    mov rdi, 1             ; File descriptor for stdout
    mov rsi, prompt_msg    ; Address of prompt_msg
    mov rdx, prompt_len    ; Length of prompt_msg
    syscall                ; Execute syscall

    ; Принять один символ с клавиатуры 
    ; Syscall: read (номер 0)
    ; rdi: File Descriptor (0 = stdin)
    ; rsi: Адрес буфера для сохранения ввода
    ; rdx: Максимальное количество байт для чтения (1 символ)
    mov rax, 0             ; Syscall #0 (read)
    mov rdi, 0             ; File descriptor for stdin
    mov rsi, input_buffer  ; Address of input_buffer
    mov rdx, 1             ; Read only 1 byte
    syscall                ; Execute syscall

    ; Сравнить введенный символ с 'N' 
    ; Первый символ из буфера input_buffer
    cmp byte [input_buffer], 'N' ; Сравниваем первый байт буфера с ASCII-кодом 'N'
    je .print_morning          ; Если равно 'N', перейти к выводу "Доброе утро!"

    ; Дополнительно: Проверить на 'n' (строчные буквы) 
    cmp byte [input_buffer], 'n' ; Сравниваем первый байт буфера с ASCII-кодом 'n'
    je .print_morning          ; Если равно 'n', перейти к выводу "Доброе утро!"

    ; Если не 'N' и не 'n', то вывести "Добрый день!" 
    mov rax, 1             ; Syscall #1 (write)
    mov rdi, 1             ; File descriptor for stdout
    mov rsi, day_msg       ; Address of day_msg
    mov rdx, day_len       ; Length of day_msg
    syscall                ; Execute syscall
    jmp .exit_program      ; Перейти к завершению программы

.print_morning:
    ; Вывести "Доброе утро!" 
    mov rax, 1             ; Syscall #1 (write)
    mov rdi, 1             ; File descriptor for stdout
    mov rsi, morning_msg   ; Address of morning_msg
    mov rdx, morning_len   ; Length of morning_msg
    syscall                ; Execute syscall

.exit_program:
    ; --- Завершить программу ---
    ; Syscall: exit (номер 60)
    ; rdi: Код выхода (0 = успех)
    mov rax, 60            ; Syscall #60 (exit)
    mov rdi, 0             ; Exit code 0
    syscall                ; Execute syscall