Files
solutions/02-cpu-commnads/task5.asm
root e5c09afc6d feat: приложены решения некоторых заданий на nasm
Обязательно понимание того, что я не проверял эти решения)
2024-09-21 23:13:41 +03:00

65 lines
1.6 KiB
NASM
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

global _start
section .text
%define SRC 0xB8000
%define DST 0xB9000
%define ARR_SIZE 10
%define PROT_READ 0x1
%define PROT_WRITE 0x2
%define MAP_PRIVATE 0x02
%define MAP_ANONYMOUS 0x20
_start:
; Из-за особенностей ядра линукса нужно сначала промапать произвольную память
mov rax, 0x9 ; mmap
mov rdi, SRC ; где
mov rsi, ARR_SIZE ; сколько
mov rdx, PROT_READ ; флаги чтения
or rdx, PROT_WRITE ; флаги записи
mov r10, MAP_PRIVATE ; приватная память
or r10, MAP_ANONYMOUS ; не связана с файлом
mov r9, 0 ; офсет должен быть 0
syscall
mov rsi, rax ; ставлю так, так как ядро линукса выделяет ближайшую область памяти, а не точно заказанную - проклятое выравнивание
; заполню чем-нибудь массив
mov rcx, ARR_SIZE
mov rbx, 0
.fill_src_loop:
mov [rsi + rbx], bl
inc rbx
loop .fill_src_loop
push rsi
mov rax, 0x9 ; mmap
mov rdi, DST ; где
mov rsi, ARR_SIZE ; сколько
mov rdx, PROT_WRITE ; флаги чтения
; or rdx, PROT_WRITE ; флаги записи
mov r10, MAP_PRIVATE ; приватная память
or r10, MAP_ANONYMOUS ; не связана с файлом
mov r9, 0 ; офсет должен быть 0
syscall
mov rdi, rax
; заполню чем-нибудь массив
mov rcx, ARR_SIZE ; сколько байт копируем
pop rsi
rep movsb
mov rax, 60
mov rdi, 0
syscall