Wstawki aseblerowe.

0

Witam!
Mam do zrobienia zadanie:
7. [1 punkty] Napisz program generujący błąd dzielenia przez zero4. W tym
programie przejmij przerwanie generowane przez wyjątek związany z tą
operacją. Napisz tak procedurę obsługi tego przerwania, aby sygnalizowa-
ła problem i „naprawiała” błąd nadając dzielnikowi wartość różną od ze-
ra.
Czy może mi ktoś wyjaśnić/napisać w pseudokodzie jak napisać ten wyjątek? Z przerwaniami radzę sobie bez większych problemów, ale nigdzie nie mogę znaleźć żadnego przykładu użycia tego wyjątku.
PS niekoniecznie muszą to byś wstawki, może być też typ registers

z góry dzieki

0

Dzielenie przez zero powoduje wywołanie przerwania INT 00. Więc potrzebujesz przejąć to przerwanie.

1

Można wstawić dowolne przerwanie za pomocą SetIntVec w pascalu,
Za błąd dzielenia odpowiada przerwanie 0
W pomocy Pascala jest przykład jak obłużyć przerwanie.

Skopiowałem z pomocy i zmieniłem numer przerwania na 0 -odpowiadające za błąd dzielenia
Teraz poniższy program powinien działać.
Znajdź odpowiedniki SetIntVec w assemblerze -możesz zmienić

 {GetIntVc.PAS}

 {Sample code for the GetIntVec and SetIntVec procedures.}
 {$C FIXED PRELOAD PERMANENT}

 { For Windows: }
 { uses WinDos, WinCrt; }

 uses Dos, Crt;

 var
   Int0Save : Pointer;
   a, b : Integer;
 {$F+,S-,W-}
 procedure PodzielonoPrzezZero; interrupt;
   begin
     WriteLn('Podzielono przez 0');
   end;
 {$F-,S+}
 begin
   a: = 1; b: = 0;
   GetIntVec(0,Int0Save);
   SetIntVec(0,Addr(PodzielonoPrzezZero));
   writeln('Press ANYKEY to exit');
   repeat 
    a: = a / b;
   until Keypressed;
   SetIntVec(0,Int0Save);
 end.
0

dzięki za pomoc, teraz już dam sobie radę:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1