🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #88

Re: [x86] problem z przełączaniem zadań przez CALL/IRET

#88
From: Wiktor S.
Date: Fri, 10 Feb 2006 01:58
57 lines
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-mail
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>

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