Thread View: pl.comp.lang.asm
15 messages
15 total messages
Started by Wiktor S.
Sun, 29 Jan 2006 21:45
[x86] problem z przełączaniem zadań przez CALL/IRET
Author: Wiktor S.
Date: Sun, 29 Jan 2006 21:45
Date: Sun, 29 Jan 2006 21:45
24 lines
1607 bytes
1607 bytes
Mam problem z przełączaniem zadań za pomocą instrukcji CALL i IRET. Przełączanie poprzez JMP działa prawidłowo, tak samo wywołanie zadania instrukcją CALL. Niestety, próba powrotu przez IRET kończy się wyjątkiem. Przykładowy program, skrócony do minimum: http://wswiktor.fm.interia.pl/a.zip (kompilacja: tasm/tlink, testowane pod MS VirtualPC + DOS) linie 195 i 330 - dwa sposoby przełączania, jeden z komentarzu. Gdy nie ma błędu program powinien wyświetlić FFFF i gwiazdki. W przypadku wyjątku wyświetla: nr_wyjątku CS:EIP | EFLAGS | kod_błędu Gdy program działa w trybie chronionym, rejestr ES wskazuje na pamięć ekranu. Mam nadzieję, że ktoś obeznany mi pomoże... -- Azarien
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Lopez
Date: Mon, 30 Jan 2006 06:49
Date: Mon, 30 Jan 2006 06:49
27 lines
1844 bytes
1844 bytes
Użytkownik "Wiktor S." napisał w wiadomości... > Mam problem z przełączaniem zadań za pomocą instrukcji CALL i IRET. > Przełączanie poprzez JMP działa prawidłowo, tak samo wywołanie zadania > instrukcją CALL. Niestety, próba powrotu przez IRET kończy się > wyjątkiem. I prawidlowo, instrukcja iret sluzy do powrotu z procedury obslugi przerwania, w twoim przypadku powinno byc chyba po prostu ret. > Gdy nie ma błędu program powinien wyświetlić FFFF i gwiazdki. > W przypadku wyjątku wyświetla: > > nr_wyjątku CS:EIP | EFLAGS | kod_błędu To napisz chociaz konkretnie co wyswietla, jak masz podany cs:ip to mozesz pokusic sie o deasemblacje kodu i sprawdzenie na jakiej instrukcji sie wyklada. PS. Po co robic takie obejscia w stylu db 9ah..., powinno zadzialac po prostu call 64:0 albo jmp 64:0, a do testowania bardziej sie chyba nada bochs, http://bochs.sourceforge.net/ -- Pozdrawiam Lopez
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Wiktor S.
Date: Mon, 30 Jan 2006 11:19
Date: Mon, 30 Jan 2006 11:19
38 lines
2253 bytes
2253 bytes
>> Mam problem z przełączaniem zadań za pomocą instrukcji CALL i IRET. >> Przełączanie poprzez JMP działa prawidłowo, tak samo wywołanie >> zadania instrukcją CALL. Niestety, próba powrotu przez IRET kończy >> się wyjątkiem. > I prawidlowo, instrukcja iret sluzy do powrotu z procedury obslugi > przerwania, w twoim przypadku powinno byc chyba po prostu ret. Nie, Zgodnie z dokumentacją, jeśli przez call wywołano zadanie, iret powróci do poprzedniego. > To napisz chociaz konkretnie co wyswietla, jak masz podany > cs:ip to mozesz pokusic sie o deasemblacje kodu i sprawdzenie > na jakiej instrukcji sie wyklada. Wyjątek 0D na instrukcji iret. > Po co robic takie obejscia w stylu db 9ah..., Bo tasm (w przeciwieństwie do nasma) jest porąbany i wszelkie kombinacje z "call 64:0", call [64:0], call far ..., call dword ptr ... itd. kończą się albo komunikatem "illegal immediate", albo "near call to different cs", albo inną instrukcją, niż o którą chodzi. Niestety, jestem tu skazany na tasma. > powinno zadzialac po prostu call 64:0 albo jmp 64:0, Nie przechodzi. > a do testowania bardziej sie chyba nada bochs, > http://bochs.sourceforge.net/ Dlaczego bardziej? Bochs jest dużo wolniejszy, bo emuluje procka programowo. -- Azarien
Re:
Author: Rat Without Tail
Date: Mon, 30 Jan 2006 14:11
Date: Mon, 30 Jan 2006 14:11
29 lines
2167 bytes
2167 bytes
Grzeczna odpowiedź do listu Wielce Szanownej Pani / Szanownego Pana „Wiktor S.”. >> To napisz chociaz konkretnie co wyswietla, jak masz podany cs:ip to >> mozesz pokusic sie o deasemblacje kodu i sprawdzenie na jakiej >> instrukcji sie wyklada. > Wyjątek 0D na instrukcji iret. Czyli #GP, tak? Możliwe, że stos jest uszkodzony, czy też nie są odpowiednie poziomy uprzywilejowania, albo zadanie zajęte :) może flaga NT wyczyszczona. Super skomplikowane wyjaśnienie, które wszystko opisuje jest w drugim tomie podręcznika procesora - opis instrukcji IRET - gdzie jest są również wymienione przypadki wystąpienia #GP(0) i #GP(selector). >> Po co robic takie obejscia w stylu db 9ah..., > Bo tasm (w przeciwieństwie do nasma) jest porąbany i wszelkie kombinacje > z "call 64:0", call [64:0], call far ..., call dword ptr ... > itd. kończą się albo komunikatem "illegal immediate", albo "near call > to different cs", albo inną instrukcją, niż o którą chodzi. Niestety, > jestem tu skazany na tasma. Możliwe, że tutaj podane rozwiązenie będzie skuteczne: http://community.borland.com/article/0,1410,19029,0.html Wasz -- : qo |) =@=N%_g=v=a=g_ed_e=c()=d=8= %IGn@8're: w8in ad : _x/ , H'%'a'h4'HA.XO'Xo'xo'xO.R %expo1ited: *-1 teh : | ng __%-- __ -- __ -- __ -- __%/by$qVerCo: &GooMee ^.__ -- __ -- % dbqr74oh4ekrbrgz.onion %/^v^'^ww^v^;_<E-O-F>
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Lopez
Date: Mon, 30 Jan 2006 17:07
Date: Mon, 30 Jan 2006 17:07
64 lines
3429 bytes
3429 bytes
Wiktor S. napisał(a): >>> Mam problem z przełączaniem zadań za pomocą instrukcji CALL i IRET. >>> Przełączanie poprzez JMP działa prawidłowo, tak samo wywołanie >>> zadania instrukcją CALL. Niestety, próba powrotu przez IRET kończy >>> się wyjątkiem. > > >> I prawidlowo, instrukcja iret sluzy do powrotu z procedury obslugi >> przerwania, w twoim przypadku powinno byc chyba po prostu ret. > > > Nie, Zgodnie z dokumentacją, jeśli przez call wywołano zadanie, iret > powróci do poprzedniego. Instrukcja ret spowoduje powrot do poprzedniego TSS tylko wtedy gdy jest to zadanie zagniezdzone, czyli jest ustawiony bit NT rejestru eflags. W przeciwnym wypadku adres powrotu jest pobierany ze stosu. Nalezy wiedziec ze przy JMP/CALL do TSS adres powrotu nie jest zachowywany na stosie zadania. Podobnie dziala iret z ta roznica ze przywraca takze stan rejestru flag, i jest przeznaczony do powrotu z procedur wywolanych przez tablice IDT, czyli przerwania i wyjatki. >> To napisz chociaz konkretnie co wyswietla, jak masz podany >> cs:ip to mozesz pokusic sie o deasemblacje kodu i sprawdzenie >> na jakiej instrukcji sie wyklada. > > > Wyjątek 0D na instrukcji iret. W twoim przypadku nie wiadomo co sie znajduje na szczycie stosu wiec powrot nastepuje w 'kosmos', stad wyjatek #GP. W tym wypadku proponuje Ci zamiast iret, call do dowolnie wybranego TSS, tak jak to rozwiazales z JMP. >> Po co robic takie obejscia w stylu db 9ah..., > > Bo tasm (w przeciwieństwie do nasma) jest porąbany i wszelkie kombinacje > z "call 64:0", call [64:0], call far ..., call dword ptr ... > itd. kończą się albo komunikatem "illegal immediate", albo "near call to > different cs", albo inną instrukcją, niż o którą chodzi. > Niestety, jestem tu skazany na tasma. Ja juz dawno porzucilem tasma, glownie dlatego, ze praktycznie nie jest tam mozliwe legalne mieszanie kodu 16 i 32 bitowego. Poczatkowo na rzecz nasm'a, potem byl fasm, a obecnie at&t. >> a do testowania bardziej sie chyba nada bochs, >> http://bochs.sourceforge.net/ > > Dlaczego bardziej? Bochs jest dużo wolniejszy, bo emuluje procka > programowo. Przy takim przykladzie raczej nie zauwazysz wplywu emulacji na szybkosc dzialania twojego programu. A na dodatek masz tam wbudowany debugger, ktory pozwoli Ci obejrzec stan procesora w dowolnie wybranym momencie. No i w przeciwinstwie do M$ VirtualPC jest darmowy. -- Pozdrawiam Lopez
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Wiktor S.
Date: Mon, 30 Jan 2006 21:46
Date: Mon, 30 Jan 2006 21:46
39 lines
2249 bytes
2249 bytes
> Instrukcja ret spowoduje powrot do poprzedniego TSS tylko > wtedy gdy jest to zadanie zagniezdzone, czyli jest ustawiony > bit NT rejestru eflags. Ale bit ten ustawia chyba właśnie call do zadania? (opieram się na podręczniku AMD64 Architecture Programmer's Manual) >>> Po co robic takie obejscia w stylu db 9ah..., >> Bo tasm (w przeciwieństwie do nasma) jest porąbany > Ja juz dawno porzucilem tasma, > Poczatkowo na rzecz nasm'a, potem byl fasm, a obecnie at&t. at&t jest straszne. Pół biedy z tymi wszystkimi % i $, gorzej że kod trzeba się nauczyć czytać od tyłu ;-) >>> a do testowania bardziej sie chyba nada bochs, >>> http://bochs.sourceforge.net/ >> Dlaczego bardziej? Bochs jest dużo wolniejszy, bo emuluje procka >> programowo. > Przy takim przykladzie raczej nie zauwazysz wplywu emulacji > na szybkosc dzialania twojego programu. Ale zauważam przy pisaniu i kompilacji, a dla wygody wszystko robiłem pod VPC. > No i w przeciwinstwie do M$ VirtualPC jest darmowy. na VirtualPC mam licencję. Ale, ale -- właśnie widzę, że program odpalony na "na żywo" jak i pod Bochsem działa prawidłowo... czyli to nie ja tylko M$ coś schrzanił w emulatorze? :-/ -- Azarien
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Lopez
Date: Tue, 31 Jan 2006 07:00
Date: Tue, 31 Jan 2006 07:00
62 lines
3533 bytes
3533 bytes
Użytkownik "Wiktor S." napisał w wiadomości... > > Instrukcja ret spowoduje powrot do poprzedniego TSS tylko > > wtedy gdy jest to zadanie zagniezdzone, czyli jest ustawiony > > bit NT rejestru eflags. > > Ale bit ten ustawia chyba właśnie call do zadania? > (opieram się na podręczniku AMD64 Architecture Programmer's Manual) No wlasnie nie zawsze, kiedy to ma miejsce nie potrafie teraz dokladnie powiedziec. Mozesz po bochsem to latwo sprawdzic, wystarczy ze zrobisz sobie w odpowiednim momencie petle w programie, i po uruchomieniu wyswietlisz stan rejestrow procesora. Co do manuali do dobrze by bylo abys zdobyl wczesniejsze wersje Intela. Jezeli dopiero poznajesz ta architekture latwiej bedzie Ci w nich odnalezc najwazniejsze informacje, bez zastanawiania sie czy to jakis zbedny do ficzer. > >>> Po co robic takie obejscia w stylu db 9ah..., > > >> Bo tasm (w przeciwieństwie do nasma) jest porąbany > > > Ja juz dawno porzucilem tasma, > > Poczatkowo na rzecz nasm'a, potem byl fasm, a obecnie at&t. > > at&t jest straszne. > Pół biedy z tymi wszystkimi % i $, gorzej że kod trzeba się nauczyć > czytać od tyłu ;-) Trzeba byc elastycznym, jak sie zna kilka jezykow to jeden wiecej nie robi roznicy, a na unixach to jest niestety standard. Co prawda nasm i fasm tez dziala na linuxie, ale nasm niestety nie jest juz rozwijany i obsluguje tylko x86, fasm dodatkowo x86-64. > >>> a do testowania bardziej sie chyba nada bochs, > >>> http://bochs.sourceforge.net/ > > >> Dlaczego bardziej? Bochs jest dużo wolniejszy, bo emuluje procka > >> programowo. > > > Przy takim przykladzie raczej nie zauwazysz wplywu emulacji > > na szybkosc dzialania twojego programu. > > Ale zauważam przy pisaniu i kompilacji, a dla wygody wszystko robiłem > pod VPC. > > > No i w przeciwinstwie do M$ VirtualPC jest darmowy. > > na VirtualPC mam licencję. Ale, ale -- właśnie widzę, że program > odpalony na "na żywo" jak i pod Bochsem działa prawidłowo... czyli to > nie ja tylko M$ coś schrzanił w emulatorze? :-/ Bo w VPC nie jest tak na prawde produktem stworzonym przez M$, to po pierwsze, a po drugie nie jest emulatorem. Posiada on szereg mechanizmow akceleracji, dzieki ktorym jest szybki, ale moze sie tez zachowywac dziwnie. IMHO zarowno VPC jak i VMware nie nadaja sie do testowania kodu na tak niskim poziomie. Poza Bochs'em jest jeszcze qemu, podobno jest troche szybszy, moze on Ci przypadnie do gustu. -- Pozdrawiam Lopez
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Derek Kuliński / takeda
Date: Tue, 31 Jan 2006 07:25
Date: Tue, 31 Jan 2006 07:25
12 lines
1656 bytes
1656 bytes
On Mon, 30 Jan 2006 22:46:23 +0100, Wiktor S. wrote: > at&t jest straszne. > Pół biedy z tymi wszystkimi % i $, gorzej że kod trzeba się nauczyć > czytać od tyłu ;-) A nie czasem właśnie Intel pisze od tyłu? :) -- ダレック takeda@IRCnet.EFnet, ICQ# 15827691, YahooIM: takeda64 http://ircwiki.takeda.tk - strona wiki poświęcona IRC
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: steensh
Date: Tue, 31 Jan 2006 07:34
Date: Tue, 31 Jan 2006 07:34
15 lines
1532 bytes
1532 bytes
Użytkownik "Wiktor S." <wswiktorSP@Mpoczta.fm> napisał w wiadomości news:drjd1e$95k$1@news.onet.pl... > Mam problem z przełączaniem zadań za pomocą instrukcji CALL i IRET. > Przełączanie poprzez JMP działa prawidłowo, tak samo wywołanie zadania > instrukcją CALL. Niestety, próba powrotu przez IRET kończy się wyjątkiem. jestem poczatkujacy w ASM i mam pytanie w zwiazku z tematem dlaczego w procedurze uzywasz IRET, a nie samo RET? czym sie roznia te dwa powroty? moze jest to zalezne od asemblera? ja uzywam TASM. dzieki i pozdrawiam -- steensh
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Bogdan (bogdro)
Date: Tue, 31 Jan 2006 10:31
Date: Tue, 31 Jan 2006 10:31
40 lines
3020 bytes
3020 bytes
steensh napisał(a): > > Użytkownik "Wiktor S." <wswiktorSP@Mpoczta.fm> napisał w wiadomości > news:drjd1e$95k$1@news.onet.pl... >> Mam problem z przełączaniem zadań za pomocą instrukcji CALL i IRET. >> Przełączanie poprzez JMP działa prawidłowo, tak samo wywołanie zadania >> instrukcją CALL. Niestety, próba powrotu przez IRET kończy się wyjątkiem. > > jestem poczatkujacy w ASM i mam pytanie w zwiazku z tematem > dlaczego w procedurze uzywasz IRET, a nie samo RET? czym sie roznia te > dwa powroty? moze jest to zalezne od asemblera? ja uzywam TASM. W normalnym świecie normalnych programów RET powraca do 16- lub 32-bitowego adresu zachowanego na stosie przez instrukcję CALL. RETF powraca do adresu zachowanego przez instrukcję CALL FAR, tj. segment i adres w tymże segmencie. IRET (interrupt return) działa jak RETF, ale dodatkowo zdejmuje ze stosu flagi procesora (EFLAGS), wkładane np. przez instrukcję INT (lub przez procesor, gdy otrzyma przerwanie sprzętowe). Spójrz tu: http://rudy.mif.pg.gda.pl/~bogdro/dos/a_kurs02.htm - pod koniec strony jest opisany stos oraz działanie instrukcji CALL, INT oraz krótko RET, RETF, IRET. Natomiast w świecie trybu chronionego, o którym mowa w tym wątku, wszystko się strasznie komplikuje. To, co robią te instrukcje nieco się zmienia, bo wszystko zależy od tego, dokąd chcemy wrócić. Sprawdzane są uprawnienia, typ "segmentu", do którego się odwołujemy. Procedura w tym kodzie to nie jest zwykła procedura, tylko inne "zadanie" (task), tak jak w wielozadaniowych, nowoczesnych systemach operacyjnych. Jej wywołanie poprzez CALL może wyglądać normalnie, ale procesor wykonuje wtedy o wiele więcej niż w normalnych CALLach w normalnych programach. A powrót z innego zadania realizuje się właśnie przez IRET. -- 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 Forum o programowaniu: http://programista.xorg.pl
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Remek
Date: Thu, 09 Feb 2006 21:52
Date: Thu, 09 Feb 2006 21:52
27 lines
1870 bytes
1870 bytes
Witam! > Nie, zgodnie z dokumentacją, jeśli przez call > wywołano zadanie, iret powróci do poprzedniego. Ciekaw jestem z jaką dokumentacją jest to zgodne. IRET służy do powrotu z przerwania (Interrupt RETurn), natomiast RET powoduje powrót do następnej po call inststukci, ale RET znajduje się w wywoływanej procedurze i nie ma potrzeby umieszczania jej na zewnątrz. Poza tym nie wiem jaką rolę miała by spełniać? Jeśli chodzi o stos w powiązaniu z call: - wywołanie wrzuca na stos adres powrotu - RET zdejmuje ten adres ze stosu i tam wraca po wykonaniu procedury. W takim przypadku nic złego nie może się dziać. Sprawdź pod debuggerem czy w wywoływanej procedurze nie znajdują się przypadkiem jakieś instrukcje psujące ramkę stosu. To niestety zdarza się w niedopracowanych funkcjach. Pozdrawiam! -- Remek
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Wiktor S.
Date: Fri, 10 Feb 2006 01:58
Date: Fri, 10 Feb 2006 01:58
57 lines
3334 bytes
3334 bytes
>> Nie, zgodnie z dokumentacją, jeśli przez call >> wywołano zadanie, iret powróci do poprzedniego. > Ciekaw jestem z jaką dokumentacją jest to zgodne. AMD64 Architecture Programmer's Manual, volume 2: System Programming, strona 375: "The hardware task-switch mechanism transfers program control to a new task when any of the following occur: - A CALL or JMP instruction with a selector operand that references a task gate is executed. [...] [...] - An IRET is executed while the EFLAGS.NT bit is set to 1 [...]" IA-32 Intel(R) Architecture Software Developer's Manual, volume 3: System Programming Guide, strona 6-3: "Software or the processor can dispatch a task for execution in one of the following ways: - A explicit call to a task with the CALL instruction. - A explicit jump to a task with the JMP instruction. [...] - A return (initiated with an IRET instruction) when the NT flag in the EFLAGS register is set." > IRET służy do powrotu z przerwania (Interrupt RETurn), > natomiast RET powoduje powrót do następnej po call > inststukci, ale RET znajduje się w wywoływanej > procedurze i nie ma potrzeby umieszczania jej na zewnątrz. > Poza tym nie wiem jaką rolę miała by spełniać? Nie rozumiem, kto mówił o umieszczaniu RET-a na zewnątrz procedury? > Jeśli chodzi o stos w powiązaniu z call: > - wywołanie wrzuca na stos adres powrotu > - RET zdejmuje ten adres ze stosu i tam wraca po > wykonaniu procedury. > W takim przypadku nic złego nie może się dziać. > Sprawdź pod debuggerem czy w wywoływanej procedurze > nie znajdują się przypadkiem jakieś instrukcje > psujące ramkę stosu. To niestety zdarza się w > niedopracowanych funkcjach. Jeżeli call powoduje przełączenie zadania, nie jest nic zapamiętywane na stosie, tylko w strukturze TSS zadania aktualnego, przechowującej stan procesora. Następnie odtwarzany jest stan wszystkich rejestrów z TSS nowego zadania. Tak więc jest to skok, ale z automatycznym zapamiętaniem i odtworzeniem wszystkich rejestrów. Po przełączeniu zadania możemy mieć już nawet zupełnie inny stos... W każdym razie, program taki jak napisałem działa bez problemu na Athlonie 1200, a nie działa tylko pod MS VirtualPC... -- Azarien
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Remek
Date: Mon, 13 Feb 2006 18:49
Date: Mon, 13 Feb 2006 18:49
34 lines
1576 bytes
1576 bytes
Witam!
> jeśli przez call
Nie analizowałem dokładnie programu, tylko zmieniłem
jn.:
call:
db 9Ah
dw 0
dw 64
.....................
task1 proc
mov byte ptr es:[1000],'*'
ret ; call/iret - tu sie wysypie
;db 0EAh ; jmp/jmp - a tu nie
;dw 0
;dw 56
task1 endp
I to działa, nie wysypuje się. Wyświetla inne
dane, ale pewnie tak ma być, jak pisałem nie
przyglądałem się dokładnie. Chodzi tylko o ret.
Pozdrawiam!
--
Remek
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Remek
Date: Sat, 04 Mar 2006 21:04
Date: Sat, 04 Mar 2006 21:04
30 lines
1840 bytes
1840 bytes
> Nie rozumiem, kto mówił o umieszczaniu RET-a na zewnątrz procedury? Sorry!! Nie wiem dlaczego doszedłem do takiego wniosku. Musiałem pomylić z czymś innym. Doszedłeś już przyczyny? Piszę po przeczytaniu kilku następnych wypowiedzi. Jedni piszą, że adres powrotu idzie przez stos ( wtym przypadku )inni wprost przeciwnie. Jak to jest naprawdę? Może ktoś kompetenty napisać dokładnie? Nie mogę obejrzeć w debuggerze, bo mój SoftIce wywala się na 16 bitach, wadliwa wersja programu, albo obsługa. > Ciekaw jestem z jaką dokumentacją jest to zgodne. > AMD64 Architecture Programmer's Manual, volume 2: > System Programming, strona 375: Mea culpa! Proszę o wybaczenie! Czasem piszę coś zbyt pochopnie. Pozdrawiam! -- Remek
Re: [x86] problem z przełączaniem zadań przez CALL/IRET
Author: Wiktor S.
Date: Mon, 06 Mar 2006 09:53
Date: Mon, 06 Mar 2006 09:53
15 lines
1648 bytes
1648 bytes
> Doszedłeś już przyczyny? Błąd występuje tylko w M$ VPC, widocznie bug w programie... ostatecznie zmodyfikowałem kod tak, by nie wykonywać felernej instrukcji. > Piszę po przeczytaniu kilku następnych wypowiedzi. > Jedni piszą, że adres powrotu idzie przez stos > ( wtym przypadku )inni wprost przeciwnie. W przypadku CALL powodującego przełączenie zadania, "adres powrotu" jest zapisywany nie na stosie, a w bieżącym TSS (Task State Segment). Adres powrotu zapisywany jest na stosie w przypadku CALL do podprogramu. -- Azarien
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