посмотреть генерируемый асм-код ?

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

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

Ответить
Devil
новенький
Сообщения: 40
Зарегистрирован: 10.12.2008 08:56:33

посмотреть генерируемый асм-код ?

Сообщение Devil »

Каким удобным образом посмотреть генерируемый асм-код ? Желательно из IDE Lazarus.
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

добавить в fpc.cfg опцию -al
и дополнительно можеж указать -Anasmelf (Nasm-синтаксис, Linux) или -Anasmwin32 (Nasm-синтаксис, Windows) или другой систаксис:

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

alex@desktop:~> fpc -h
Free Pascal Compiler version 2.2.2 [2008/10/27] for i386
Copyright (c) 1993-2008 by Florian Klaempfl
/usr/local/bin/ppc386 [options] <inputfile> [options]
Put + after a boolean switch option to enable it, - to disable it
  -a     The compiler doesn't delete the generated assembler file
      -al        List sourcecode lines in assembler file
      -an        List node info in assembler file
      -ap        Use pipes instead of creating temporary assembler files
      -ar        List register allocation/release info in assembler file
      -at        List temp allocation/release info in assembler file
  -A<x>  Output format:
      -Adefault  Use default assembler
      -Aas       Assemble using GNU AS
      -Anasmcoff COFF (Go32v2) file using Nasm
      -Anasmelf  ELF32 (Linux) file using Nasm
      -Anasmwin32 Win32 object file using Nasm
      -Anasmwdosx Win32/WDOSX object file using Nasm
      -Awasm     Obj file using Wasm (Watcom)
      -Anasmobj  Obj file using Nasm
      -Amasm     Obj file using Masm (Microsoft)
      -Atasm     Obj file using Tasm (Borland)
      -Aelf      ELF (Linux) using internal writer
      -Acoff     COFF (Go32v2) using internal writer
      -Apecoff   PE-COFF (Win32) using internal writer
.....


И будут генерироваться асемблерные листинги
Devil
новенький
Сообщения: 40
Зарегистрирован: 10.12.2008 08:56:33

Сообщение Devil »

О, спасибо!

Только синтаксис не понятен. Пробовал сменить синтаксис на NASM или TASM, но компилятор зачем-то требует nasm.exe/tasm.exe. Nasm скачал...
Вопрос. как заставить генерировать листинги в другом синтаксисе ?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Devil
fpc знает только свой собственный формат асм'а. Все остальные для него - тёмный лес.
Devil
новенький
Сообщения: 40
Зарегистрирован: 10.12.2008 08:56:33

Сообщение Devil »

ну тогда может конвертер какой существует...
потомучто, извините, это не асм, "это дрянь какая-то"(с).

Добавлено спустя 10 минут:
ещё вопрос. Может, сталкивался кто.

написал ассемблерную функцию и стал расстраиваться. Выставлял и Mode Delphi и assembler и register... и везде появляются ассемблерные команды LEAVE и RET 4, например. Кто-нибудь объяснит, что за фигня и почему в Delphi этого нет ?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Если добавить ключ -s, то FPC остановится после генерации ассемблера и не будет требовать masm/nasm. Чтобы прочитать, этого в общем-то достаточно.
Насчет LEAVE/RET 4 - возможно они обусловлены отключенной оптимизацией. Если ключ -О2 или -O3 их не убирает - то нужно смотреть на исходник.
Devil
новенький
Сообщения: 40
Зарегистрирован: 10.12.2008 08:56:33

Сообщение Devil »

Большое спасибо, так намного лучше!
Хотя, синтаксис TASM привычнее. Но NASM аккуратнее.

А по поводу Leave/Ret надо почитать.
psyhitus
незнакомец
Сообщения: 2
Зарегистрирован: 07.11.2010 23:24:26

Сообщение psyhitus »

Доброго всем времени суток, потребовалось в своей работе использовать транслятор с Pascal на Tasm.
Разобрался как генерировать TASM код, но не нашел возможна трансляция без проверки подключенных модулей и вызываемых функций/процедур.
Поясню на примере:

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

program test1;
uses adba;
var
        i:integer;
        b:real;
        d:double;
begin
        i := 1;
        b := 3.3e-10;
        d := i / b;
                        hello_kitty();
        writeln(d);
        readln;
end.

т.е. при компиляции fpc выдает ошибки:

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

C:\FPC\2.4.0\bin\i386-win32>fpc.exe -Atasm -s -o3 test1.pas
Free Pascal Compiler version 2.4.0 [2009/12/18] for i386
Copyright (c) 1993-2009 by Florian Klaempfl
Target OS: Win32 for i386
Compiling test1.pas
test1.pas(14,14) Error: Identifier not found "hello_kitty"
test1.pas(22) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: ppc386.exe returned an error exitcode (normal if you did not specify a so
urce file to be compiled)

как-нибудь можно заставить fpc не проверять это?
psyhitus
незнакомец
Сообщения: 2
Зарегистрирован: 07.11.2010 23:24:26

Сообщение psyhitus »

проблему решил с использованием модификатора external; но
появилась другая. кто-нибудь писал компоновщик (*.s) файлов?)
Ответить