Assembler. С чего начать?

RAMZAY
Меня этот выбор между gas(ат&т) и nasm(интел) прям разрывает. Просто боюсь выбрать не то,а как известно учить с нуля проще чем переучиваться и ломать мозг.

Можно освоить и то и другое. Главное знать принципы - а синтаксис пустяки. Я с интел на ат&т очень быстро переучился
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
RAMZAY
Меня этот выбор между gas(ат&т) и nasm(интел) прям разрывает. Просто боюсь выбрать не то,а как известно учить с нуля проще чем переучиваться и ломать мозг.

Natrio и maisvendoo правильно говорят: синтаксис - дело десятое. Намного важнее понимать архитектуру процессора: регистры, наборы команд, виды адресаций, таблица прерываний и т.д. Это огромный пласт информации, даже если не касаться предсказаний переходов, устройства кэша, микрокода и еще многих интересных, но сложных вещей.

Но, фломастеры-фломастерами, а у меня АТ&Т синтаксис не нравится категорически своей избыточностью: $ перед числами, % перед регистрами, ненужные постфиксы и префиксы к командам. А
addl -0x40(%ebx,%ecx,0x4),%eax
вместо более человеко-читаемого
add eax, [ebx+ecx*4-0x40]
вызывает несварение мозга.

Из компиляторов мне нравится fasm. Минимализм в действии. А его макросы способны творить чудеса :)

Из ресурсов могу посоветовать http://wasm.ru. Правда, он сейчас в ремонте, но форум вполне себе функционирует и есть раздел для новичков и по asm в unix.

Немного офтопа:
Приехала тут на днях отладочная платка с ARM на борту (STM32). После CISC x86 архитектуры, где скоро будет команда "mkcoffee", RISC заставляет моё сознание забиться в самый темный уголок и плакать. Но, блин, красиво. Особенно условные команды.
посовещавшись с препадом,послушав вас и подумав,решил выбрать nasm(intel),буду с ним разбираться в основах,судя по документации он тоже поддерживает макросы. Еще возник вопрос:в чём разница между fasm и nasm ? Они ведь оба поддерживают макросы.
Я, конечно, отстал от жизни, но поясните мне смысл макрухи. Не проще ли сделать подпрограмму и вызывать ее? Или компактный машинный код уже не в моде?
Какой ассемблер выбрать для изучения? - статья хоть и очень старая, но почитать можно.
+ Linux Assembly website
Ошибки не исчезают с опытом - они просто умнеют
RAMZAY
Еще возник вопрос:в чём разница между fasm и nasm ? Они ведь оба поддерживают макросы.

Да по мелочам различаются. Например, nasm может добавлять отладочную информацию, что иногда бывает полезно. Зато fasm'у не нужен линковщик: он может сам собирать исполняемый elf, когда как после nasm нужно еще прогонять ld или gcc. Макроязык у fasm намного более развит, но проявляться это начинает на более-менее больших проектах (KolibriOS и MenuetOS, как пример - две операционки полностью написанные на ассемблере).
Поддержка инструкций у обоих одинаково хороша.

fasm мне нравится своей внутренней простотой. Там нет ни одного лишнего символа. Как сказал один товарищ: "Nasm разрабатывают толковые ребята, но fasm написал один гениальный человек" :)

Aivar
Или компактный машинный код уже не в моде?

Так одно другому не мешает. Макросы нужны, чтобы упростить некоторые вещи. Пример. ARM с командами thumb2. Нельзя поместить 32-битное значение сразу в регистр одной инструкцией. Сначала помещается младшее полуслово в младшую часть регистра, потом старшее полуслово в старшую. Пишется макрос
macro mov32 reg, val {
    movw reg, val and 0xffff
    movt reg, (val shr 16) and 0xffff
}
и жизнь сразу становится легче :)
farwayer, понятно. Просто в наше время речь о макроассеблере как бы не шла. )
Aivar
farwayer, понятно. Просто в наше время речь о макроассеблере как бы не шла. )
Э... это когда ж такое время было? Где-то 1954? Или имеется в виду, что речь не шла, поскольку макровозможности - это само собой разумеется?
Aivar
Я, конечно, отстал от жизни, но поясните мне смысл макрухи. Не проще ли сделать подпрограмму и вызывать ее? Или компактный машинный код уже не в моде?
Подпрограмма - это многократно выполняемый участок машинного кода, оформленный особым образом.
А макроопределение - средство формирования исходного текста по определенным правилам, что несколько отличается от подпрограммы. Как-то так
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
akorop
Где-то 1954?
Нет, конечно. 80-90-е. Наиболее вменяемый под Speccy ALASM хоть и именовался макроассемблером, но в документации ничего не говорилось об использовании макросов и, если верить SpeccyWiki их поддержка была добавлена в 1999 году, когда я уже "завязывал".
 
Зарегистрироваться или войдите чтобы оставить сообщение.