Skip to main content

Задачи

Задача 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.