Спеціалізовані мови програмування
VTFK • 2025
Лекція 3: Архітектура x86-64
Фокус: інструменти розробки
Портативний асемблер для x86/x86-64, який перетворює Assembly код в машинний код.
Аналогія: Як перекладач з англійської в китайську — Assembly для людини, машинний код для CPU
День на день
# Навігація
pwd # /Users/alex/dev
ls -la # Список з прихованими файлами
cd ~/projects # Home directory
cd .. # Батьківська папка
# Роботи з файлами
cat main.asm # Показати вміст
touch hello.asm # Новий файл
mkdir src # Нова папка
cp main.asm backup.asm # Копіювання
rm backup.asm # Видалення
Як Assembly стає програмою
Мінімальна програма
; hello.asm - Hello World
section .data
msg db "Hello, World!", 0
section .text
global _main ; точка входу для macOS
_main:
mov rax, 0x2000004 ; syscall: write
mov rdi, 1 ; stdout
mov rsi, msg ; адреса повідомлення
mov rdx, 13 ; довжина
syscall
mov rax, 0x2000001 ; syscall: exit
mov rdi, 0
syscall
Файл, що описує як компілювати проект: залежності, команди, мета (target).
Аналогія: Як рецепт готування: 'якщо A змінилось, перебудувати B, потім запустити C'
Автоматизація компіляції
# Makefile для Assembly проекту
CC = nasm
LD = ld
FLAGS = -f macho64
all: hello
hello: hello.o
$(LD) -lSystem -o hello hello.o
hello.o: hello.asm
$(CC) $(FLAGS) hello.asm -o hello.o
clean:
rm -f hello.o hello
.PHONY: all clean
Приклади команд
# Побудувати все (за замовчуванням перший target)
make
# Побудувати конкретна мета
make hello.o
# Очистити побудовані файли
make clean
# Примусова перебудова (навіть якщо файли не змінилися)
make -B all
.o — готовий машинний код, але функції мають відносні адреси. Лінкер розміщує їх в памяти і фіксує адреси.
Makefile дуже щепетлив до форматування
hello.o: hello.asm
nasm -f macho64 hello.asm -o hello.o # пробілами
Помилка: make: *** missing separator. Stop.
hello.o: hello.asm
nasm -f macho64 hello.asm -o hello.o # TAB символ
Команда має починатися с символу TAB (не 4 пробілів!)
Далі — основи NASM: секції, інструкції, пам'ять
Лекція 5: Основи NASM
Дякую за увагу! 💾