Ассемблер

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
beria
постоялец
Сообщения: 130
Зарегистрирован: 29.09.2016 07:57:13

Ассемблер

Сообщение beria »

Если не сложно подскажите как в лазарусе можно подсмотреть ассемлерный код для выбранных программных строк. Помню по времена Борланд и турбо паскалей, начиная с 5.0, можно было получить листинг типа
;Номер строки программы: строка программы
mov ax,cx ; комментарий
и так далее

и в дальнейшем этот листинг был вполне собираем тасмом....

зы: мануалы читал и не нашел....
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Компилируем с -al,
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

Брейкпоинт + Ctrl-Alt-D, ещё можно какой-то там опцией компилятора включить генерацию ассемблерных листингов.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Или ещё, вот так, "другой" ассемблер: -Amasm -al,
Аватара пользователя
beria
постоялец
Сообщения: 130
Зарегистрирован: 29.09.2016 07:57:13

Сообщение beria »

Всем спасибо.. заработало... Встроенный листинг вообще не информативен, но внешнего листинга добился, правда не понятно почему в файле c расширение *.s и в каталоге с библиотеками....
Куча негатива. С умиление вспоминаю времена тасма.
Может я идиот, но
movl $0,-16(%ebp)
вместо явного и прозрачного
movl $0,i
как было ранее. Я не обязан помнить что десятком экранов выше все было объявлено как # Var i located at ebp-16, size=OS_S32

С директивой asm все хуже.
Элементарный вариант

Код: Выделить всё

    procedure qqq;
    var
      I: integer;
    begin
      I := 0;
      asm
               MOVL    I, %EAX
      end;
    end;}   


Ругается на Fatal: Выбpанный тип ассемблеpа не поддеpживается. И никакие настройки лазазуса и явное указание типа синтаксиса не помогают... :twisted:

ps: кстати, кому интересно, как я и думал, в фрипасе человеческое Inc(Counter, Len) и извращенническое Counter += Len генерируют одинаковый код.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

beria писал(а):зы: мануалы читал и не нашел....

Если не секрет, то какие мануалы ты читал?
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

>Куча негатива.
Тебя мягко подводят к мысли не использовать ассемблер...
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

beria писал(а):Inc(Counter, Len) и извращенническое Counter += Len генерируют одинаковый код.

Одинаково хороший или одинаково плохой, код генерирует?

.
Аватара пользователя
beria
постоялец
Сообщения: 130
Зарегистрирован: 29.09.2016 07:57:13

Сообщение beria »

скалогрыз писал(а):Если не секрет, то какие мануалы ты читал?

F1 называется Там про командную строку

runewalsh писал(а):Тебя мягко подводят к мысли не использовать ассемблер...


А придется. Из-за не очень прямой и крайне ресурсоемкой реализации перекодировок в LConvEncoding. Если бы напрямую функции работали со строками типа PChar, кои для потока удобнее и быстрее всего - то проблем бы не было..

vitaly_l писал(а):Одинаково хороший или одинаково плохой, код генерирует?

Хороший. Без всяких лишних джампов. Тут упрекнуть компилятор не могу...
Последний раз редактировалось beria 11.01.2017 22:07:49, всего редактировалось 1 раз.
Azazaz
новенький
Сообщения: 41
Зарегистрирован: 21.04.2015 19:00:03

Сообщение Azazaz »

Генерируется через add инструкцию, что как бэ не очень. Хотя в Intel мануалах по оптимизации указывают использовать именно такой подход ибо различные процессоры после выполнения inc инструкции могут разнообразным образом устанавливать флаги состояний (или даже не устанавливать что сильно чревато). Обе инструкции имеют одинаковую скорость исполнения, но inc позволяет сэкономить на размере бинарника.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Azazaz писал(а):Обе инструкции имеют одинаковую скорость исполнения, но inc позволяет сэкономить на размере бинарника.


И сильно позволяет? А то может там разница съедается при преобразовании в экзешник.
Ответить