Wywoływanie przerwań w Turbo Pascal

0

Na zajęciach z systemów operacyjnych mam napisać funkcję w turbo pascalu np.
Zaprezentuj działanie funkcji przerwania 21h kończącej działanie programu, odczytującej czas systemowy, datę systemową, zmieniającą bieżący katalog, zmieniającą nazwę pliku, tworzącą nowy plik, wysyłającą znak na ekran itp.

Niestety nawet nie wiem ja się za to zabrać, nic w wykładach nie ma ani w instrukcji, książka DOS 5 od środka dopiero leci do mnie z drugiego końca kraju.

Potrzebuję prostego schematu co i jak.

0

Klasycznie o złe rzeczy googla pytałem. Dla pewności jeszcze się zapytam czy to dobrze rozumiem.
Weźmy tą datę, wrzucam tam klasycznie dosa i zmienną do rejestrów, to do AH wrzucam to 2Ah wywołuję intr dla 21 i tych rejestrów i później mogę już na luzie odczytać z CX, DH, DL, AL wszystko?

0

Pozwolę sobie wykorzystać jeszcze ten temat.
Jak mam to tworzenie pliku to muszę ofset i segment zmiennej umieścić w DS i DX. Nazwa ma być w ASCIIZ więc zrobiłem sobie bufor jako tablicę od 1 do 64 typu byte i sobie w 1 komórkę wrzuciłem 66 jako literkę B a w drugą 0 aby zaznaczyć koniec nazwy pliku. Ale niestety toto nie działa, program się wykonuje ale plik nie powstaje a w AX mam 3h więc jest błąd jakiś.

program zad6;
uses
  dos, crt;
var
  rej: registers;
  buf: array [1 .. 64] of byte;

  procedure create;
  begin
    buf[1] := 66;
    buf[2] := 0;

    with rej do
    begin
      AH := $3C;
      DS := ofs(buf);
      DX := seg(buf);
      intr($21, rej);
      write(AX);
    end;
  end;

begin
  create;
  readln;
end.

sformatowanie kodu - fp

0

1.Wyzeruj cx
2.Kod błędu 3 to niepoprawna ścieżka.

0

Tak wiem, brak formatowania, ten radziecki soft turbo srulbo pascal nie ogarnia mi taba. Assemblera to tu chyba nie ma, zwykłe zmienne rejestrowe.
Skoro 3 to uwalona ścieżka to może problemem że nie podaję bezwzględnej ścieżki? Z tego co pamiętam turbo srulbo wymagał tego przy obsłudze plików. Ale patrząc na moje wypociny takie tworzenie bufora z nazwą jest poprawne? To wrzucanie kodów ascii do kolejnych komórek i wskazywanie końca ścieżki 0 jest poprawne? Nie mam w tej chwili możliwości sprawdzenia tego.

0

Owszem, jest assembler. Słowo kluczowe asm. Co to są zmienne rejestrowe?
Skąd ćwiczeniowiec wyczarował tak archaiczne zadanie? Przecież DOS umarł wraz w Windows Me, wcześniej przez prawie 10 lat (od W95) dogorywał. Powinien kazać w asm zrobić to samo, ale przez api NT.

0

A co my studenci możemy, musimy robić wszystko nie ważne jak bardzo starożytne. Jakby nawet wymusili wydrapywać kod na glinianych tabliczkach to trzeba.
A teraz wyjaśnię dla potomnych coby musieli się z tym gnieść jak te ścieżki się podaje.

var
tmp:string;
...
tmp:='c:\mniam.txt'+chr(0);
...
DS:=seg(tmp[1]);
DX:=ofs(tmp[1]);

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