Thread View: pl.comp.lang.asm
17 messages
17 total messages
Started by Remek
Tue, 09 Oct 2007 18:23
Longhand Division in Binary
Author: Remek
Date: Tue, 09 Oct 2007 18:23
Date: Tue, 09 Oct 2007 18:23
11 lines
1254 bytes
1254 bytes
Witam Pod poniższym linkiem są dwa pliki. Jeden z oryginalną procedurą z Art of Assembly Language - Figure 4.4 w dziale Advanced Arithmetic, i drugi z moją implementacją tej procedury do składni Masm32. Wyniki działania programu są nieprawidłowe. Proszę kogoś znającego składnię HLA o porównanie obydwu procedur i wskazanie ewentualnych błędów. http://remek62.republika.pl/Tymcz/procedura.zip Pozdrawiam Remek
Re: Longhand Division in Binary
Author: Bogdan (bogdro)
Date: Wed, 10 Oct 2007 17:32
Date: Wed, 10 Oct 2007 17:32
41 lines
2279 bytes
2279 bytes
Remek pisze:
> Witam
>
> Pod poniższym linkiem są dwa pliki. Jeden z oryginalną procedurą z Art of
> Assembly Language - Figure 4.4 w dziale Advanced Arithmetic, i drugi z
> moją implementacją tej procedury do składni Masm32. Wyniki działania
> programu są nieprawidłowe. Proszę kogoś znającego składnię HLA o
> porównanie obydwu procedur i wskazanie ewentualnych błędów.
1. Źle przetłumaczone linie
QuotAdrs db 128 dup (0)
RmndrAdrs db 128 dup (0)
Var, jak w Pascalu, oznacza wskaźnik. Ale patrząc na resztę kodu,
chyba nie robi to problemów, o ile wynik bierzesz z QuotAdrs i RmndrAdrs.
2. Nieprzetłumaczone są linie
mov( 0, eax ); // Set the remainder to zero.
mov( eax, Remainder[0] );
mov( eax, Remainder[4] );
mov( eax, Remainder[8] );
mov( eax, Remainder[12]);
Jak uruchomisz procedurę więcej niż jeden raz bez zerowania, to klops.
3. Linia
cmp dword ptr dword ptr Divisor[12], eax
zawiera coś zbędnego, ale to też nie problem.
Jak to nie pomoże, to się pomyśli więcej. Słowo "remainder" w
kontekście dzielenia matematycznego oznacza resztę.
--
Pozdrawiam/Regards - Bogdan (Linux & FreeDOS)
Kurs asemblera x86 (DOS & Linux): 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: Longhand Division in Binary
Author: Remek
Date: Wed, 10 Oct 2007 21:37
Date: Wed, 10 Oct 2007 21:37
94 lines
3325 bytes
3325 bytes
Użytkownik "Bogdan (bogdro)"
> 1. Źle przetłumaczone linie
> QuotAdrs db 128 dup (0)
> RmndrAdrs db 128 dup (0)
> Var, jak w Pascalu, oznacza wskaźnik. Ale patrząc na resztę kodu,
> chyba nie robi to problemów, o ile wynik bierzesz z QuotAdrs i
RmndrAdrs.
Jak powinny być zadeklarowane te linie? Uznałem je za bufory łańcuchowe.
> 2. Nieprzetłumaczone są linie
> mov( 0, eax ); // Set the remainder to zero.
> mov( eax, Remainder[0] );
> mov( eax, Remainder[4] );
> mov( eax, Remainder[8] );
> mov( eax, Remainder[12]);
Są przetłumaczone w innym miejscu, w procedurze czyszczenia wszystkich
buforów.
> 3. Linia
> cmp dword ptr dword ptr Divisor[12], eax
> zawiera coś zbędnego, ale to też nie problem.
No tak. Przepuściłem to. Dziwne, że kompilator nie protestuje. Używany
przeze mnie edytor tekstowy czasem robi mi takie numery.
Sam znalazłem już jeden błąd. Linie:
shl Dividend, 1
rcl Dividend+4, 1
rcl Dividend+8, 1
rcl Dividend+12, 1
rcl Remainder, 1
rcl Remainder+4, 1
rcl Remainder+8, 1
rcl Remainder+12, 1
kompilator przetłumaczył na:
shl byte Dividend, 1
rcl byte Dividend+4, 1
rcl byte Dividend+8, 1
rcl byte Dividend+12, 1
rcl byte Remainder, 1
rcl byte Remainder+4, 1
rcl byte Remainder+8, 1
rcl byte Remainder+12, 1
co powodowało oczywiście nieprawidłowe działanie. Zmieniłem to na:
shl dword ptr Dividend, 1
rcl dword ptr Dividend+4, 1
rcl dword ptr Dividend+8, 1
rcl dword ptr Dividend+12, 1
rcl dword ptr Remainder, 1
rcl dword ptr Remainder+4, 1
rcl dword ptr Remainder+8, 1
rcl dword ptr Remainder+12, 1
i teraz jest obrabiany cały dword, ale i tak wyniki są złe. Muszę szukać
dalej. Nie rozumiem np. po co są potrzebne linie:
;mov edi, QuotAdrs ; oryginał
lea edi, QuotAdrs ; moje tłumaczenie
mov eax, dword ptr Quotient
mov [edi], eax
mov eax, dword ptr Quotient[4]
mov [edi+4], eax
.....
;mov edi, RmndrAdrs
lea edi, RmndrAdrs
mov eax, dword ptr Remainder
mov [edi], eax
mov eax, dword ptr Remainder[4]
mov [edi+4], eax
Po co przenosić z bufora1 do bufora2? Mogę równie dobrze pobrać te same
dane zarówno z bufor1 jak i z bufor2. Chyba, że źle to rozumiem i to może
być przyczyna.
Pozdrawiam Remek
Re: Longhand Division in Binary
Author: Bogdan (bogdro)
Date: Thu, 11 Oct 2007 15:48
Date: Thu, 11 Oct 2007 15:48
134 lines
5171 bytes
5171 bytes
Remek pisze:
> > Użytkownik "Bogdan (bogdro)"
> >
>> >> 1. Źle przetłumaczone linie
> >
>> >> QuotAdrs db 128 dup (0)
>> >> RmndrAdrs db 128 dup (0)
> >
>> >> Var, jak w Pascalu, oznacza wskaźnik. Ale patrząc na resztę kodu,
>> >> chyba nie robi to problemów, o ile wynik bierzesz z QuotAdrs i
> > RmndrAdrs.
> >
> > Jak powinny być zadeklarowane te linie? Uznałem je za bufory
łańcuchowe.
Jak wskaźnik, to DD.
QuotAdrs dd addr Quotient ; czy "offset" czy jak to tam jest.
Jak się nie da zainicjować w czasie kompilacji, wstawia się tam
ręcznie. Po prostu do procedury był przekazywany adres zmiennych,
które mają otrzymać wynik. Ty masz te wynikowe zmienne widoczne od
razu, więc nie musisz stosować tych wskaźników. Dlatego powiedziałem,
że nie robi to problemów, bo zapisujesz bezpośrednio do zmiennych
wynikowych i pomieszczą one wynik.
>> >> 2. Nieprzetłumaczone są linie
> >
>> >> mov( 0, eax ); // Set the remainder to zero.
>> >> mov( eax, Remainder[0] );
>> >> mov( eax, Remainder[4] );
>> >> mov( eax, Remainder[8] );
>> >> mov( eax, Remainder[12]);
> >
> > Są przetłumaczone w innym miejscu, w procedurze czyszczenia wszystkich
> > buforów.
Dobrze. Byleby ta procedura czyszcząca uruchamiana była za każdym
razem (ostatnimi razy była, jak pamiętam).
>> >> 3. Linia
>> >> cmp dword ptr dword ptr Divisor[12], eax
>> >> zawiera coś zbędnego, ale to też nie problem.
> >
> > No tak. Przepuściłem to. Dziwne, że kompilator nie protestuje. Używany
> > przeze mnie edytor tekstowy czasem robi mi takie numery.
> >
> > Sam znalazłem już jeden błąd. Linie:
> >
> > shl Dividend, 1
> > rcl Dividend+4, 1
> > rcl Dividend+8, 1
> > rcl Dividend+12, 1
> >
> > rcl Remainder, 1
> > rcl Remainder+4, 1
> > rcl Remainder+8, 1
> > rcl Remainder+12, 1
> >
> > kompilator przetłumaczył na:
> >
> > shl byte Dividend, 1
> > rcl byte Dividend+4, 1
> > rcl byte Dividend+8, 1
> > rcl byte Dividend+12, 1
> >
> > rcl byte Remainder, 1
> > rcl byte Remainder+4, 1
> > rcl byte Remainder+8, 1
> > rcl byte Remainder+12, 1
> >
> > co powodowało oczywiście nieprawidłowe działanie
To jest właśnie minus pamiętania typów. W NASMie by to nie przeszło.
Trzeba byłoby jawnie napisać typ danych i człowiek by się zastanowił.
Zapisz swoje zmienne jako tablice dwordów, nie bajtów:
Remainder dd 4 dup(0)
I tak z każdą. Może błąd się sam naprawi. Choć czytaj najpierw niżej,
bo odkopałem coś jeszcze.
> > i teraz jest obrabiany cały dword, ale i tak wyniki są złe. Muszę
szukać
> > dalej. Nie rozumiem np. po co są potrzebne linie:
> >
> > ;mov edi, QuotAdrs ; oryginał
> > lea edi, QuotAdrs ; moje tłumaczenie
> >
> > mov eax, dword ptr Quotient
> > mov [edi], eax
[...]
> > Po co przenosić z bufora1 do bufora2? Mogę równie dobrze pobrać te
> > same dane zarówno z bufor1 jak i z bufor2. Chyba, że źle to rozumiem
> > i to może być przyczyna.
Napisałem wcześniej, jak to miało być z tą procedurą - założenie
(prawidłowe) jest, że nie widzi ona zmiennych, do których ma zapisać
wynik, a jedynie adres do nich i stąd to zapisywanie. Prototyp wygląda
tak:
procedure div128
( Dividend: t128; Divisor: t128; var QuotAdrs: t128; var RmndrAdrs:
t128);
Co po przełożeniu na C daje
void div128 (t128 Dividend, t128 Divisor, t128 * QuotAdrs, t128 *
RmndrAdrs);
Tak sobie jeszcze myślę: masz samotną dyrektywę .if
.if ;( #{
Jak byłbym MASMem32, mógłbym ją zinterpretować jako
.if 0
i kod między .if a .endif byłby zawsze pomijany w programie.
Zakomentuj .if i .endif, bo i tak są niepotrzebne.
Ponadto, blok _true, czyli "Remainder := Remainder - Divisor" źle
przerobiłeś - to nie jest odejmowanie wielokrotnej precyzji, a w
oryginale tak było.
--
Pozdrawiam/Regards - Bogdan (Linux & FreeDOS)
Kurs asemblera x86 (DOS & Linux): 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: Longhand Division in Binary
Author: Remek
Date: Fri, 12 Oct 2007 00:29
Date: Fri, 12 Oct 2007 00:29
74 lines
3086 bytes
3086 bytes
Użytkownik "Bogdan (bogdro)" napisał:
> > > Jak powinny być zadeklarowane te linie? Uznałem je za bufory
> łańcuchowe.
> Jak wskaźnik, to DD.
> QuotAdrs dd addr Quotient ; czy "offset" czy jak to tam jest.
W Masmie
zmienna dd ?
oznacza dworda, który może min. zawierać wskaźnik. Czy o to idzie?
> To jest właśnie minus pamiętania typów. W NASMie by to nie przeszło.
> Trzeba byłoby jawnie napisać typ danych i człowiek by się zastanowił.
> Zapisz swoje zmienne jako tablice dwordów, nie bajtów:
>
> Remainder dd 4 dup(0)
Zrobiłem tak jak poniżej i efekt jest bez zmian tzn. błędny wynik.
Dividend1 dd ?
Dividend2 dd ?
Dividend3 dd ?
Dividend4 dd ?
Remainder1 dd ?
Remainder2 dd ?
Remainder3 dd ?
Remainder4 dd ?
Po obróbce te zmienne przerzucam do buforów łańcuchowych typu:
Quotient db 128 dup (0)
Remainder db 128 dup (0)
To nie ma znaczenia w sumie, bo gdzie jest wynik widzę i potrafię go
pobrać. Chodzi o to, że jest błędny. Czegoś nie rozumiem. Póki co
działanie procedury wydaje mi się bezsensowne. Min. po pierwszym skoku
_true:
mov eax, dword ptr [Divisor]
sub dword ptr [Remainder], eax
mov eax, dword ptr [Divisor+4]
sbb dword ptr [Remainder+4], eax
mov eax, dword ptr [Divisor+8]
sbb dword ptr [Remainder+8], eax
mov eax, dword ptr [Divisor+12]
sbb dword ptr [Remainder+12], eax
pierwsze odejmowanie jest od zera i cały bufor oprócz pierwszych czterch
bajtów zapełnia się wartością:
........FFFFFFFFFFFFFFFFFFFFFFFF
A pierwsze cztery bajty zależą od tego co jest wpisane jako dzielnik.
> Ponadto, blok _true, czyli "Remainder := Remainder - Divisor" źle
> przerobiłeś - to nie jest odejmowanie wielokrotnej precyzji, a w
> oryginale tak było.
Mea culpa. Nie wiem dlaczego? Sprawdzam sto razy i nie widzę takiego
poważnego błędu.
Spróbuję zainstalować HLA, skompilować i zobaczyć jak to działa.
Poprawioną procedurę wrzuciłem na swoją stronę.
Pozdrawiam Remek
Re: Longhand Division in Binary
Author: Remek
Date: Sun, 14 Oct 2007 09:57
Date: Sun, 14 Oct 2007 09:57
7 lines
1339 bytes
1339 bytes
W HLA nie udaje mi się niczego skompilować. Może ktoś tego używa i podeśle mi jakiś uniwersalny plik wsadowy? Jeśli chodzi o przedmiotową procedurę. Nie potrafię znaleźć więcej błędów. Jedyna możliwość jaka mi pozostała to ewentualne błędy w konstrukcji bloków i logiki skoków. Nie śmiem podejrzewać błędu w oryginale. Pozdrawiam Remek
Re: Longhand Division in Binary
Author: Bogdan (bogdro)
Date: Sat, 20 Oct 2007 14:00
Date: Sat, 20 Oct 2007 14:00
21 lines
1957 bytes
1957 bytes
Remek pisze: > W HLA nie udaje mi się niczego skompilować. Może ktoś tego używa i > podeśle mi jakiś uniwersalny plik wsadowy? Może nie ustawiłeś np. ścieżek dostępu do programów? Bez komunikatów trudno cokolwiek powiedzieć. Poczytaj instrukcje instalacji. > Jeśli chodzi o przedmiotową > procedurę. Nie potrafię znaleźć więcej błędów. Jedyna możliwość jaka mi > pozostała to ewentualne błędy w konstrukcji bloków i logiki skoków. Nie > śmiem podejrzewać błędu w oryginale. HLA 1.x przetwarza pliki .hla na pliki MASMa, FASMa i pewnie innych. Wystarczy tylko podać, by nie kasował plików pośrednich (lub wygenerował tylko je) i problem z głowy. -- Pozdrawiam/Regards - Bogdan (Linux & FreeDOS) Kurs asemblera x86 (DOS & Linux): 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: Longhand Division in Binary
Author: Remek
Date: Sat, 20 Oct 2007 18:49
Date: Sat, 20 Oct 2007 18:49
25 lines
1976 bytes
1976 bytes
Użytkownik "Bogdan (bogdro)" napisał: > Może nie ustawiłeś np. ścieżek dostępu do programów? Bez komunikatów > trudno cokolwiek powiedzieć. Poczytaj instrukcje instalacji. Ustawiłem ścieżki zgodnie z instrukcją. > HLA 1.x przetwarza pliki .hla na pliki MASMa, FASMa i pewnie innych. > Wystarczy tylko podać, by nie kasował plików pośrednich (lub > wygenerował tylko je) i problem z głowy. Tego się doczytałem. Mam: - na C: katalog HLA i Masm32 (w katalogach oczywiście wszystkie potrzebne składniki). - mam plik example.hla Jak ma wyglądać składnia komendy wpisanej w wierszu poleceń, lub pliku wsadowym, aby skompilowało się do example.exe, lub choćby do example.obj? Pozdrawiam Remek PS Przepraszam za brak niektórych polskich znaków. To mój OE coś się biesi uparcie usuwając "ogonki" mimo, że je wpisuję. Skonfigurowany jest prawidłowo i to zjawisko występuje losowo.
Re: Longhand Division in Binary
Author: Bogdan (bogdro)
Date: Sun, 21 Oct 2007 09:09
Date: Sun, 21 Oct 2007 09:09
42 lines
2544 bytes
2544 bytes
Remek pisze: > Użytkownik "Bogdan (bogdro)" napisał: > >> Może nie ustawiłeś np. ścieżek dostępu do programów? Bez komunikatów >> trudno cokolwiek powiedzieć. Poczytaj instrukcje instalacji. > > Ustawiłem ścieżki zgodnie z instrukcją. Czyli zmienne środowiskowe PATH, LIB, HLAINC i HLALIB? >> HLA 1.x przetwarza pliki .hla na pliki MASMa, FASMa i pewnie innych. >> Wystarczy tylko podać, by nie kasował plików pośrednich (lub >> wygenerował tylko je) i problem z głowy. > > Tego się doczytałem. Mam: > > - na C: katalog HLA i Masm32 (w katalogach oczywiście wszystkie potrzebne > składniki). > - mam plik example.hla > > Jak ma wyglądać składnia komendy wpisanej w wierszu poleceń, lub pliku > wsadowym, aby skompilowało się do example.exe, lub choćby do example.obj? Na stronie z instrukcjami widzę np. hla -v hw.hla hla /?, hla /h, hla -h ani hla --help nie działają? > Pozdrawiam Remek > > PS Przepraszam za brak niektórych polskich znaków. To mój OE coś się > biesi uparcie usuwając "ogonki" mimo, że je wpisuję. Skonfigurowany jest > prawidłowo i to zjawisko występuje losowo. Pora na przesiadkę? www.thunderbird.pl -- Pozdrawiam/Regards - Bogdan (Linux & FreeDOS) Kurs asemblera x86 (DOS & Linux): 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: Longhand Division in Binary
Author: Remek
Date: Sun, 21 Oct 2007 16:04
Date: Sun, 21 Oct 2007 16:04
39 lines
2523 bytes
2523 bytes
Użytkownik "Bogdan (bogdro)" napisał: > Czyli zmienne środowiskowe PATH, LIB, HLAINC i HLALIB? W ten sposób: set hlainc=c:\hla\include set hlalib=c:\hla\hlalib\hlalib.lib itd. > Na stronie z instrukcjami widzę np. > hla -v hw.hla > hla /?, hla /h, hla -h ani hla --help nie działają? Akurat żadna z podanych nie działa :) Działa hla -?. Nie działa natomiast przekierowanie do pliku tekstowego (to osobny problem). Zrobiłem zrzuty z ekranu. Prawdę mówiąc liczyłem na gotowca, bo chodzi mi o sprawdzenie tylko tej jednej procedury dzielenia. Jakoś póki co nie bardzo mnie ten HLA przekonuje. Udało mi się zmusić go do zrobienia z z pliku *.hla plik *.asm. I co widzę? Jest to prosty meesagbox. Plik .asm pod Masm 32 ma 21 linijek ze wszystkimi includami i deklaracjami. W C i Pascalu taki plik źródłowy ma jedną linijkę, a .asm wygenerowany przez HLA ma ich po dodaniu niezbędnych includów 151. Coś jest nie tak. Masm32 robi z tego pliku .obj, a linker wyrzuca komunikat: LINK : error LNK2001: unresolved external symbol _start tut02.exe : fatal error LNK1120: 1 unresolved externals Plik tut02.asm wygenerowany z HLA jest tutaj: http://remek62.republika.pl/Tymcz/tymcz.html Linie z includami dodałem, bo było więcej błędów. Widocznie zmienne środowiskowe są nie do końca dobrze zadeklarowane w Autoexec'u Pozdrawiam Remek
Re: Longhand Division in Binary
Author: Bogdan (bogdro)
Date: Mon, 22 Oct 2007 16:18
Date: Mon, 22 Oct 2007 16:18
94 lines
4440 bytes
4440 bytes
Remek pisze: > > Użytkownik "Bogdan (bogdro)" napisał: > > >> >> Czyli zmienne środowiskowe PATH, LIB, HLAINC i HLALIB? > > > > W ten sposób: > > > > set hlainc=c:\hla\include > > set hlalib=c:\hla\hlalib\hlalib.lib > > > > itd. No i dobrze. >> >> Na stronie z instrukcjami widzę np. > > >> >> hla -v hw.hla > > >> >> hla /?, hla /h, hla -h ani hla --help nie działają? > > > > Akurat żadna z podanych nie działa :) Działa hla -?. To było takie zgaduj-zgadula z mojej strony, bo nie mam HLA. > > Nie działa natomiast > > przekierowanie do pliku tekstowego (to osobny problem). Zrobiłem zrzuty z > > ekranu. Programik bodajże 'rerror' się nazywa. Przekierowuje wyjście stderr na stdout, które to da się przekierować do pliku nawet w czymś tak zaawansowanym jak command.com :) No chyba że pomijana jest warstwa systemowa (w co wątpię). > > Prawdę mówiąc liczyłem na gotowca, bo chodzi mi o sprawdzenie > > tylko tej jednej procedury dzielenia. Gotowca dostaniesz, jak znajdziesz osobę używającą HLA i chcącą się podzielić wiedzą. Ja to mogę tylko parę ogólnych rad podać, resztę musisz doczytać w instrukcjach. > > Jakoś póki co nie bardzo mnie ten > > HLA przekonuje. Udało mi się zmusić go do zrobienia z z pliku *.hla plik > > *.asm. I co widzę? Jest to prosty meesagbox. Jak na windowsowy 'hello, world' przystało :) To przeszkadza? Przecież sam piszesz progsy 32-bitowe z takimi messageboksami. Czy chodzi o długość? > > Plik .asm pod Masm 32 ma 21 > > linijek ze wszystkimi includami i deklaracjami. W C i Pascalu taki plik > > źródłowy ma jedną linijkę Choćbyś całe main() upakował w jedną linię, to #include musi być w osobnej. :) Wiem, to miało być wyolbrzymienie. Zapominasz jednak, że coś generowane przez automat czasem bywa nadmiarowe, bo nie sposób wszystkiego przewidzieć. > >, a .asm wygenerowany przez HLA ma ich po > > dodaniu niezbędnych includów 151. Mnie to nie dziwi. Nie dość, że asemblerze w ogóle kod często jest dłuższy, to jeszcze widać w nim np. sprawy związane z obsługą wyjątków, prawda? > > Coś jest nie tak. Masm32 robi z tego > > pliku .obj, a linker wyrzuca komunikat: > > > > LINK : error LNK2001: unresolved external symbol _start > > tut02.exe : fatal error LNK1120: 1 unresolved externals Tak nie powinno być. Ten symbol pewnie jest z bibliotek HLA. Jeśli chcesz exe, pozwól, by HLA wykonał całą robotę - od przetwarzania po linkowanie. > > Plik tut02.asm wygenerowany z HLA jest tutaj: > > > > http://remek62.republika.pl/Tymcz/tymcz.html > > > > Linie z includami dodałem, bo było więcej błędów. Widocznie zmienne > > środowiskowe są nie do końca dobrze zadeklarowane w Autoexec'u Możliwe. Albo nie dodajesz na linii poleceń wszystkiego, co potrzeba linkerowi. Ale skoro już "kompilacja" działa, to czemu nie najedziesz HLA na procedurę dzielenia, by zobaczyć wynik? To jest (chwilowo) główny cel, co nie? -- Pozdrawiam/Regards - Bogdan (Linux & FreeDOS) Kurs asemblera x86 (DOS & Linux): 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: Longhand Division in Binary
Author: Remek
Date: Mon, 22 Oct 2007 21:47
Date: Mon, 22 Oct 2007 21:47
17 lines
1797 bytes
1797 bytes
Użytkownik "Bogdan (bogdro)" napisał: > Możliwe. Albo nie dodajesz na linii poleceń wszystkiego, co potrzeba > linkerowi. Linker dostaje właściwe polecenie. Nie podoba mu się *.obj. > Ale skoro już "kompilacja" działa, to czemu nie najedziesz > HLA na procedurę dzielenia, by zobaczyć wynik? To jest (chwilowo) > główny cel, co nie? Tak, to jest cel i już próbowałem. Po to cała zabawa, aby zobaczyć *.asm. Jednak na razie nie wychodzi. Wyskakują błędy. Muszę znaleźć sposób na implementację samej procedury do jakiegoś gotowego *.hll, bo sam nie jestem w stanie go zbudować. Pozdrawiam Remek
Re: Longhand Division in Binary
Author: Remek
Date: Mon, 22 Oct 2007 23:15
Date: Mon, 22 Oct 2007 23:15
14 lines
1578 bytes
1578 bytes
Napisałem: > Muszę znaleźć sposób na implementację ... Udało się. Moja zaimplementowana pod Masm'a i ta wygenerowana przez HLA są tutaj: http://remek62.republika.pl/Tymcz/divide128.zip Wydaje się na pierwszy rzut oka, że są identyczne. Co by oznaczało, że dobrze ją zaimplementowałem. Jednak działa niedobrze. Jakiś błąd w założeniach. Pozdrawiam Remek
Re: Longhand Division in Binary
Author: Bogdan (bogdro)
Date: Tue, 23 Oct 2007 15:12
Date: Tue, 23 Oct 2007 15:12
32 lines
2497 bytes
2497 bytes
Remek pisze: > Napisałem: > >> Muszę znaleźć sposób na implementację ... > > Udało się. Moja zaimplementowana pod Masm'a i ta wygenerowana przez HLA > są tutaj: > > http://remek62.republika.pl/Tymcz/divide128.zip > > Wydaje się na pierwszy rzut oka, że są identyczne. Też mi się tak wcześniej wydawało. Nie odpisałem wcześniej właśnie z tej przyczyny - już nie widziałem różnic. > Co by oznaczało, że > dobrze ją zaimplementowałem. Jednak działa niedobrze. Jakiś błąd w > założeniach. To sprawdź założenia oraz (zwłaszcza?) metodę weryfikacji działania. A linkerowi podobał się .obj, tyle że brakowało jakiegoś symbolu zewnętrznego. Znaczy to tyle, że nawet jeśli linia poleceń była prawidłowa w sensie składniowym, to była niekompletna. Tak to było? Skoro już sobie poradziłeś z kompilacją z HLA do EXE, to podaj tu sposób/plik wsadowy, żeby Google zarchiwizowało dla potomności :) -- Pozdrawiam/Regards - Bogdan (Linux & FreeDOS) Kurs asemblera x86 (DOS & Linux): 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: Longhand Division in Binary
Author: Remek
Date: Tue, 23 Oct 2007 15:55
Date: Tue, 23 Oct 2007 15:55
28 lines
2408 bytes
2408 bytes
Użytkownik "Bogdan (bogdro)" napisał: > > Jakiś błąd w założeniach. > To sprawdź założenia oraz (zwłaszcza?) metodę weryfikacji działania. Pisząc założenia mam na myśli np. format danych wejściowych. Nie wiem co dokładnie może oznaczać te 128 bit. Dane traktuję jako liczby hex. Próbowałem również potraktować dane wejściowe jako liczby binarne, ale wyniki też są błędne. > A linkerowi podobał się .obj, tyle że brakowało jakiegoś symbolu > zewnętrznego. Znaczy to tyle, że nawet jeśli linia poleceń była > prawidłowa w sensie składniowym, to była niekompletna. Tak to było? > Skoro już sobie poradziłeś z kompilacją z HLA do EXE, to podaj tu > sposób/plik wsadowy, żeby Google zarchiwizowało dla potomności :) Niestety do .exe nie udało mi się doprowadzić. Poleceniem: hla\hlaparse.exe -sm tut02.hla utworzyłem plik .asm pod Masm32 (zgodnie z instrukcją zastosowałem wariant via Masm32). Następnie już obrabiam go Masm'em. Po dodaniu deklaracji includów Masm tworzy .obj, ale nie linkuje. Jak znajdę przyczynę, wrzucę wszystko na grupę. Pozdrawiam Remek
Re: Longhand Division in Binary
Author: Remek
Date: Tue, 23 Oct 2007 16:00
Date: Tue, 23 Oct 2007 16:00
9 lines
1641 bytes
1641 bytes
> To sprawdź ... (zwłaszcza?) metodę weryfikacji działania. Uzupełniam dla pewności. Wynikiem dzielenia jest zawsze 1 jaki bym nie wpisał dzielnik i dzielną, aż do momentu kiedy dzielna i dzielnik osiągną wartość czterech dwordów 0xFFFFFFFF. Wtedy wynikiem jest 0x80. Oczywiście bezsensowne wyniki działania procedury. Pozdrawiam Remek
Re: Longhand Division in Binary
Author: Remek
Date: Wed, 24 Oct 2007 17:36
Date: Wed, 24 Oct 2007 17:36
59 lines
2621 bytes
2621 bytes
Użytkownik "Bogdan (bogdro)" napisał: > A linkerowi podobał się .obj, tyle że brakowało jakiegoś symbolu W pliku .asm należało zmienić: start: na: _start: Podobno wg Masm'a dla pliku wyjściowego coff jest to wymagane. Jednak mam na dysku setki plików *.asm tak samo asemblowanych i linkowanych i jakoś dla nich nie jest to wymagane. No cóż, każdy może mieć swoje humory. Ważne, że zadziałało. > Skoro już sobie poradziłeś z kompilacją z HLA do EXE, to podaj tu > sposób/plik wsadowy, żeby Google zarchiwizowało dla potomności :) Operacje z *.hll do *.exe via Masm32: ____________________________ Build.bat C:\hla\hlaparse.exe -sm tut02.hla ____________________________ Powstaje plik .asm. Dodaję includy: ......... .model flat, syscall option noscoped include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\kernel32.inc includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\kernel32.lib includelib C:\hla\hlalib\hlalib.lib I dalej już w Masm. ____________________________ Asembly.bat @echo off set name=tut02 C:\masm32\bin\ml.exe /c /coff /Cp /Sc /Sg %name%.asm C:\masm32\bin\link.exe /SUBSYSTEM:WINDOWS,4.0 /entry:start %name%.obj ____________________________ Pozdrawiam Remek
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