Thread View: pl.comp.lang.asm
18 messages
18 total messages
Started by johnny
Fri, 29 Dec 2006 21:39
Kilka pytań
Author: johnny
Date: Fri, 29 Dec 2006 21:39
Date: Fri, 29 Dec 2006 21:39
14 lines
1515 bytes
1515 bytes
1. Ściągnąłem ze strony www.masm32.com masm w wersji 6.14; tymczasem w jednej z książek przeczytałem, że na stronach Microsoftu znajduje się MASM w wersji (w czasie pisania książki) 6.15. Czy to jest inny MASM? 2. Przed zainstalowaniem masm 6.14 miałem masm 6.13. Aby zasemblować prosty program wystarczyło ml jakisplik.asm. Teraz podczas asemblacji pojawia mi się komunikat dotyczący parametrów /z2 i /t w części linkowania. O co chodzi? Nie podaję żadnych takich parametrów... 3. Czy różnice w składni MASM i FASM są duże? -- Pozdrawiam Johnny
Re: Kilka pytań
Author: Matuzalem
Date: Fri, 29 Dec 2006 22:18
Date: Fri, 29 Dec 2006 22:18
21 lines
1964 bytes
1964 bytes
johnny napisał(a): > 1. Ściągnąłem ze strony www.masm32.com masm w wersji 6.14; tymczasem w > jednej z książek przeczytałem, że na stronach Microsoftu znajduje się > MASM w wersji (w czasie pisania książki) 6.15. Czy to jest inny MASM? Raczej nie. > 2. Przed zainstalowaniem masm 6.14 miałem masm 6.13. Aby zasemblować > prosty program wystarczyło ml jakisplik.asm. Teraz podczas asemblacji > pojawia mi się komunikat dotyczący parametrów /z2 i /t w części > linkowania. O co chodzi? Nie podaję żadnych takich parametrów... Ty może nie, ale jeśli korzystasz z jakiegoś IDE, możliwe, że ono to robi. Sprawdź ustawienia dla kompilatora. > 3. Czy różnice w składni MASM i FASM są duże? http://rudy.mif.pg.gda.pl/~bogdro/dos/fntasm.htm Pozdrawiam
Re: Kilka pytań
Author: johnny
Date: Sat, 30 Dec 2006 09:25
Date: Sat, 30 Dec 2006 09:25
14 lines
1583 bytes
1583 bytes
>> 2. Przed zainstalowaniem masm 6.14 miałem masm 6.13. Aby zasemblować >> prosty program wystarczyło ml jakisplik.asm. Teraz podczas asemblacji >> pojawia mi się komunikat dotyczący parametrów /z2 i /t w części >> linkowania. O co chodzi? Nie podaję żadnych takich parametrów... > > Ty może nie, ale jeśli korzystasz z jakiegoś IDE, możliwe, że ono > to robi. Sprawdź ustawienia dla kompilatora. > Wywołanie z wiersza poleceń: ml plik.asm Nic więcej. -- Johnny
Re: Kilka pytań
Author: Bogdan (bogdro)
Date: Sat, 30 Dec 2006 09:31
Date: Sat, 30 Dec 2006 09:31
34 lines
2660 bytes
2660 bytes
johnny napisał(a): > 1. Ściągnąłem ze strony www.masm32.com masm w wersji 6.14; tymczasem w > jednej z książek przeczytałem, że na stronach Microsoftu znajduje się > MASM w wersji (w czasie pisania książki) 6.15. Czy to jest inny MASM? W sensie binarnym raczej nie, ale MASM32 to cały "pakiet", nie tylko kompilator. Szczegółów nie pamiętam, ale raczej tylko tym MASM32 różni się od "oryginalnego" MASMa. Na tej stronie nie było napisane? > 2. Przed zainstalowaniem masm 6.14 miałem masm 6.13. Aby zasemblować > prosty program wystarczyło ml jakisplik.asm. Teraz podczas asemblacji > pojawia mi się komunikat dotyczący parametrów /z2 i /t w części > linkowania. O co chodzi? Nie podaję żadnych takich parametrów... Sprawdź, co one robią (ml /? lub jakiś plik pomocy). Możliwe, że używasz niewłaściwego linkera. Do programów 32-bitowych ma być "Incremental Linker", do 16-bitowych - "Segmented Linker" czy jakoś tak (chyba wersja 5.63). > 3. Czy różnice w składni MASM i FASM są duże? Jeśli programujesz w sposób niemylący (tzn. zawsze używasz nawiasów kwadratowych, by pobrać zawartość pamięci), to różnice w zasadzie sprowadzają się do dyrektyw startowych i segmentów (.model/.code/.data/... vs. format/section/...) Słowo "offset" możesz zostawić, przy przesiadce na FASMa dodajesz tylko offset equ gdzieś u góry kodu i problem z głowy. -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Rozmawiaj bezpiecznie: www.JabberPL.org Surfuj anonimowo: tor.eff.org
Re: Kilka pytań
Author: Matuzalem
Date: Sat, 30 Dec 2006 11:48
Date: Sat, 30 Dec 2006 11:48
25 lines
1918 bytes
1918 bytes
johnny napisał(a): > >> 2. Przed zainstalowaniem masm 6.14 miałem masm 6.13. Aby zasemblować > >> prosty program wystarczyło ml jakisplik.asm. Teraz podczas asemblacji > >> pojawia mi się komunikat dotyczący parametrów /z2 i /t w części > >> linkowania. O co chodzi? Nie podaję żadnych takich parametrów... > > > > Ty może nie, ale jeśli korzystasz z jakiegoś IDE, możliwe, że ono > > to robi. Sprawdź ustawienia dla kompilatora. > > > Wywołanie z wiersza poleceń: ml plik.asm > > Nic więcej. Czyli piszesz tak: ml plik.asm link /subsystem:console/windows plik.obj ? Spróbuj napisać: ml /Zm plik.asm Pozdrawiam
Re: Kilka pytań
Author: johnny
Date: Sat, 30 Dec 2006 14:26
Date: Sat, 30 Dec 2006 14:26
13 lines
1526 bytes
1526 bytes
> Spróbuj napisać: > ml /Zm plik.asm > > Pozdrawiam > Bogdan ma rację z tym linkerem (tutaj automatycznie wywoływany jest Incremental). Zainstalowałem Segmented Linker no i działa. Mam jednak lamerskie pytanie. Kiedy kod jest 16 a kiedy 32-bitowy. Czy nie wystarczy dyrektywa .386? -- Johnny
Re: Kilka pytań
Author: Matuzalem
Date: Sat, 30 Dec 2006 14:44
Date: Sat, 30 Dec 2006 14:44
8 lines
1519 bytes
1519 bytes
johnny napisał(a): > Kiedy kod jest 16 a kiedy 32-bitowy. Jeśli możesz używać rejestrów 32-bitowych (np. eax, ebx, e..) to kod jest 32-bitowy. Pozdrawiam
Re: Kilka pytań
Author: Michal Schulz
Date: Sat, 30 Dec 2006 14:56
Date: Sat, 30 Dec 2006 14:56
12 lines
1375 bytes
1375 bytes
Matuzalem wrote: >> Kiedy kod jest 16 a kiedy 32-bitowy. > > Jeśli możesz używać rejestrów 32-bitowych (np. eax, ebx, e..) to > kod jest 32-bitowy. Nie. 32-bitowy kod to taki, w ktorym przestrzen adresowa jest 32-bitowa. Dzieki prefiksom mozna w 16-bitowym kodzie uzywac 32-bitowych rejestrow. -- Michal Schulz
Re: Kilka pytań
Author: johnny
Date: Sat, 30 Dec 2006 15:44
Date: Sat, 30 Dec 2006 15:44
9 lines
1552 bytes
1552 bytes
> Nie. 32-bitowy kod to taki, w ktorym przestrzen adresowa jest 32-bitowa. > Dzieki prefiksom mozna w 16-bitowym kodzie uzywac 32-bitowych rejestrow. > OK. Co trzeba zrobić by kod był 32-bitowy? Jakaś dyrektywa, polecenie, opcja? -- Johnny
Re: Kilka pytań
Author: Matuzalem
Date: Sat, 30 Dec 2006 15:57
Date: Sat, 30 Dec 2006 15:57
18 lines
1878 bytes
1878 bytes
Michal Schulz napisał(a): > Matuzalem wrote: > > >> Kiedy kod jest 16 a kiedy 32-bitowy. > > > > Jeśli możesz używać rejestrów 32-bitowych (np. eax, ebx, e..) to > > kod jest 32-bitowy. > > Nie. 32-bitowy kod to taki, w ktorym przestrzen adresowa jest 32-bitowa. > Dzieki prefiksom mozna w 16-bitowym kodzie uzywac 32-bitowych rejestrow. > > -- > Michal Schulz Racja trochę się pośpieszyłem ze stwierdzeniem. Pozdrawiam
Re: Kilka pytań
Author: johnny
Date: Sat, 30 Dec 2006 16:56
Date: Sat, 30 Dec 2006 16:56
14 lines
1658 bytes
1658 bytes
Matuzalem napisał(a): > johnny napisał(a): >> Kiedy kod jest 16 a kiedy 32-bitowy. > > Jeśli możesz używać rejestrów 32-bitowych (np. eax, ebx, e..) to > kod jest 32-bitowy. > > Pozdrawiam > No więc mogę używać eax a to dzięki dyrektywie .386. Niestety nadal nie mogę programu zlinkować linkerem "incremental". -- Johnny
Re: Kilka pytań
Author: Matuzalem
Date: Sat, 30 Dec 2006 18:08
Date: Sat, 30 Dec 2006 18:08
28 lines
2098 bytes
2098 bytes
johnny napisał(a): > Matuzalem napisał(a): > > johnny napisał(a): > >> Kiedy kod jest 16 a kiedy 32-bitowy. > > > > Jeśli możesz używać rejestrów 32-bitowych (np. eax, ebx, e..) to > > kod jest 32-bitowy. > > > > Pozdrawiam > > > No więc mogę używać eax a to dzięki dyrektywie .386. .186 .286 .286p 386 .386p 486 486p itd. Są to dyrektywy które służą do określenia zbioru instrukcji z jakich będziesz mógł korzystać w programie. > Niestety nadal nie mogę programu zlinkować linkerem "incremental". Może napisz co robisz, krok po kroku, jakie błędy/ostrzeżenia się ukazują... Pozdrawiam
Re: Kilka pytań
Author: johnny
Date: Sat, 30 Dec 2006 18:47
Date: Sat, 30 Dec 2006 18:47
27 lines
2490 bytes
2490 bytes
> Może napisz co robisz, krok po kroku, jakie błędy/ostrzeżenia się > ukazują... > > Pozdrawiam > Trochę się zapętliliśmy. Krótkie streszczenie. Po zainstalowaniu nowego masma z linkerem inkrementalnym otrzymuję komunikaty o błędach. Korzystając z linkera "segmented" potrafię zlinkować plik *.obj Bogdan napisał, że linker inkrementalny powinien być stosowany w przypadku kodu 32-bitowego a segment. w przypadku kodu 16-bitowego. Do tej pory sądziłem, że o "type" kodu decyduje dyrektywa .386 lecz zgodnie z tym co napisał Michal Schulz to zapewnia tylko możliwość korzystania z rejestrów 32-bitowych. O tym zaś co decyduje, że kod jest 32-bitowy jest 32-bitowe adresowanie. Tak to rozumiem do tej pory... W związku z tym pozostaje pytanie: - w jaki sposób (skoro dyrektywa .386 nie wystarcza) uzyskać kod 32-bitowy tak by móc skorzystać z linkera inkrementalnego (z nowym masmem nie jest instalowany żaden linker segm.; ten który mam pochodzi z płyty dołączonej do książki, którą przerabiam) -- Johnny
Re: Kilka pytań
Author: Bogdan (bogdro)
Date: Sun, 31 Dec 2006 09:14
Date: Sun, 31 Dec 2006 09:14
38 lines
2957 bytes
2957 bytes
johnny napisał(a): > Trochę się zapętliliśmy. Krótkie streszczenie. > Po zainstalowaniu nowego masma z linkerem inkrementalnym otrzymuję > komunikaty o błędach. Korzystając z linkera "segmented" potrafię > zlinkować plik *.obj > > Bogdan napisał, że linker inkrementalny powinien być stosowany w > przypadku kodu 32-bitowego a segment. w przypadku kodu 16-bitowego. > > Do tej pory sądziłem, że o "type" kodu decyduje dyrektywa .386 lecz > zgodnie z tym co napisał Michal Schulz to zapewnia tylko możliwość > korzystania z rejestrów 32-bitowych. O tym zaś co decyduje, że kod jest > 32-bitowy jest 32-bitowe adresowanie. Tak to rozumiem do tej pory... > > W związku z tym pozostaje pytanie: > - w jaki sposób (skoro dyrektywa .386 nie wystarcza) uzyskać kod > 32-bitowy tak by móc skorzystać z linkera inkrementalnego (z nowym > masmem nie jest instalowany żaden linker segm.; ten który mam pochodzi z > płyty dołączonej do książki, którą przerabiam) Aż dziw, że nikt nie podał prawidłowej odpowiedzi. Aby dostać kod 32-bitowy, stawia się dyrektywę ".386". ALE PRZED DEKLARACJĄ MODELU I SEGMENTU KODU (tak przynajmniej to działało w TASM). A więc nie: .model small .code .386 ; tylko rejestry 32-bitowe a .386 ; rejestry 32b i program 32b .model small ; możliwe, że "flat" .code -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Rozmawiaj bezpiecznie: www.JabberPL.org Surfuj anonimowo: tor.eff.org
Re: Kilka pytań
Author: johnny
Date: Sun, 31 Dec 2006 09:26
Date: Sun, 31 Dec 2006 09:26
33 lines
2121 bytes
2121 bytes
Dzięki za odpowiedź. Jednak nadal coś jest nie tak. Mam kod: .386 .model tiny .code org 100h main proc mov eax,4c00h int 21h main endp end main Wywołuję ml example.asm i otrzymuję: (...) Assembling: example.asm Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /z2 "example.obj" /t "example.com" NUL LINK : warning LNK4044: unrecognized option "z2"; ignored LINK : warning LNK4044: unrecognized option "t"; ignored example.obj : warning LNK4033: converting object format from OMF to COFF example.com : fatal error LNK1136: invalid or corrupt file -- Johnny
Re: Kilka pytań
Author: Bogdan (bogdro)
Date: Sun, 31 Dec 2006 10:14
Date: Sun, 31 Dec 2006 10:14
43 lines
2691 bytes
2691 bytes
johnny napisał(a): > Dzięki za odpowiedź. Jednak nadal coś jest nie tak. > Mam kod: > > ..386 > ..model tiny > ..code > org 100h > main proc > > mov eax,4c00h > int 21h > > main endp > end main > > Wywołuję ml example.asm i otrzymuję: > > (...) > Assembling: example.asm > Microsoft (R) Incremental Linker Version 5.12.8078 > Copyright (C) Microsoft Corp 1992-1998. All rights reserved. > > /z2 > "example.obj" /t > "example.com" > NUL > LINK : warning LNK4044: unrecognized option "z2"; ignored > LINK : warning LNK4044: unrecognized option "t"; ignored > example.obj : warning LNK4033: converting object format from OMF to COFF > example.com : fatal error LNK1136: invalid or corrupt file Prawdopodobnie ML.EXE źle kompiluje program, może model pamieci go myli, bo widać, że kompiluje na COM. Spróbuj ".model flat" lub pogrzeb w opcjach (choć COFF powinien być domyślnym formatem). P.S. Jeśli program się wysypie, to znaczy, że działa :) -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Rozmawiaj bezpiecznie: www.JabberPL.org Surfuj anonimowo: tor.eff.org
Re: Kilka pytań
Author: Pawel Kraszewski
Date: Sun, 31 Dec 2006 11:11
Date: Sun, 31 Dec 2006 11:11
45 lines
2867 bytes
2867 bytes
johnny wrote: >> Nie. 32-bitowy kod to taki, w ktorym przestrzen adresowa jest 32-bitowa. >> Dzieki prefiksom mozna w 16-bitowym kodzie uzywac 32-bitowych rejestrow. >> > > OK. Co trzeba zrobić by kod był 32-bitowy? Jakaś dyrektywa, polecenie, > opcja? > O 32-bitowości kodu decyduje typ segmentu, w którym się on znajduje. Wieki temu robiłem mikrocudeńka ASM+C w ogóle bez runtime'a. Zakładając dyrektywę .386 (bo tylko ona daje w ogóle dostęp do _instrukcji_ 32 bitowych, natomiast nic nie mówi o "bitowości" programu jako takiego) sprawy mają się tak: * W 16-bitowym segmencie kodu domyślne instrukcje są 16-bitowe. Każda 32-bitowa jest prefiksowana. * W 32-bitowym segmencie kodu jest dokładnie na odwrót. Model FLAT dla cpu>=386 zakłada automatycznie segmenty 32-bitowe (dla .code, .data, itd), pozostałe modele mają domyślne segmenty 16-bitowe. Można oczywiście zrobić dowolny segment "na krzyż" korzystając z pełnej instrukcji definicji segmentu: name SEGMENT [align] [READONLY] [combine] [use] [?class?] statements W tej definicji trik to jest parametr 'use' (oczywiście istotny dla >=386): * use32 definiuje segment 32-bitowy niezależnie od modelu * use16 definiuje segment 16-bitowy niezależnie od modelu Polecam http://webster.cs.ucr.edu/Page_TechDocs/MASMDoc/ProgrammersGuide/ Problemy Twoje z sąsiedniego "odszczepu" wątka mogą wynikać (o ile dobrze pamiętam) z faktu, że linker 32-bitowy (znaczy Windowsowa aplikacja 32-bitowa) wymaga delikatnego "szturchnięcia" do wygenerowania aplikacji 16-bitowej. Niestety nie pamiętam jak :/ -- Pawel Kraszewski www.kraszewscy.net
Re: Kilka pytań
Author: Bernard
Date: Sun, 31 Dec 2006 22:51
Date: Sun, 31 Dec 2006 22:51
33 lines
2013 bytes
2013 bytes
Bogdan (bogdro) wrote: > johnny napisał(a): >> Dzięki za odpowiedź. Jednak nadal coś jest nie tak. >> Mam kod: >> >> ..386 >> ..model tiny >> ..code I już asembler zacznie generować postać OBJ, z którą nie poradzi sonie żaden linker. Jeśli model ma być 16-bitowy (czyli np. tiny), to dyrektywa .386 MUSI być po modelu. >> org 100h >> main proc A jakie to niby proc? daruj sobie. Powinno być po prostu start: >> >> mov eax,4c00h >> int 21h >> >> main endp >> end main >> >> Wywołuję ml example.asm i otrzymuję: >> >> (...) >> Assembling: example.asm >> Microsoft (R) Incremental Linker Version 5.12.8078 No właśnie. Przemieść to .386.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads