| Screenshoty użytkowników Zgłoś Błąd | ||
|
Opis MinGW 3.1.0 |
||
|
MinGW (Minimalistic GNU for Windows) to zestaw kompilatorów języka C, C++, FORTRAN, Asemblera. Zawierający kultowy kompilator GCC, znany użytkownikom linuxa. GCC umożliwia tworzenie aplikacji działających w konsoli i okienkowych (w32api). Istotna jest także możliwość dołączania kodu asemblera. Należy jednak przy tym zaznaczyć, że wstawki asemblerowe muszą być napisane w GNU Asemblerze. Dołączony kompilator asemblera AS także obsługuje składnię GNU Asemblera. Składnia GNU Asemblera dla użytkowników programujących w asemblerze x86 może na początku stanowić pewną niedogodność, ale szybko można pokonać początkowe trudności. Pakiet zawiera także GNU debugger potężne narzędzie pozwalające na debugowanie kodu. Poniżej przedstawiono przykład pracy w MinGW. Po instalacji należy dodać katalog w którym znajdują się kompilatory do zmiennych środowiska (katalog BIN). C:\>path c:\mingw\bin Następnie za pomocą dowolnego edytora piszemy program. Poniżej program napisany w asemblerze umieszczający w rejestrze eax liczbę 65535 oraz obliczający wartość wyrażenia 0.(3)/0.(6). SYSEXIT =1 EXIT_SUCCESS =0 .align 32 .data arg1: .float 0f+0.33333333E-0 arg2: .float 0f+0.66666666E-0 liczba: .long 65535 .text .global _start _start: finit movl liczba(,1),%EAX flds arg1(,1) fdivs arg2(,1) 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 num.s -o num.o linkujemy program C:\>mingw\bin\ld num.o -o num uruchamiamy GDB jako parametr podając nazwę programu C:\>gdb num ustawiamy break na 16 linijce wpisując break 16 (gdb) break 16 komendą run uruchamiamy program (gdb) run Starting program: C:\num Breakpoint 1, start () at num.s:16 16 movl $SYSEXIT, %eax sprawdzamy zawartość rejestrów procesora eax powinien zawierać liczbę 65535 czyli FFFF w kodzie heksadecymalnym (gdb) info register eax 0xffff 65535 ecx 0x22ffb0 2293680 edx 0x7ffe0304 2147353348 ebx 0x7ffdf000 2147348480 ..... ................. .................. Obliczony iloraz 0,(3)/0,(6) zdajduje się na stosie koprocesora w rejestrze st(0) (R7). Stan koprocesora sprawdzamy komendą info float (gdb) info float =>R7: Valid 0x3ffe8000000000000000 +0.5 R6: Empty 0x00000000000000000000 R5: Empty 0x00000000000000000000 R4: Empty 0x00000000000000000000 R3: Empty 0x00000000000000000000 R2: Empty 0x00000000000000000000 R1: Empty 0x00000000000000000000 R0: Empty 0x00000000000000000000 Status Word: 0xffff3800 TOP: 7 Control Word: 0xffff037f IM DM ZM OM UM PM PC: Extended Precision (64-bits) RC: Round to nearest +0.5 to prawidłowy wynik z opuszczamy debugger wpisując q (gdb) q Uwaga! W gdb możliwe jest stosowanie skrótów np. zamiast info registers = i r, info float = i fl, break = b |
||















