kompustelnik Napisano Październik 30, 2007 Zgłoś Share Napisano Październik 30, 2007 Otóż IntToHex źle mi działa... ... var W: String; begin W:= IntToHex(Adres, 2); ... end; Zwraca mi wartość 3 cyfrową. Jak przeglądałem helpa Delphi to jest tam konkretny przykład i podane jest "IntToHex(..., 2)". Według ich założeń powinno działać dobrze. U mnie jest jakoś inaczej.. Wie ktoś co może być nie tak? Pozdrawiam! Pisze programy na zlecenia. Tanio! Delphi, Pascal. Kontakt: - (gg) 736483 - (email) kondor20@op.pl light92@o2.pl - Strona domowa Wszystko do uzgodnienia. Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Październik 30, 2007 Zgłoś Share Napisano Październik 30, 2007 A jak duża jest wartość zmiennej "Adres"? bo może większa niż 256. I przeczytałem, że druga zmienna to minimalna liczba znaków a nie, że się równa Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
kompustelnik Napisano Październik 30, 2007 Autor Zgłoś Share Napisano Październik 30, 2007 OOOooo FAK... Racja. Głupi błąd. Więc może ktoś mi wyjaśni pewną kwestię. Pliki COM są ładowane do pamięci pod adres 100h (256). Ja się bawię w komendę JMP(#$EB). Należy podać jeszcze adres. No to licze sobie z W adres. #$EB przyjmuje wartości poniżej 256. Jak możliwy jest skok pod ten adres skoro plik COM zaczyna się od 256? Sprawdzałem plik skompilowany NASM'em. I tam adres jest 236.. Jak mam policzyć adres dla JMP? Ewentualnie może znacie jakąś inną komendę podobną do JMP?(bardziej normalną) Pozdrawiam! Pisze programy na zlecenia. Tanio! Delphi, Pascal. Kontakt: - (gg) 736483 - (email) kondor20@op.pl light92@o2.pl - Strona domowa Wszystko do uzgodnienia. Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Październik 30, 2007 Zgłoś Share Napisano Październik 30, 2007 Nic nie czaje z tego co napisales. Napisz to tak aby mozna bylo cie zrozumiec. Jmp to skok bezwarunkowy do danego adresu, Moze to byc skok dlugi o ile sie nie myle. Czego tu nie rozumiesz ? Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
kompustelnik Napisano Październik 31, 2007 Autor Zgłoś Share Napisano Październik 31, 2007 No to po kolei: : z domowych zakamarków wytrzasnąłem starego(bardzo starego) kompa. Chodzi na DOS'ie. : no to pisze sobie własny dosowy kompilator. I robie procki, albo inaczej etykiety do ktorych mozna skakac poleceniem "goto"(w tym moim programie). GoTo robie za pomocą JMP. Opkod JMP to #$EB. I przyjmuje adres jedno bajtowy. 256 to już po wyżej jednego bajta. Więc napisałem prosty program w NASM'ie żeby po zdisassemblerowaniu zobaczyć jak tam jest zrobione JMP. I tam przyjęło adres EC(236). A przeciez pliki COM gdy są ładowane, wczytywane są pod adres 256(org 100h). Więc jakim cudem program działa dobrze jeśli skacze pod adres 236? To u góry to pierwsze pytanie. Drugie jest takie: Jak mam sobie policzyć adres dla JMP? Robiłem to w ten sposób: procedure WykonajGoTo(Skok: Integer); var S, A1, A2: String; begin S:= IntToHex(Skok, 4); A1:= Copy(S, 3, 2); A2:= Copy(S, 1, 2); Write(ComFile, #$EB, Chr(StrToInt(A1)), Chr(StrToInt(A2))); end; Powyższy kod jest zły, ponieważ Sam adres waży 2 bajty. Czy ktoś wie w jaki sposób moge sobie policzyć adres? Dodam jeszcze, że Skok > 256. Pozdrawiam! Pisze programy na zlecenia. Tanio! Delphi, Pascal. Kontakt: - (gg) 736483 - (email) kondor20@op.pl light92@o2.pl - Strona domowa Wszystko do uzgodnienia. Link do komentarza Udostępnij na innych stronach More sharing options...
KKKas Napisano Październik 31, 2007 Zgłoś Share Napisano Październik 31, 2007 Trzymaj JumpCalculatora ;-) JumpCalculator.zip ҉ Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Październik 31, 2007 Zgłoś Share Napisano Październik 31, 2007 po pierwsze primo i najwazniejsze pliki typu COM MUSZA byc full realokowane wiec wszelakie JMP odpadaja bo to jest bezwarunkowy skok do wskazanego adresu. O ile sie nie myle to podaje sie tam pelny adres 32 bitowy. w COM'ie powinienes wywolywac skoki bliskie (niestety nie pamietam mnemonikow do nich) takie ktore mieszcza sie w segmencie czyli max skok to 0xffff. Bardzo dawno w asmie nie pisalem i moze wrzucam tu bzdury (jak tak to niech ktos mnie poprawi) ale wydaje mi sie ze tak to wygladalo... Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
kompustelnik Napisano Październik 31, 2007 Autor Zgłoś Share Napisano Październik 31, 2007 Toster i tu się mylisz: (jakiś banalny przykład) org 100h start: ;walnij tekst mov ah, 09 mov dx, naPiS int 21h ;czekaj na klawisz mov ah, 07 int 21h jmp start ... To działa jak najbardziej poprawnie. No to nic.. Trzeba kombinować. Dzięki KKKas btw. Tylko troche nie o to mi chodziło Pozdrawiam! Pisze programy na zlecenia. Tanio! Delphi, Pascal. Kontakt: - (gg) 736483 - (email) kondor20@op.pl light92@o2.pl - Strona domowa Wszystko do uzgodnienia. Link do komentarza Udostępnij na innych stronach More sharing options...
kompustelnik Napisano Listopad 1, 2007 Autor Zgłoś Share Napisano Listopad 1, 2007 Sry za posta pod postem, ale powiadamiam, że problem został rozwiązany. Wszystko chodzi na JMP Dość wykosmonautowane to było Pozdrawiam! Pisze programy na zlecenia. Tanio! Delphi, Pascal. Kontakt: - (gg) 736483 - (email) kondor20@op.pl light92@o2.pl - Strona domowa Wszystko do uzgodnienia. Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.