LINUX.ORG.RU

>Посоветуйте ассемблер под линукс

Эм..

Zhbert ★★★★★
()

>Собсно сабж. С чего начать?

С си?

Dimanc ★★
()

Ну вот выбирай: as (GNU Assembler), nasm (самый такой обычный вариант), yasm (круче предыдущего), fasm (на их сайте лежит бинарь для линуксов). Может быть, ещё что-то забыл. Встаёт только вопрос: зачем?

DJAnto
()

Это не принятно, понимаешь. Асм уместен в малой части кода ядра. В userspace не принято. Вообще nasm/gas, но не ожидай от них синтаксиса на уровне MASM. Он у них намного проще, примитивнее и да, очевиднее

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Да я понимаю, не маленький. Это just for fun так сказать. Просто столкнулся, что есть всякие fasm, nasm. А вот чем отличается не знаю. Мне нужно чтоб с самым низким порогом вхождения, но не экзотика какя-нить.

dizza ★★★★★
() автор топика

тру фичёвые это nasm и yasm.

mikki
()

Я в свое время использовал nasm - по мне он удобнее в плане синтаксиса.

MuZHiK-2 ★★★★
()

учи любой, различия там не очень большие :)

Boy_from_Jungle ★★★★
()

as86/ld86 - как самый простой

nasm - как, имхо, самый удобный

ну и gas как самый сложный.

Это just for fun так сказать.

Вам нужно получать массивы (unsigned-byte 8) из текстовых представлений мнемоник и их групп, да? Напишите свой ассемблер который rule zem all :)

Что-то вроде унификации синтаксиса такого вида (так как семантика везде одна и та же):

  [reg] -> [reg] // или [reg] <- [reg]
  [reg] <-> [reg]

  [reg] -> stack // т.е. push, stack <- [reg]
  [reg] <- stack // т.е. pop, stack -> [reg]

  [reg] -> [addres] // [reg] <- [addres]

  [addres] <- [addres] // [addres] -> [addres]
  [addres] <-> [addres]

  [atom] -> [reg]
  
  [atom] -> stack

ну и так далее - набор общего вида объектов распределённых по группам и три стрелки (трансфер данных). Множество различных вариантов на которые наложено множество ограничений (например стрелка <-> для двух объектов «стек» работать никак не будет) различаемых на этапе компиляции.

quasimoto ★★★★
()

Когда-то писал на tasm под досом.

Основная проблема - изучать системные вызовы: как файл открыть, как символ в консоль выдать, как графику рисовать и т.д. Плюс в Linux'е свои особенности: семафоры, трубы и т.п.

Имхо нужно уделить внимание системному API.

robux
()

Чую в месте принудительного полученя знаний начался курс по асм-у. Там как, все еще Великое Двадцать Первое Прерывание?

Асм на x86-х умер с тех самых пор, когда в очень короткий промежуток времени появился зоопарк несовместимых процессоров.

Если тебе по каким-то причинам нужен асм, то посмотри на какой-нибудь микроконтроллер. Профита с этого намного больше.

Или посмотри на LLVM.

Macil ★★★★★
()

>С чего начать?

asm { ... } вставки в Си или CODE ... END-CODE в SP-Forth :)

KRoN73 ★★★★★
()
Ответ на: комментарий от mikki

Да. В те времена была убойнейшая книга: «Самоучитель по системным функциям MS-DOS» Финогенова. Библия вирусописателей. Еще была книжка Журдейна, где материал излагался в 3-х плоскостях: высокий уровень (BASIC), средний уровень (на ассемблере просим у DOS), и низкий уровень (на ассемблере просим у BIOS или оборудования).

Macil ★★★★★
()
Ответ на: комментарий от Macil

Да-да, был у меня российский самоучитель по асму.
А еще была книга (раритет!) от самого Питера Нортона (!!!), которая представляла из себя справочник по системным вызовам DOS!

В ти года я делал летающие круги по экрану (типа шары в вязкой жидкости с вибрирующим дном), математика которых считалась на специально докупленном со-процессоре 386! Я переключал проц из реального в защищенный режим и мечтал написать многозадачную операционку на асме!.. Молодой был.. и не знал тогда ничего о Linux.. жаль...

robux
()
Ответ на: комментарий от PolarFox

>C не подходит, когда необходимо попадание в некоторое определённое число тактов.

Для выравнивания тактов в любых языках используют ассемблерные вставки с NOP.

quickquest ★★★★★
()
Ответ на: комментарий от Macil

В месте принудительного получения знания ассемблер был года 4 назад. Тогда как-то не проперло. Мне Си больше нравился. Потом как-то пытался драйвера писать на Си. Ну там FIFO как-то сделал))) На большее мотивации не хватило. Но низкоуровневое программирование чем-то зацепило (наверное наелся я уже ооп и хаскелей, ведь абстракции как известно протекают).

dizza ★★★★★
() автор топика
Ответ на: комментарий от quickquest

Для выравнивания тактов в любых языках используют ассемблерные вставки с NOP.

Это как же? Выравнивания тактов не бывает, бывает выравнивание данных, если мне нужно обменять две переменные в одну инструкцию - чем мне поможет NOP? Тем что позволит добавить ещё 15 инструкций для «выравнивания»? :)

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

>Это как же? Выравнивания тактов не бывает, ...

Дык, энто я по-простонародному ляпнул :) А имел ввиду выравнивание времени выполнения разных ветвей программы на микроконтроллерах (МК). Там можно, написав программу на С/Pascal-ях, добавить в нужные ветви ассемблерные вставки NOP.

чем мне поможет NOP?

NOP обеспечивает синхронизацию МК-программ жёсткого реального времени с точностью то 1 такта.

quickquest ★★★★★
()
Ответ на: комментарий от robux

> На аве такой веселый, а шуток не понимаешь ;-)

У Шелдона Купера нет чувства юмора :)

ovk48 ★★★
()
Ответ на: комментарий от DJAnto

>nasm (самый такой обычный вариант)
Наиболее популярный, кстати.

yasm (круче предыдущего)

Точно круче? А то вот мне тоже нужен ASM под линукс, и я все выбираю между yasm и nasm. Чем он круче?

fasm (на их сайте лежит бинарь для линуксов)

Я на нем писал под винды. ТС, не бери FASM, козленочком станешь. ИМХО, конечно.

proud_anon ★★★★★
()
Ответ на: комментарий от PolarFox

>C не подходит, когда необходимо попадание в некоторое определённое число тактов.

)) фантазии ...
на IAR C писал код для AVR CPU почти 1:1 к ассемблерной реализации.
Надо «чувствовать» компилятор ))

elipse ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.