«« ( Date ) »» // «« ( Thread ) »» // mips-nastava - 2003

Re: EnQueue

by Mihailo Velkovski
ponedeljak, 20. januar 2003 - 02:48.

> Ako se EnQueue blokira u slucaju da je red pun, u realnom sistemu ne
> postoji nacin da se ona odblokira, osim koriscenja multitaskinga koji
> bi u ovom slucaju bio veoma komplikovan.
>
> ...a prekid?
>
>
> To onda znaci da treba, otprilike, da izbacimo na displej poruku
> "Red pun, pritisnite taster da izazovete prekid" , zar ne?

Uh,

posto ste stigli do multitaskinga, moram i ja da se ukljucim
u diskusiju :)

Koliko vidim, niko od vas ne pise program namenjen windowsima,
pa problem mozete da resite na nekoliko nacina...

Dobar obicaj kod pisanja funkcija u asm-u je da neki flag (recim CF)
signalizira da li je funkcija regularno zavrsila posao. Ako postoji
vise vrsta gresaka, onga se u neki registar stavi broj (oznaka) greske,
ako je do nje doslo. Tako su napisani neki interapti na tvom PCu.

Mozes i da jednostavno PREKINES izvrsavanje funkcije EnQueue kada
se desi sporna situacija, kako ti je Gvozden sugerisao.

Ako bas hoces da "izazivas prekide" ... mozes da uradis recimo
sledecu stvar, koja ce ti uzgred usporiti program bar 2x :
napises malu funkciju koja proverava neku promenljivu u memoriji
i na odredjenu vrednost ispisuje neku poruku, menja bas tu i/ili
jos neke promenljive...
Sam zakljuci sta treba da radi.

Povratak iz funkcije sa IRET. Na pocetak stavis neku labelu.

U 2. ulaz IV tabele stavis seg:off adresu te labele, recimo
koriscenjem, cini mi se, f-ja 25h/35h int-a 21h.

Na pocetku programa postavis TF (na kraju skines).

Prirodnije je da maskiras jedan drugi interapt, pri tom ces
morati prvo da zapamtis njegovu adresu iz IV tabele , i da
skocis na nju na kraju svoje funkcije...

Pozdrav,
Mihailo.