Lab 2: Базовые команды и кодирование для процессора #2

Merged
mrqiz merged 21 commits from labs/02 into main 2024-09-22 18:15:51 +03:00
8 changed files with 288 additions and 0 deletions
Showing only changes of commit e5c09afc6d - Show all commits

29
02-cpu-commnads/task2.asm Normal file
View File

@ -0,0 +1,29 @@
global _start
section .data
source: db 1, 2, 3, 4, 5, 6, 7, 8
s_size equ $-source
section .bss
dest: resb 8
section .text
_start:
lea rsi, [source]
lea rdi, [dest]
mov rcx, s_size
.loop:
mov al, [rsi + rcx]
mov [rdi + rcx], al
loop .loop
mov rax, 60
mov rdi, 0
syscall

25
02-cpu-commnads/task3.asm Normal file
View File

@ -0,0 +1,25 @@
global _start
section .data
source: db 1, 2, 3, 4, 5, 6, 7, 8
s_size equ $-source
section .bss
dest: resb 8
section .text
_start:
mov rsi, source
mov rdi, dest
mov rcx, s_size
.loop:
rep movsb
loop .loop
mov rax, 60
mov rdi, 0
syscall

64
02-cpu-commnads/task5.asm Normal file
View File

@ -0,0 +1,64 @@
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