Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Синтаксис какого ассемблера лучше?

30K
28 октября 2007 года
alcher
15 / / 25.10.2007
Как высчитаете, у какого компилятора более простой и удобный синтаксис? Хотелось бы узнать мнения людей, которые пользовались несколькими и могут сравнивать.
602
28 октября 2007 года
KPI Student
265 / / 16.12.2006
AT&T ассемблер под Linux... =)
AT&T синтаксис
30K
28 октября 2007 года
alcher
15 / / 25.10.2007
Цитата: KPI Student
AT&T ассемблер под Linux... =)
AT&T синтаксис


Извиняюсь, что не сделал AT&T одним из вариантов, но это от моей безграмотности. Если у кого есть еще какие-то варианты, тоже пишите.

Жаль что нельзя добавить новые варианты ответов :(

334
28 октября 2007 года
HexEdit
809 / / 27.07.2006
FASM полюбому.
С самого первого раза, как увидел фасм (все характеристики, не только синтаксис), другие ассемблеры теперь вообще не признаю ))
245
28 октября 2007 года
~ArchimeD~
1.4K / / 24.07.2006
FASMа к сожалению не знаю, но из AT&T и nasm в плане читабельности, считаю удобнее nasm, в плане удобства реализации функциональности - AT&T.
349
29 октября 2007 года
Phantom-84
656 / / 27.10.2005
Синтаксис AT&T перегружен. Такое ощущение, что его создавали для облегчения работы компиляторов, а не программистов. Кроме того для большинства программистов более привычным является прямой порядок следования операндов, как в синтаксисе Intel.
260
29 октября 2007 года
Ramon
1.1K / / 16.08.2003
Цитата: Phantom-84
Синтаксис AT&T перегружен. Такое ощущение, что его создавали для облегчения работы компиляторов, а не программистов.



А так и есть:D

245
29 октября 2007 года
~ArchimeD~
1.4K / / 24.07.2006
Цитата: Phantom-84
Синтаксис AT&T перегружен. Такое ощущение, что его создавали для облегчения работы компиляторов, а не программистов.


угу, так и есть, и именно это я имел ввиду под

Цитата:
в плане удобства реализации функциональности

33K
29 октября 2007 года
5C0A0
4 / / 26.10.2007
Очень субъективно всё это. Как сказал Крис Касперски "Кто к чему привык то и удобно!". Я с ним согласен .Даже уродский синтаксис АТ& становится привычным после практики....
6.0K
29 октября 2007 года
artyom-tyanutov
107 / / 10.07.2006
Однозначно фасм!
Но АТ&Т тоже ничего в плане удобства вставок!
261
01 ноября 2007 года
ahilles
1.5K / / 03.11.2005
почему я выбрал FASM?
потому что в TASM и MASM
 
Код:
value dd 12345678h
mov eax, value
mov eax, [value] ;

в обоих случаях eax будет значение 12345678h
а в FASM
mov eax, value ; в eax будет адрес value
mov eax, [value] ; в eax будет 12345678h
6.0K
01 ноября 2007 года
artyom-tyanutov
107 / / 10.07.2006
Иными словами в фасм все расставлено по полочкам, он более строг!
Еще меня добивают ТАСМ'овские CODESEG и др. и МАСМ'овский ASSUME - ужас просто!
28K
01 ноября 2007 года
LogoROS
9 / / 12.05.2007
По-моему, nasm лучший, но fasm и at&t также хорши. А masm и tasm -- самые тупые асмы.
349
01 ноября 2007 года
Phantom-84
656 / / 27.10.2005
Насчет ASSUME это точно. Если уж люди взялись писать на ассемблере, то они сами разберутся, как использовать сегментные регистры для доступа к данным. Лично меня эти "ассоциации" всегда только запутывали!

Если бы в fasm'е можно было собирать большие проекты не только из исходников, а еще из объектников, пусть даже и своего собственного оригинального формата, ему бы вообще не было равных.
6.0K
01 ноября 2007 года
artyom-tyanutov
107 / / 10.07.2006
Ну а что мешает компилить фасмом в объектные файлы и затем уже линковать тем же ld?
1.8K
01 ноября 2007 года
k3Eahn
365 / / 19.12.2005
Phantom-84, artyom-tyanutov
А чем вам так assume не угодил?
1.6K
01 ноября 2007 года
Vov4ick
476 / / 01.02.2007
Цитата: ahilles
почему я выбрал FASM?
потому что в TASM и MASM
 
Код:
value dd 12345678h
mov eax, value
mov eax, [value] ;

в обоих случаях eax будет значение 12345678h
а в FASM
mov eax, value ; в eax будет адрес value
mov eax, [value] ; в eax будет 12345678h


А вот и неоднозначность. MASM (как и TASM по умолчанию) в этом случае пропустит оба варианта, а TASM в режиме IDEAL требует обязательного использования операторов OFFSET и [...]. Собственно в литературе неоднократно говорилось, что режим IDEAL повышает удобочитаемость и следовательно снижает количество ошибок, особенно в сложных выражениях.
ASSUME облегчает работу с проектами, отличными от hello, world - нет необходимости при работе с блоками данных везде писать переопределение сегментов и держать в памяти (своей) какие данные где лежат, один раз сказав assume. Плюс дополнительный контроль ошибок с ненастроенными сегментами.
CODESEG чем не угодил? Лично мне при согласовании с ЯВУ лениво вспоминать, как у него что называется, гораздо проще это автоматизировать.

