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

Re: Pitanje u vezi simulatora iz mips-a

by PMS
ponedeljak, 16. maj 2005 - 16:50.


Pozdrav
Pa kolega, imam isti problem pri pravljenju simulatora kao i ti. Ne znam
kako da vratim program u rezim rada STAND_BY u bilo kom trenutku. Da li si
ti to uspeo da resis i kako? Ili si resio zaobilaznim putem.Ja na kraju
pomisljam da imam mesta u programu koji proveravaju odredjeni uslov, pa na
osnovu toga se program vraca u STAND_BY rezim.

To je lako. Prvo labelom oznacis mesto gde ti pocinje standby rezim rada.
npr stby:

Ako to radis u prekidnoj rutini na steku se nalaze redom FLAGS, CS i IP
povratka, pa je sledeci nacin moguc.

PUSH BP
MOV SP, BP
....ovde kakav god zelis kod
pa tamo gde zelis da izmenis adresu povratka iz prekidne rutine (moze i
bliske ili daleke procedure postupak je isti)
pises

MOV WORD PTR [BP][-2], OFFSET stby
sto ce adresu povratka promeniti u adresu labele na kojoj ti pocinje standby
deo programa
Naravno moraces da izmenis i CS sa [BP][-4] ako ti je CS za rutinu i glavni
program razlicit.

posle IRET, RETF ili RET program nastavlja od labele stby.


Ja imam problem da uokvirim hardverske prekidne rutine za tajmer INT 08 i
tastaturu INT 09 tako sto napisem svoj kod,
zatim gurnem zastavice na stek PUSHF i izvrsim daleki poziv prekidne rutine.
Posle ovog za prekidnu rutinu stek izgleda isto kao i
da je stvarno izvrsen pregid FLAGS, CS, IP. Medjutim, ovo iz nekih razloga
ne radi. Mislim da ne radi u debuggerima zato sto su u pitanju hardwerski
prekidi koji je debbugeri neprekidno koriste (tajmer i tastatura), a da
negde u nastavku programa imam gresku koju iz razloga nefunkcionisanja
debuggera ne mogu da lociram.

Ognjen Milic