Мій перший досвід в Assembler
Уся сказана інформація в цьому пості суто моя особиста думка і знання, тому не варто писати злі коменти на кшталт "Ой фууу, ти нічого не знаєш". Дякую за розуміння!
Мова Assembler - це така сама мова програмування як і інші (Python, C#, Java, C++ тощо), АЛЕ це низькорівнева мова. Це означає що коли ти пишеш код на Assembler, то ти напряму спілкуєшся з регістрами, стеком тощо. А ось наприклад на Python цього нема. Також Assembler це мова де нема нічого... Ні функцій, ні циклів, нічого і це повинен робити ТИ САМ.
Взагалі зараз мало або майже ніхто на ній не пише і можна запитати, а навіщо вчити тоді? Ну взагалі є думка, що якщо ти знаєш Assembler, то ти знаєш як працює твій код на високорівневій мові та як взагалі працює твій ПК. Не зважаючи на те, що вона має різний код (в залежності від процесора), на цій мові можна і треба писати ті речі які на високорівневій мові будуть важко, наприклад: ядро ОС, драйвера, віруси. Також відомо, що Assembler-ий код найшвидший але при умові, що ти цей код написав як треба). В наші часи компілятори оптимізують код дуже добре але тут також якщо буде якась помилка при компіляції, то ти із знаннями Assembler-а це легко пофіксиш. Ще одна причина вчити Assembler, якщо ти хочеш займатися Дизасомбліацією. Це цікава справа але там зазвичай ти більше читаєш код Assembler, ніж пишеш його.
Мої враження при написанні перших строк коду на Assembler
Нууу... Якщо в двух словах, то це досить важко :). Якщо в Python для виведення Hello world в консоль, то треба написати просто:
python('Hello world')
А ось для MS-DOS з процесором 8088 потрібно було написати цей код:
org 0x100 @@start: mov bx, string @@repeat: mov al, [bx] cmp al, 0 je @@end push bx mov ah, 0x0E mov bx, 0x000F int 0x10 pop bx inc bx jmp @@repeat @@end: int 0x20 string: db "Hello world", 0
Потім скачати Nasm (є інші, але я вибрав цей) для компіляції в файл для MS-DOS командою:
nasm -f bin file.asm -o file.com
"file" - це назва файлу, може бути різна. Потім запустити цей файл через MS-DOS. І після цього вже буде в консолі Hello world. Ось в чому різниця між Assembler та Python :)
Які в мене були проблеми та як я вирішив?
Я використовував для цих маніпуляцій ОС Linux Fedora 38. Для початку мені потрібно було завантажити Nasm через dnf та архівом щоб я міг цей архів закинути в Dosbox. Вся проблема в тому, що версій багато, а яку версію брати? Ніде я це не знайшов, тому брав навмання та перевіряв. Потім я через 100 і 1 спробу зміг скомпілювати код Assembler в .com для MS-DOS. Чому так багато? Тому що я незнав як і намагався розібратися. Потім треба було якось змонтувати диск з Nasm в Dosbox. Що я робив? Також просто брав і пробував... Я вирішував всі проблеми спробами і це те що я хотів передати в цьому абзаці). Якщо я б просто подивився в Ютубі як треба це робити, перекопіював і в мене не було б розуміння навіщо це зробив там і там (код я копіював тому, що я взагалі незнаю коду цієї мови). В мене було багато спроб які закінчувалися невдачами але що я зробив? Не здався і пробував ще і ще... І в мене все виходило, тому і у вас все вийде!!
Ті хто дочитав до кінця дякую велике дякую! Це досить важка тема для всіх особливо якщо не працював з кодом високорівневої мови але це тільки мій погляд та як я це робив все і може когось змотивував хочш трохи вивчити цю мову або дав нові знання :) Буду дуже радий підпискою та якимось фідбеком на каналі: https://t.me/turtle_hack