Синтаксис какого ассемблера лучше?
AT&T синтаксис
Извиняюсь, что не сделал AT&T одним из вариантов, но это от моей безграмотности. Если у кого есть еще какие-то варианты, тоже пишите.
Жаль что нельзя добавить новые варианты ответов :(
С самого первого раза, как увидел фасм (все характеристики, не только синтаксис), другие ассемблеры теперь вообще не признаю ))
А так и есть:D
угу, так и есть, и именно это я имел ввиду под
Но АТ&Т тоже ничего в плане удобства вставок!
потому что в TASM и MASM
mov eax, value
mov eax, [value] ;
в обоих случаях eax будет значение 12345678h
а в FASM
mov eax, value ; в eax будет адрес value
mov eax, [value] ; в eax будет 12345678h
Еще меня добивают ТАСМ'овские CODESEG и др. и МАСМ'овский ASSUME - ужас просто!
Если бы в fasm'е можно было собирать большие проекты не только из исходников, а еще из объектников, пусть даже и своего собственного оригинального формата, ему бы вообще не было равных.
А чем вам так assume не угодил?
потому что в TASM и MASM
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 чем не угодил? Лично мне при согласовании с ЯВУ лениво вспоминать, как у него что называется, гораздо проще это автоматизировать.
потому что в TASM и MASM
mov eax, value
mov eax, [value] ;
В насме будет также как и в фасме, а как в фасме поместить в регистр не адрес переменной, а адрес метки?
mov eax,label
alcher, в fasm'е адрес метки отличается от адреса переменной только неопределенностью размера элемента, на который этот адрес указывает. В остальном работа с обоими видами адресов происходит одинаково.
Кстати с помощью директивы label можно явно задать размер элемента, на который будет ссылаться определяемая метка.
label metka dword
Если хочешь определить метку не в текущей позиции, а по адресу address, нужно написать:
label metka dword at address
Причем address'ом может быть любое выражение, в том числе и содержащее другие метки.
ладно.
Ещё одна причина того что я выбрал FASM
потому что в TASM и MASM замучаешься компилировать, параметров куча! А в FASM все параметры компиляции надо указать в самом исходнике.
И в догонку: допустим ты возьмёшь исходник проги на MASM и с первого взгляда ты не узнаешь какая прога получится (GUI, консоль или драйвер), надо смотреть код. а в FASM по первой строчке можно узнать какая прога получится.
русский мануал по FASM'у РУЛИТ!!!
Есть он у меня, просто после английского я его просто просмотрел...
org 0
start:
mov ax, start
jmp start
в ах будет помещен 0, а переход будет на 256? Как сделать, чтобы после jmp выполнялась команда по адресу 0?
Если можно, напишите пример, я так лучше понимаю :)
Если надо прыгнуть "на ноль" укажи насильно ему jmp far start
Только не понимаю зачем извращаться так?
org 0 да еще и не в начале кода!?
org 0
start:
mov ax, start
jmp start
в ах будет помещен 0, а переход будет на 256? Как сделать, чтобы после jmp выполнялась команда по адресу 0?
Если можно, напишите пример, я так лучше понимаю :)
адреса в ассемблере считаются относительно org
в ax будет 0
и jmp start перебросит именно НА start
зы. что ты хотел сделать этим 100h, не понимаю
Я хотел разобраться как это работает, а код такой придумал для примера. Он не выполняет ни каких полезных действий.
Да уж....
Хотя и сама тема больше к гостевухе тянет )