Article View: pl.comp.lang.asm
Article #88Re: [x86] problem z przełączaniem zadań przez CALL/IRET
From: 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
Technical Details
Message-ID:
<dsgrvl$f8a$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mailReferences:
<drjd1e$95k$1@news.onet.pl> <drkctm$2s2$1@inews.gazeta.pl> <drkso7$81k$1@news.onet.pl> <drlh45$mo6$1@inews.gazeta.pl> <dsgdlj$9li$2@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail From: "Wiktor S." <wswiktorSP@Mpoczta.fm> Newsgroups: pl.comp.lang.asm Subject: Re: [x86] problem z przełączaniem zadań przez CALL/IRET Date: Fri, 10 Feb 2006 02:58:16 +0100 Organization: Onet.pl Lines: 59 Message-ID: <dsgrvl$f8a$1@news.onet.pl> References: <drjd1e$95k$1@news.onet.pl> <drkctm$2s2$1@inews.gazeta.pl> <drkso7$81k$1@news.onet.pl> <drlh45$mo6$1@inews.gazeta.pl> <dsgdlj$9li$2@inews.gazeta.pl> NNTP-Posting-Host: 155.168.wmc.com.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1139536693 15626 87.250.168.155 (10 Feb 2006 01:58:13 GMT) X-Complaints-To: usenet@news.onet.pl NNTP-Posting-Date: Fri, 10 Feb 2006 01:58:13 +0000 (UTC) X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2670 X-Sender: 63e3folRCjcGWUjNfLSN0w== X-Newsreader: Microsoft Outlook Express 6.00.2900.2670 X-Priority: 3 X-MSMail-Priority: Normal Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit