Ассемблер
Модератор: Модераторы
Ассемблер
Если не сложно подскажите как в лазарусе можно подсмотреть ассемлерный код для выбранных программных строк. Помню по времена Борланд и турбо паскалей, начиная с 5.0, можно было получить листинг типа
;Номер строки программы: строка программы
mov ax,cx ; комментарий
и так далее
и в дальнейшем этот листинг был вполне собираем тасмом....
зы: мануалы читал и не нашел....
;Номер строки программы: строка программы
mov ax,cx ; комментарий
и так далее
и в дальнейшем этот листинг был вполне собираем тасмом....
зы: мануалы читал и не нашел....
Компилируем с -al,
Брейкпоинт + Ctrl-Alt-D, ещё можно какой-то там опцией компилятора включить генерацию ассемблерных листингов.
Или ещё, вот так, "другой" ассемблер: -Amasm -al,
Всем спасибо.. заработало... Встроенный листинг вообще не информативен, но внешнего листинга добился, правда не понятно почему в файле c расширение *.s и в каталоге с библиотеками....
Куча негатива. С умиление вспоминаю времена тасма.
Может я идиот, но
movl $0,-16(%ebp)
вместо явного и прозрачного
movl $0,i
как было ранее. Я не обязан помнить что десятком экранов выше все было объявлено как # Var i located at ebp-16, size=OS_S32
С директивой asm все хуже.
Элементарный вариант
Ругается на Fatal: Выбpанный тип ассемблеpа не поддеpживается. И никакие настройки лазазуса и явное указание типа синтаксиса не помогают...
ps: кстати, кому интересно, как я и думал, в фрипасе человеческое Inc(Counter, Len) и извращенническое Counter += Len генерируют одинаковый код.
Куча негатива. С умиление вспоминаю времена тасма.
Может я идиот, но
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живается. И никакие настройки лазазуса и явное указание типа синтаксиса не помогают...
ps: кстати, кому интересно, как я и думал, в фрипасе человеческое Inc(Counter, Len) и извращенническое Counter += Len генерируют одинаковый код.
>Куча негатива.
Тебя мягко подводят к мысли не использовать ассемблер...
Тебя мягко подводят к мысли не использовать ассемблер...
beria писал(а):Inc(Counter, Len) и извращенническое Counter += Len генерируют одинаковый код.
Одинаково хороший или одинаково плохой, код генерирует?
.
скалогрыз писал(а):Если не секрет, то какие мануалы ты читал?
F1 называется Там про командную строку
runewalsh писал(а):Тебя мягко подводят к мысли не использовать ассемблер...
А придется. Из-за не очень прямой и крайне ресурсоемкой реализации перекодировок в LConvEncoding. Если бы напрямую функции работали со строками типа PChar, кои для потока удобнее и быстрее всего - то проблем бы не было..
vitaly_l писал(а):Одинаково хороший или одинаково плохой, код генерирует?
Хороший. Без всяких лишних джампов. Тут упрекнуть компилятор не могу...
Последний раз редактировалось beria 11.01.2017 22:07:49, всего редактировалось 1 раз.
Генерируется через add инструкцию, что как бэ не очень. Хотя в Intel мануалах по оптимизации указывают использовать именно такой подход ибо различные процессоры после выполнения inc инструкции могут разнообразным образом устанавливать флаги состояний (или даже не устанавливать что сильно чревато). Обе инструкции имеют одинаковую скорость исполнения, но inc позволяет сэкономить на размере бинарника.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Azazaz писал(а):Обе инструкции имеют одинаковую скорость исполнения, но inc позволяет сэкономить на размере бинарника.
И сильно позволяет? А то может там разница съедается при преобразовании в экзешник.
