Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Čuvanje konteksta procesora pri pozivu interrupt-a (asm 286)

  • 4 odgovora
  • 7.412 pregleda

Najnovija ↓

Čuvanje konteksta procesora pri pozivu interrupt-a (asm 286) 25.06.2005. u 15:27 · pre 259 meseci #1
Imam nekoliko pitanja u vezi asemblera za 286. Interesuje me kako da "dohvatim" registre CS i IP iz prekidne rutine koju sam
definišem, odnosno, koje registre čuva hardver na steku i kojim redosledom?

U svom programu imam proceduru koja se izvršava prilikom prekida:

Code:
void interrupt interruptHandler();


koja se prevodi u asembler na sledeći način:

Code:
@interruptHandler$qv proc far
push ax
push bx
push cx
push dx
push es
push ds
push si
push di
push bp
mov bp,DGROUP
mov ds,bp
mov bp,sp
/////////////////////////////////
// ovde se nalazi telo procedure
/////////////////////////////////
pop bp
pop di
pop si
pop ds
pop es
pop dx
pop cx
pop bx
pop ax
iret
@interruptHandler$qv endp


Pomoću BP mogu da pristupim steku i na taj način pročitam kontekst procesora (ax, bx, ...bp), ali ne znam koliko registara i
koji se sve registri i kojim redom čuvaju na steku pre pozivanja procedure interruptHandler().
Re: Čuvanje konteksta procesora pri pozivu interrupt-a (asm 286) 17.08.2005. u 23:48 · pre 258 meseci #5
Eh da, da odgovorim kolegi na prvo pitanje.
Pre poziva interrupt funkcije na stek se stavlja PSW. Pri samom pozivu dolaze jos CS i IP (jer je procedura far), a onda naravno krece to sto si napisao, dakle pushovanje registara i telo funkcije. Pri povratku se popuju registri, kao sto znas, a IRET skine IS, CP i flegove i upise ih gde treba.

I ne zaboravi da u svakoj datoteci iz koje pozivas interrupt funkciju, deklarises tu funkciju kao interrupt, da bi prevodilac znao da treba da gurne flegove pre poziva. Ja sam zbog toga imao grdnih problema.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme