Задачи
Задача 1.
Вычислить выражение: (a + b) * c - d, где a=5, b=3, c=4, d=8. Результат вывести в консоль.
Проверяет: Работу с регистрами, базовые арифметические операции.
Задача 2.
Перевернуть строку "Hello!" и вывести. Не использовать внешние функции кроме системных вызовов.
Проверяет: Работу с памятью, циклами, обработку строк.
Задача 3.
В массиве чисел [7, 2, 9, 1, 5] найти максимальный элемент и вывести его.
global main
extern printf
section .data
nums db 7, 2, 9, 1, 5
nums_len equ $-nums
infostr db "Max number: %d",10,0
section .text
main:
mov rcx, nums_len
mov rax, 0
mainloop:
cmp byte [nums + rcx-1], al
ja new_max
dec rcx
jnz mainloop
jmp progend
new_max:
mov al, [nums + rcx -1]
dec rcx
jnz mainloop
progend:
mov rsi, rax
mov rax, 0
mov rdi, infostr
call printf
mov rax, 60
syscall
Проверяет: Работу с массивами, условные переходы.
Задача 4.
Реализуйте рекурсивную функцию вычисления факториала для n=5
extern printf
section .data
msg db "Factorial: %d",10,0
fact equ 5
section .text
global main
main:
mov rcx, fact
mov rax, 1
call factorial
mov rsi, rax
mov rax, 0
mov rdi, msg
call printf
mov rax, 60
xor rdi, rdi
syscall
factorial:
mul rcx
dec rcx
cmp rcx, 1
jnz factorial
ret
Проверяет: Понимание стека, рекурсии, соглашений о вызовах.
Задача 5.