Код IT Загрузка примера кода…

Assembler main.asm
section .text
global _start

_start:
    mov rdi, 5
    call factorial
    ; результат в RAX
    mov rdi, rax
    mov rax, 60      ; sys_exit
    syscall

factorial:
    cmp rdi, 1
    jle .base_case
    push rdi         ; сохраняем текущий n
    dec rdi
    call factorial   ; рекурсивный вызов
    pop rbx          ; восстанавливаем n
    imul rax, rbx    ; RAX = RAX * n
    ret
.base_case:
    mov rax, 1
    ret
section .text
global _start

_start:
    mov rdi, 5
    call factorial
    ; результат в RAX
    mov rdi, rax
    mov rax, 60      ; sys_exit
    syscall

factorial:
    cmp rdi, 1
    jle .base_case
    push rdi         ; сохраняем текущий n
    dec rdi
    call factorial   ; рекурсивный вызов
    pop rbx          ; восстанавливаем n
    imul rax, rbx    ; RAX = RAX * n
    ret
.base_case:
    mov rax, 1
    ret