[ Jovovic @ 25.06.2005. 14:27 ] @
| 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().
|
[ daxx @ 11.08.2005. 16:30 ] @
Eh, taj projekat... :)
[ Vuk Nikolić @ 12.08.2005. 23:46 ] @
ne bi da se pravim pametan, ali koristi setjmp i longjmp.
ja sam njih koristio za projekat... imam samo 5-6 linija asemblera sve ukupno. (treba jos event da sredim)
[ daxx @ 17.08.2005. 22:42 ] @
Kako si uspeo da nabudzis setjmp i longjmp da cuvaju ax?
I jel treba mi da kompajliramo to za 8086 ili 286??
Pisi bre tamo na nasem forumu, vidis da pojma nemamo :)
OFF: Sta je sa daskom covece!?
[ daxx @ 17.08.2005. 22:48 ] @
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.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.