Другие языки программирования и технологии

Как учить ассемблер?

можно ли с ноутбуком АМД начать его учить а не на интеле
В основном все одно и то же, оба процессора x86_64
За исключением отдельных специфических фич, там и там
СЕ
Сергей Ерохин
341
Лучший ответ
Алексей Легай в видеоуроках интел
учить - по книгам (изучить архитектуру компьютера, систему команд, форматы передачи данных и т.п.).
J?l Sezar Eren
J?l Sezar Eren
57 002
Тогда это будет gayсемблер
Нихера себе, тебе не жирно 4 языка учить, запутываешь всех), тебе помогать в вопросе, как стенке что-то говорить, ты его тупо как вилкой омлет потрогаешь месяц, и забросишь
Не нужно учить ассемблер
Олег Логачёв Почему? о_О
Процессоры intel и amd имеют архитектуру x86, соответсвенно тебе нужно учить x86 ассемблер. Если тебе нужно что-то написать для ARM процессоров(STM микроконтроллеры, смартфоны, хромбуки, мак на базе Apple M1), то тебе нужно изучать ARM ассемблер. Я не знаю где можно нормально изучить современный(32/64 битный) ассемблер и не знаю есть ли современные книги по ассемблеру. Могу предложить такой путь:
1) поставь MS-DOS на виртуальную машину и изучить 16-битный ассемблер (Real Mode)(найди на youtube канал AlekOS, у него есть 4 полезных в твоем случае видео: "как работает процессор", "как работает стек" и 2 части "язык ассемблера с нуля")
2) Далее можно смело переходить на 32 битный ассемблер(Protected mode), тестировать можно уже на своей машине(собирать программу нужно по-особенному, если у тебя 64-битная система). Если в MS-DOS ты использовал прерывания доса и биоса для взаимодействия с системой, то на windows для этого тебе нужно линковать системные библеотеки(kernel32.dll, user32.dll и т.д.) и вызывать оттуда WinAPI функции используя 32-битный MS ABI(загуглишь), так же изучи соглашения о вызовах(должно быть в спецификации используемого ABI). Для Linux тебе придется использовать инструкцию syscall (или int 0x80) (https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md), в linux используется SYSV ABI (загуглишь).
3) 64-битный ассемблер(Long mode) отличается только названиями и количеством регистров, а также версией ABI.

P.S. x86 архитектура не обновлялась много лет, туда добавляют "расширения" ( https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D1%8B_x86 - список основных расширений, их намного больше). Компиляторы ассемблера отличаются своим синтаксисом, сам ипользую nasm, если не ошибаюсь под MS-DOS есть только masm(из актуальных), есть два диалекта ассемблера: AT&T и Intel, последний самый понятный и не важно что у тебя AMD(ядро linux, а также компилятор GCC ипользуют AT&T). Числа с плавающей точкой на современный компьютерах обрабатываются с помощью расширения SSE (для более точных вычислений - AVX). Если тебе нужна информация о всех расширениях, ищи доки от Intel или AMD про нужное семейство процессоров. Расширения Intel и AMD идут вровень(один создает, другой ворует и наоборот).
http://ref.x86asm.net/index.html - список всех инструкций
https://github.com/ReturnInfinity/Pure64 - загрузчик для ОС BareMetal написанный на всех трех ассемблерах (16, 32, 64)
http://www.cs.cmu.edu/~ralf/files.html - список всех прерываний DOS и BIOS от Ральфа Брауна

P.P.S. Ассемблер сейчас не нужен даже для написания драйверов, Си с этим прекрасно справляется. Его используют для программирования микроконтроллеров с сильно ограниченным кол-вом памяти и для написания операционных систем. Если ты хочешь стать реверс-инженером, скачай курс на rutracker. Вся эта фигня того не стоит.
Ainur Ermuhanov
Ainur Ermuhanov
415
Ainur Ermuhanov P.P.P.S Если все-таки хочешь изучать ассемблер, будет полезно знать: первый 16-битный процессор на x86 архитекуре - intel 8086, 32-битной - intel 80286 aka i286(с серьезными дорбатками в intel 80386 aka i386), первый pentium имеет кодовое название i686, первый 64-битный процессор разработала amd и алиасом для 64-битной архитектуры являются x86-64 или amd64 (Процессоры так то 32-битные, поскольку long mode(64-битный режим) является расширением а не частью архитектуры)
Ainur Ermuhanov P.P.P.P.S ты неделю назад задавал вопрос "Почему компилятор выдает ошибку?с++", какой ассемблер, клоун???
Сгачала нужно хорошо разобраться с железом.