07
0707.pl
programy i aktualnosci
GNU DBG 5.2.1 port do mingw32
Srodowiska Programistyczne

GNU DBG 5.2.1 port do mingw32

MinGW Team

Dodane: 01.09.2010 · Aktualizacja pliku: 08.07.2026 · Autor wpisu: SYSTEM

1 wyswietlen
0 pobran

GNU debugger to potężne narzędzie pozwalające na debugowanie kodu różnych języków programowania m.in. C, C++, Pascal, Assemblera. Pozwala na podgląd rejestrów procesora, koprocesora, flag, stosu, załadowanych bibliotek dynamicznych, ramkach stosu i wiele innych. Poniżej przedstawiono przykł

GNU debugger to potężne narzędzie pozwalające na debugowanie kodu różnych języków programowania m.in. C, C++, Pascal, Assemblera. Pozwala na podgląd rejestrów procesora, koprocesora, flag, stosu, załadowanych bibliotek dynamicznych, ramkach stosu i wiele innych. Poniżej przedstawiono przykład pracy w GDB. Po instalacji należy dodać katalog w którym znajdują się kompilatory do zmiennych środowiska (katalog BIN). C:>path c:mingwbin Następnie za pomocą dowolnego edytora piszemy program. Poniżej program napisany w asemblerze obliczający wartość funkcji sin(60) z wykorzystaniem wzoru: sin(x*3^(k-1))=3sin(x*3^k)-4sin(x*3^-k)^3. Celem programu prócz uzyskania wyniku jest sprawdzenie ile cykli jest potrzebne na obliczenie wyniku. W rejestrze EAX znajdować się będzie liczba cykli a w rejestrze R7 jednostki FPU wynik obliczeń. SYSEXIT =1 EXIT_SUCCESS =0 .align 32 .data K:    .float    0f+729.00E-0 arg1:    .float    0f+1.0472E-0 arg3:    .float    0f+3.00E-0 arg4:    .float    0f-4.00E-0 mul1:    .float    0f+0.00E-0 Cykle_L:    .long    0 Cykle_H:    .long    0 .text .global _start _start: finit .byte 0xF, 0x31 movl %EDX,Cykle_H(,1) movl %EAX,Cykle_L(,1) movw    $6,%si movl    K(,1),%eax flds    arg1(,1) fdivs    K(,1) fstps    arg1(,1) loop1: flds    arg1(,1) flds    arg3(,1) fmulp flds    arg1(,1) fsts    mul1(,1) flds    mul1(,1) fmulp flds    mul1(,1) fmulp flds    arg4(,1) fmulp faddp    %st(1) fstps    arg1(,1) dec    %si cmp    $0,%si jne    loop1 flds    arg1(,1) .byte    0x0F, 0x31 subl    Cykle_L(,1),%EAX subl    $9,%EAX subl    Cykle_H(,1),%EDX movl    $SYSEXIT, %eax int    $0x80 Program w GNU Asemblerze kompilujemy za pomocą dołączonego kompilatora AS opcja –gstabs umożliwia zapamiętanie nazw symbolicznych zmiennych C:>as –gstabs sin.s -o sin.o linkujemy program C:>ld sin.o -o sin Uruchamiamy GDB jako parametr podając nazwę programu C:>gdb sin Ustawiamy break na 52 linijce wpisując break 52 (skrót: b 52) (gdb) break 52 Komendą run uruchamiamy program (gdb) run Starting program: C:fsin Breakpoint 2, loop1 () at fsin.s:53 53    movl    $SYSEXIT, %eax Sprawdzamy zawartość rejestrów procesora. Po wykonaniu algorytmu eax wskazuje liczbę cyklów (czas obliczeń) (gdb) info register eax    0x31b4    12724 ecx    0x22ffb0    2293680 edx    0x0    0 ebx    0x7ffdf000    2147348480 …..    ……………..    ……………… Obliczona wartość funkcji sinus po wykonaniu algorytmu znajduje się na stosie koprocesora w rejestrze st(0) (R7). Stan koprocesora sprawdzamy komendą info float (skrót: i fl) (gdb) info float =>R7: Valid 0x3ffeddb3ef0000000000 +0.86602681875228882 R6: Empty    0xbffca3e08b3af03ea708 R5: Empty    0xc0018000000000000000 R4: Empty    0x00000000000000000000 R3: Empty    0x00000000000000000000 R2: Empty    0x00000000000000000000 R1: Empty    0x00000000000000000000 R0: Empty    0x00000000000000000000 Status Word:    0xffff3820    PE TOP: 7 Control Word:    0xffff037f    IM DM ZM OM UM PM PC: Extended Precision (64-bits) RC: Round to nearest (gdb)
GNU GPL Windows

Opinie uzytkownikow

Komentarze (0)

Weryfikowane przez administracje przed publikacja.

Zaloguj sie, aby dodac komentarz.

Brak komentarzy. Badz pierwszy!