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
Producent:
Licencja:
GNU GPLSystem:
Windows 98/Me/2000/XP/2003Kategoria:
narzędzia pomocnicze Ocena:
0
Oceń:
Pobrano:
12608
(104 w tym miesiącu) Opis MinGW 5.1.6
rozwiń opis
Menu główne
Podobne programy
![]() | GitKraken v. 7.5.0 / Aktualizacja 22.01.2021 |
![]() | CudaText v. 1.122.5.0 / Aktualizacja 22.01.2021 |
![]() | SourceTree v. 3.4.1 / Aktualizacja 20.01.2021 |
![]() | Software Ideas Modeler v. 12.86 / Aktualizacja 19.01.2021 |
![]() | Free Hex Editor Neo v. 6.54.00.6437 / Aktualizacja 18.01.2021 |