30K
01 ноября 2007 года
alcher
15 / / 25.10.2007
[QUOTE=ahilles;217918]почему я выбрал FASM?
потому что в TASM и MASM
 
Код:
value dd 12345678h
mov eax, value
mov eax, [value] ;


В насме будет также как и в фасме, а как в фасме поместить в регистр не адрес переменной, а адрес метки?
6.0K
02 ноября 2007 года
artyom-tyanutov
107 / / 10.07.2006
label:
mov eax,label
349
02 ноября 2007 года
Phantom-84
656 / / 27.10.2005
Про ASSUME объясню. Какой бы сложности не был проект, хранить переменные в разных сегментах неэффективно, т.к. к части из них придется обращаться, используя префикс переопределения сегмента. Большие буферы можно хранить в отдельных сегментах, если в основном для них не хватает места, но при работе с такими буферами я всегда использую строковые инструкции, для которых предпочитаю явно загружать дефолтные сегментные регистры. Т.е. здесь мне ASSUME не поможет.

alcher, в fasm'е адрес метки отличается от адреса переменной только неопределенностью размера элемента, на который этот адрес указывает. В остальном работа с обоими видами адресов происходит одинаково.

Кстати с помощью директивы label можно явно задать размер элемента, на который будет ссылаться определяемая метка.
6.0K
02 ноября 2007 года
artyom-tyanutov
107 / / 10.07.2006
А вот от сюда поподробнее, пожалуйста!
349
02 ноября 2007 года
Phantom-84
656 / / 27.10.2005
Manual по fasm'у тебе в помощь. Например, если хочешь, чтобы к двойному слову по текущему адресу можно было обращаться без уточнения размера операнда, нужно написать:

label metka dword

Если хочешь определить метку не в текущей позиции, а по адресу address, нужно написать:

label metka dword at address

Причем address'ом может быть любое выражение, в том числе и содержащее другие метки.
261
02 ноября 2007 года
ahilles
1.5K / / 03.11.2005
Цитата: Vov4ick
А вот и неоднозначность. MASM (как и TASM по умолчанию) в этом случае пропустит оба варианта, а TASM в режиме IDEAL требует обязательного использования операторов OFFSET и [...].


ладно.
Ещё одна причина того что я выбрал FASM
потому что в TASM и MASM замучаешься компилировать, параметров куча! А в FASM все параметры компиляции надо указать в самом исходнике.
И в догонку: допустим ты возьмёшь исходник проги на MASM и с первого взгляда ты не узнаешь какая прога получится (GUI, консоль или драйвер), надо смотреть код. а в FASM по первой строчке можно узнать какая прога получится.

Цитата: artyom-tyanutov
А вот от сюда поподробнее, пожалуйста!


русский мануал по FASM'у РУЛИТ!!!

6.0K
02 ноября 2007 года
artyom-tyanutov
107 / / 10.07.2006
Цитата: ahilles

русский мануал по FASM'у РУЛИТ!!!



Есть он у меня, просто после английского я его просто просмотрел...

30K
04 ноября 2007 года
alcher
15 / / 25.10.2007
Почему в фасме, если написать
 
Код:
times 100h db 0
org 0
start:
        mov ax, start
        jmp start

в ах будет помещен 0, а переход будет на 256? Как сделать, чтобы после jmp выполнялась команда по адресу 0?
Если можно, напишите пример, я так лучше понимаю :)
6.0K
04 ноября 2007 года
artyom-tyanutov
107 / / 10.07.2006
Потому что jmp short использует относительное смещение, а не абсолютное!
Если надо прыгнуть "на ноль" укажи насильно ему jmp far start
Только не понимаю зачем извращаться так?
org 0 да еще и не в начале кода!?
334
04 ноября 2007 года
HexEdit
809 / / 27.07.2006
Цитата: alcher
Почему в фасме, если написать
 
Код:
times 100h db 0
org 0
start:
        mov ax, start
        jmp start

в ах будет помещен 0, а переход будет на 256? Как сделать, чтобы после jmp выполнялась команда по адресу 0?
Если можно, напишите пример, я так лучше понимаю :)


адреса в ассемблере считаются относительно org
в ax будет 0
и jmp start перебросит именно НА start

зы. что ты хотел сделать этим 100h, не понимаю

30K
04 ноября 2007 года
alcher
15 / / 25.10.2007
Цитата: HexEdit
зы. что ты хотел сделать этим 100h, не понимаю



Я хотел разобраться как это работает, а код такой придумал для примера. Он не выполняет ни каких полезных действий.

261
05 ноября 2007 года
ahilles
1.5K / / 03.11.2005
парни, вы вообще в ОФФТОП ушли!
334
05 ноября 2007 года
HexEdit
809 / / 27.07.2006
Цитата: ahilles
парни, вы вообще в ОФФТОП ушли!


Да уж....
Хотя и сама тема больше к гостевухе тянет )

7.8K
10 ноября 2007 года
Monarhia
105 / / 26.06.2006
Однозначно за fasm =) насчёт насма и AT&T много не могу сказать, но masm и tasm мне совсем не нравитса =\
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог