[ gaja_ns @ 27.05.2004. 11:30 ] @
Kako prilikom povratka iz prekida (iret) promeniti povratnu adresu kako se program ne bi vrteo u krug?
[ stalker @ 27.05.2004. 13:48 ] @
Da bi promenio povratnu adresu, trebace ti dosta akrobacija. Ne znam za sta radis, ali ces morati da znas specifikacije neke. Teorijski, na steku se, pri ulasku u prekidnu rutinu cuvaju registri,..., KAO i povratna adresa. E, sad, treba da znas gde na steku. Ukoliko je na vrhu, jedno (ili vise za celu adresu, opet zavisi od arhitekture) pop, malo aritmetike, zamena i push ce uraditi posao.
[ Bojan Kopanja @ 27.05.2004. 19:42 ] @
Hehe, ako se ne varam ( mada, mozda i gresim... ) to bi bio FTN, Novi Sad, E2, 11. zadatak iz assembler-a... Jesam li u pravu ?

E, pa fora je u tome sto ti u tom prekidu koji nastaje posle deljenja nulom trebas da pokupis povratnu adresu sa steka, i uvecas je za 2 ( toliko bajta zauzima naredba div ), a mozes i da uzmes offset neke labele ili neke naredbe posle div-a i onda jos trebas tu izmenjenu adresu da vratis na stek...

Evo ti primer procedure za prekid:
Code:

     div bx

......

prekid proc
     cli
     push ax
     push ds
     mov ax,@DATA
     mov ds,ax
     mov ax,0b800h
     mov es,ax
     lea si,poruka
     mov di,160*5   ; ovo ovde menjaj po zelji, to je polozaj sa koga pocinje stampanje poruke
     mov ah,Eh       ; ovo je boja poruke
     cld

znakovi:               ; pocetak stampanja poruke
     lodsb
     and al,al
     jz kraj_prekid
     stosw
     jmp znakovi
kraj_prekid:
     pop ds
     pop ax
     pop si                ; uzimas povratnu adresu sa steka   
     inc si                
     inc si                 ;uvecavas je 2x
     push si               ; vracas povratnu adresu na stek
     sti
     iret
prekid endp


Eto... Posle ovoga program ce nastaviti da se izvrsava od sledece naredbe posle div-a...

Srecno!
[ gaja_ns @ 28.05.2004. 12:53 ] @
Dobro de upravu si, hvala na odgovoru ali sam nasao laksi nacin. Samo po pozivu prekida push-jes BP i onda je adresa koju treba da menjas [BP+2].
Da nemas mozda 12 zadatak?
[ Bojan Kopanja @ 28.05.2004. 15:49 ] @
12a imam, juce sam ga odbranio, a 12b sam skoro zavrsio... Mada ti ne preporucujem uzimanje moga koda, posto ti garantujem da se sa tim kodom samo je mogu snaci... ( cak mi je na jednoj vezbi asistent rekao da ne moze da pohvata sta sam uradio, a posto je sve radilo super pisao je da sam odbranio vezbu )...

Good luck!