Задачи
Задача 1.
Вычислить выражение: (a + b) * c - d, где a=5, b=3, c=4, d=8. Результат вывести в консоль.
global main
extern printf
section .data
cura dd 5
curb dd 3
curc dd 4
curd dd 8
mymsg db "%d",10,0
section .text
main:
mov eax, 0
add eax, [cura]
add eax, [curb]
mov edx, [curc]
mul dword [curc]; in ax (a+b)*c
sub eax, [curd]
mov rsi, rax ; print results
mov rax, 0
mov rdi, mymsg
call printf
ret
Задача 2.
Перевернуть строку "Hello!" и вывести. Не использовать внешние функции кроме системных вызовов.
global _start
section .data
msg db "Hello!"abcdefg",10,0
msg_full_len equ $-msg
msg_half_len equ (msg_full_len - 1)2)/2
section .text
_start:
; mirroring string
mov rcx, msg_half_len
mov r8, msg_full_len - 23
mov r9, 0
mov rsi, msg
loop:
mov bl, [rsi + r8]
mov dl, [rsi + r9]
mov [rsi + r9], bl
mov [rsi + r8], dl
dec r8
inc r9
dec rcx
jnz loop
; printing string
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_full_lenmsg_full_len-1
syscall
mov rax, 60
mov rdi, 0
syscall
Задача 3.