The Bird of Hermes
Да и пофиг, всё равно на этом GAS писать никто не будет, это ж чисто для компилятора синтаксис.
Кста, у них же переход в интел-синтаксис есть. Или он такие вещи не фиксит?
КТ315
Кста, у них же переход в интел-синтаксис есть. Или он такие вещи не фиксит?
Он только AT&T синтаксис чинит, а директивы всё равно такие же будут. .dbl.l .ascii .byte .value .long .quad ... Шизофреники какие-то.
КТ315
Он только AT&T синтаксис чинит, а директивы всё равно такие же будут. .dbl.l .ascii .byte .value .long .quad ... Шизофреники какие-то.
Компиляция так будет быстрее на пару тактиков происходить, потому что сходу проверка code[0] == '.' => директива, и не приходится по ключевым словам циклы делать. Но для ручного написания это увеличивает скорость в миллион раз! Быстрее написать "db", чем ".byte" (проверьте прям сейчас на клавиатуре на всех этих вариантах, и аналогах в FASM). Поэтому самый логичный вывод можно сделать - это сделано чисто для GCC. На людей они харкали с высокой колокольни, главное чтоб компилятор быстро этот текст обрабатывал\генерировал. Так что не думаю, что стоит писать на... этом...
КТ315
Он только AT&T синтаксис чинит, а директивы всё равно такие же будут. .dbl.l .ascii .byte .value .long .quad ... Шизофреники какие-то.
Вот этот .globl в GAS ещё заслуживает отдельного котла. Есть extern, public. Почему globl? Снова предполагаю, что размер "global" не был бы кратен 2, из-за чего проверки были бы неоптимизированными. А всё из-за чего? Из-за дурацкой точки во всех директивах! И они просто взяли, и убрали букву, отлично. Хорошо хоть не "glbal".
The Bird of Hermes
Интересно было бы сравнить время компиляции FASM, и GAS.
Хз, какая разница, по мне так время компиляции куда менее важно чем удобство, тем более когда счёт времени на наносекунды
КТ315
Хз, какая разница, по мне так время компиляции куда менее важно чем удобство, тем более когда счёт времени на наносекунды
Я тоже так думаю. И не уверен, что GNU вообще рассчитывали на то, что на GAS кто-то будет писать. Это как писать на .NET IL - вырвали прослойку между .NET, и бинарником, и начали писать на этом ассемблере код. Так и тут - вырвали прослойку между GCC, и бинарником, и начали писать код зачем-то. Верно С-шники подмечают - есть интрисинки, есть вообще почти ВСЁ, что может заменить ассемблерную вставку. НЕ пишите на GAS!!
КТ315
.global поддерживается.
А в чём разница тогда между .globl и .global?
КТ315
Компилятор генерирует .globl, а человек может писать .global?))) Вот бы ещё точки убрали для человека, но тогда получился бы независимый ассемблер, а это просто ассемблер под С.
s54820
А в чём разница тогда между .globl и .global?
Не знаю, никогда не задумывался. Работает и ладно.
The Bird of Hermes
покажи по масм
https://metanit.com/assembler/tutorial/
Aiwan \ (•◡•) / _bot
https://metanit.com/assembler/tutorial/
вроде норм. всегда можно под фасм адаптировать.
Vladimir
Да и пофиг, всё равно на этом GAS писать никто не будет, это ж чисто для компилятора синтаксис.
Почему? На язык ассемблера стандартов нет, каждый по своему с ума сходит. Однако GAS удебен тем, что туда можно инклюдить C'шные хедеры
КТ315
Почему? На язык ассемблера стандартов нет, каждый по своему с ума сходит. Однако GAS удебен тем, что туда можно инклюдить C'шные хедеры
Ну и зачем это нужно ? 😁 На С хочешь писать - пиши на С, на ассемблере - пиши на ассемблере. Вот это смешивание кода бред какой-то.
вася
юзаю тасм, но почему то там комментарии на русском в вопросы превращаются. Как пофиксить?
strewg
Добрый верчер, а стоит ли использовать lea для вычислений произвольных значений, как замена add/imul?
strewg
Спасибо
strewg
Нужно.
а работает ли быстрее, и короче ли выходит по размерам?
strewg
Хорошо
КТ315
disba1ancer
Быстрее.
сложение не факт, а умножение только на ряд маленьких констант
disba1ancer
Хорошо
не используй везде про современные процессоры нельзя однозначно сказать, что одно быстрее другого
disba1ancer
Хорошо
вообще lea хороша как не деструктивная форма сложения
disba1ancer
Сложение тоже быстрее.
если бы это было так, то компиляторы бы совали её везде подряд, но увы это не так
КТ315
если бы это было так, то компиляторы бы совали её везде подряд, но увы это не так
Потому что они не умеют оптимизировать максимально. У них оптимальная оптимизация. Когда в коде AGU практически не занят - lea просто идеальный вариант для любых вычислений.
КТ315
disba1ancer
Потому что они не умеют оптимизировать максимально. У них оптимальная оптимизация. Когда в коде AGU практически не занят - lea просто идеальный вариант для любых вычислений.
возможно, но инструкция lea как раз загрузит этот блок и следующие несколько инструкций придётся использовать обычные, что компиляторы обычно и делают
КТ315
возможно, но инструкция lea как раз загрузит этот блок и следующие несколько инструкций придётся использовать обычные, что компиляторы обычно и делают
Ты забываешь, что на современных процессорах этих блоков не 1, и даже не 2. Конкретно ALU и AGU могут достигать даже 8. Так что параллельно 8 независимых LEA процессор за такт точно смогёт выполнить)
КТ315
ну 8 за такт это не совсем правда, но да, примерно так, в любом случае использовать только одно, не используя другое, глупо
Не, так я же не говорю, что только lea надо. Да и это невозможно, lea достаточно ограниченная инструкция. Но если возможно - надо использовать. А вот про умножение - его брезгуют использовать, зачастую могут использовать sal/sar.
disba1ancer
Не, так я же не говорю, что только lea надо. Да и это невозможно, lea достаточно ограниченная инструкция. Но если возможно - надо использовать. А вот про умножение - его брезгуют использовать, зачастую могут использовать sal/sar.
что касается умножения, то его надо использовать, тем более, что инструкции сдивига на некоторых процессорах исполняются столько же сколько умножение
КТ315
Если, конечно, lea невозможен.
КТ315
на какой код?
На любой.
disba1ancer
На любой.
приведи конкретный пример
disba1ancer
поставь 22
КТ315
поставь 22
Зачем? Он на каждом случае будет разные варианты использовать. Ты попросил пример с sal - я показал. На числа типа 12 он будет его постоянно тыкать. На меньше - будет lea. imul он брезгует использовать.
вася
Люди, нужна помощь. У меня задание. Редактировать .exe файл для dos. Нужно поменять фамилию создателя на свою. В ассемблере немного разбираюсь, но диззасемблирование/отладку плохо знаю. В идеале мне нужно сделать это с помощью turbo debugger. Но я вообще не могу понять, как сохранить изменения, которые я внес в программе в этом отладчике.
вася
да дружище
вася
денис попов
ksm
ну тогда для тебя хекс-редактор в помощь, других тулз не заслужил
ksm
если стринги не закодированы
strewg
Добрый вечер, посоветуйте материалы(книги, мб лекции/видео) о архитектуре x86 и её ассемблере?
Alexey
посмотри вот это
Alexey
https://metanit.com/assembler/tutorial/
strewg
да по нему и учил, только хочу глубже материал
Alexey
да по нему и учил, только хочу глубже материал
если прямо глубже то есть мануал от intel
strewg
как вариант, но может есть и книги о этой же теме
strewg
с таким же уровнем погруженяи +-
Alexey
с таким же уровнем погруженяи +-
Обычно архитектура описывается везде и понемного
strewg
нашёл "Современная архитектура и устройство компьютеров Ледин Джим" но пока нигде не могу найти пдфку на русском
notme
😳
Mikhail
notme
Ааа, сегодня ж 1-ое 😄👍👍👍👍
Conquistadors
­
Ааа, сегодня ж 1-ое 😄👍👍👍👍
Ага, тоже запямотовал xD