Otevřít hlavní menu

Intr

Verze z 2. 10. 2012, 15:24, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)

Vykoná určené softwarové přerušení.

Deklarace
procedure Intr(IntNo: Byte; var Regs: Registers);     { Dos }
procedure Intr(IntNo: Byte; var Regs: TRegisters);    { WinDos }

kde:

  • IntNo je číslo softwarového přerušení(0..255)
  • TRegisters je záznam definovaný v jednotce WinDos


Režim
Windows, Reálný, Chráněný
Poznámky
IntNo je číslo softwarového přerušení(0..255). Registers je záznam definovaný v jednotce Dos; TRegisters je záznam definovaný v jednotce WinDos. Viz deklaraci typu Registers a deklaraci TRegisters.
Před vykonáním určeného softwarového přerušení naplní procedura Intr registry procesoru 8086 (AX, BX, CX, DX, BP, SI, DI, DS a ES) hodnotami ze záznamu Regs. Po dokončení přerušení se obsah registrů AX, BX, CX, DX, BP, SI, DI, DS, ES a Flags uloží zpět do záznamu Regs.
Abyste se vyvarovali chyb obecné ochrany při běhu pod standardním režimem Windows nebo pod chráněným Režimem DOSu, vždy inicializujte pole DS a ES záznamu TRegisters platnými hodnotami selektorů nebo tato pole nastavte na nulu.


Omezení
Nepoužívejte softwarová přerušení, která:
  • závisí na určitých vstupních hodnotách registru SP nebo SS
  • modifikují obsah registrů SP nebo SS při výstupu
V Turbo Pascalu 3.0 byla proměnná Regs uživatelsky definovaného typu. Od verze 5.0 a vyšších musí být Regs typu Registers z jednotky Dos.


Viz také
MsDos


Vzorový příklad

{Intr.PAS}
{Vzorový příklad pro proceduru Intr.}
{ Pro Windows: }
{ uses WinDos, WinCrt; }
uses Dos;
var
  date, year, month, day: string;
  regs: Registers;  { Pro Windows: TRegisters }
begin
  regs.ah := $2a;
  with regs do
  intr($21,regs);
  with regs do
    begin
      str(cx ,year);
      str(dh ,month);
      str(dl,day);
    end;
  date := month+'/'+day+'/'+year;
  writeln('Dnešní datum je ', date);
end.