section .data
    prompt db "Enter a number (1-10): ", 0  ; Повідомлення для введення числа
    result_message db "Factorial is: ", 0   ; Повідомлення для виведення результату
    newline db 0xA, 0

section .bss
    num resb 1        ; Змінна для збереження введеного числа

section .text
    global _start

_start:
    ; Вивести запит
    mov eax, 4           ; Системний виклик для виведення
    mov ebx, 1           ; Файл - стандартний вихід
    mov ecx, prompt      ; Вказівка на повідомлення
    mov edx, 24          ; Довжина повідомлення
    int 0x80             ; Виклик системи

    ; Читання введеного числа
    mov eax, 3           ; Системний виклик для вводу
    mov ebx, 0           ; Файл - стандартний вхід
    mov ecx, num         ; Місце для збереження введеного числа
    mov edx, 1           ; Читати 1 байт
    int 0x80             ; Виклик системи

    ; Перетворити введений символ в ціле число
    sub byte [num], '0'  ; Перетворення ASCII в ціле число

    ; Ініціалізація змінних
    mov al, [num]        ; Взяти введене число
    mov bl, al           ; Копія числа для факторіалу
    mov cl, 1            ; Стартове значення факторіала

factorial_loop:
    ; Перемножуємо факторіал
    mul cl               ; AL = AL * CL (результат у AX)
    mov al, ah           ; Копіюємо результат у AL
    dec bl               ; Зменшуємо число
    jnz factorial_loop   ; Якщо число не нульове, продовжуємо цикл

    ; Вивести результат
    mov eax, 4           ; Системний виклик для виведення
    mov ebx, 1           ; Файл - стандартний вихід
    mov ecx, result_message  ; Повідомлення для результату
    mov edx, 14          ; Довжина повідомлення
    int 0x80             ; Виклик системи

    ; Вивести результат факторіалу (тут потрібно реалізувати конвертацію числа в рядок)

    ; Вивести новий рядок
    mov eax, 4
    mov ebx, 1
    mov ecx, newline
    mov edx, 1
    int 0x80

    ; Завершити програму
    mov eax, 1           ; Системний виклик для завершення
    xor ebx, ebx         ; Код повернення
    int 0x80