Как посмотереть асм листинг функции?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Сообщение Sniper » 22.06.2005 16:08:53

В Delphi это
1. точка останова
2. F8
3. Ctrl + Alt + C

А в FPC как?

Я так понимаю что
1. fpc -g filename.pp
2. gdb filename.exe
3. gdb break MYFUNC
а как дальше?
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Иван Шихалев » 22.06.2005 17:34:33

Если нужен именно листинг — лучше скомпилировать с опцией -a (или -al) (см. <a href='http://freepascal.ru/wiki/index.php/%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D0%B0#.D0.9E.D0.BF.D1.86.D0.B8.D0.B8_.D0.BA.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D1.8F_.D0.B2.D1.8B.D1.85.D0.BE.D0.B4.D0.BD.D1.8B.D1.85_.D1.84.D0.B0.D0.B9.D0.BB.D0.BE.D0.B2' target='_blank'>«Опции»</a>). Как в GDB — не знаю.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение Sniper » 22.06.2005 17:51:43

На выходе получаются файлы *.s где содержится ассемблерный код в синтаксисе AT&T несмотря даже на то что я указываю -Rintel

А так как я не сильно разбираюсь в АСМ'е то не умею определять где заканчивается одна функция и начинается другая... =)

Delphi даже показывает строчки на Pascal между асмовыми в CPU окне... а во FPC этого похоже нет? =(
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение Disabled » 23.06.2005 14:41:21

Ты в опциях выбери генерировать код под МАСМ\ТАСМ\НАСМ--будет тебе интеловский, с указанием строчек кода исходной программы. Это в идешке на аутпуте выбирается
Disabled
новенький
 
Сообщения: 13
Зарегистрирован: 14.06.2005 13:27:18

Сообщение Disabled » 23.06.2005 14:54:04

Вот к стати, с успешно скомпиленного примера по ммх--единственное, какой-то урод там всесто d1 необявленную переменную d2 использовать пытался--достаточно было вернуть на d1 |D
Опции--Options-->Compiler-->Assembler Tab-->List Options [x], Assembler Output =Use Masm. Дальше выбираешь просто компилировать

.386p
DGROUP GROUP _BSS,_DATA
ASSUME CS:_CODE,ES:DGROUP,DS:DGROUP,SS:DGROUP

EXTRN MMX_EMMS: NEAR
EXTRN FPC_DO_EXIT: NEAR
EXTRN THREADVARLIST_CPU: NEAR
EXTRN FPC_INITIALIZEUNITS: NEAR
EXTRN INIT$_SYSTEM: NEAR
EXTRN FINALIZE$_SYSTEM: NEAR
EXTRN INIT$_OBJPAS: NEAR
EXTRN FINALIZE$_OBJPAS: NEAR
EXTRN INIT$_MMX: NEAR
EXTRN THREADVARLIST_OBJPAS: NEAR
EXTRN THREADVARLIST_MMX: NEAR
EXTRN THREADVARLIST_SYSTEM: NEAR

_CODE SEGMENT PARA PUBLIC USE32 'CODE'
_CODE ENDS

_CODE SEGMENT PARA PUBLIC USE32 'CODE'
ALIGN 4
ALIGN 4
; [testmmx.pas]
; [7] begin
PUBLIC PASCALMAIN
PASCALMAIN:
PUBLIC _main
_main:
; Temps allocated between ebp+0 and ebp+0
push ebp
mov ebp,esp
call FPC_INITIALIZEUNITS
; [8] d1:=1.0;
fld1
fstp qword ptr [U_P$TESTMMX_D1]
fwait
; [11] for i:=0 to 10000 do
mov dword ptr [U_P$TESTMMX_I],0
dec dword ptr [U_P$TESTMMX_I]
ALIGN 4
@@8:
inc dword ptr [U_P$TESTMMX_I]
; [12] a[i]:=d1; { this is done with 64 bit moves }
mov edx,dword ptr [U_P$TESTMMX_I]
mov eax,dword ptr [U_P$TESTMMX_D1]
mov dword ptr [U_P$TESTMMX_A+edx*8],eax
mov eax,dword ptr [U_P$TESTMMX_D1+4]
mov dword ptr [U_P$TESTMMX_A+edx*8+4],eax
cmp dword ptr [U_P$TESTMMX_I],10000
jl @@8
; [14] emms; { clear fpu }
call MMX_EMMS
; [16] end.
call FPC_DO_EXIT
leave
ret
ALIGN 4
_CODE ENDS

_DATA SEGMENT PARA PUBLIC USE32 'DATA'
DB "FPC 2.0.0 [2005/05/08] for i386 - Win32"
ALIGN 4
ALIGN 4
PUBLIC THREADVARLIST_P$TESTMMX
THREADVARLIST_P$TESTMMX:
DD 0
ALIGN 4
PUBLIC FPC_THREADVARTABLES
FPC_THREADVARTABLES DD 5
DD THREADVARLIST_SYSTEM,THREADVARLIST_OBJPAS,THREADVARLIST_CPU,THREADVARLIST_MMX,THREADVARLIST_P$TESTMMX
ALIGN 4
PUBLIC FPC_RESOURCESTRINGTABLES
FPC_RESOURCESTRINGTABLES DD 0
ALIGN 4
PUBLIC INITFINAL
INITFINAL DD 3,0
DD INIT$_SYSTEM,FINALIZE$_SYSTEM,INIT$_OBJPAS,FINALIZE$_OBJPAS,INIT$_MMX,0
ALIGN 4
PUBLIC __stklen
__stklen DD 131072
PUBLIC __heapsize
__heapsize DD 2097152
_DATA ENDS

_DATA SEGMENT PARA PUBLIC USE32 'DATA'
_DATA ENDS

_DATA SEGMENT PARA PUBLIC USE32 'DATA'
_DATA ENDS

_BSS SEGMENT PARA PUBLIC USE32 'BSS'
_BSS ENDS

_BSS SEGMENT PARA PUBLIC USE32 'BSS'
ALIGN 4
U_P$TESTMMX_D1 DB 8 DUP(?)
_BSS ENDS

_BSS SEGMENT PARA PUBLIC USE32 'BSS'
ALIGN 4
U_P$TESTMMX_A DB 80008 DUP(?)
_BSS ENDS

_BSS SEGMENT PARA PUBLIC USE32 'BSS'
ALIGN 4
U_P$TESTMMX_I DB 4 DUP(?)
END
:D
Disabled
новенький
 
Сообщения: 13
Зарегистрирован: 14.06.2005 13:27:18


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru