logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Zawieszanie się programu w asemblerze DOS przy użyciu INT 21h 3Ch/3Dh - przyczyny?

AJOT74 26 Lis 2011 22:37 1041 8
REKLAMA
  • #1 10186741
    AJOT74
    Poziom 10  
    Posty: 116
    Pomógł: 1
    Ocena: 25
    Od paru lat w ramach rozrywki piszę sobie własny system w asemblerze. System ten jest oparty całkowicie na DOS, czyli startujemy go identycznie jak WIN 3.x -pisząc jeden z programów natrafiłem się na następujący problem:
    Program który piszę pozwala przeglądać i edytować pliki w postaci HEX, lecz zanim program to umożliwi to otwiera podany plik i dzieli go na pliki 64KB zapisując w katalogu tymczasowym systemu, podczas otwierania w szczególności dużych plików system po prostu mi się zawiesza.
    Do otwierania i zapisywania używam INT 21h z funkcjami 3Ch i 3Dh.
    Czy ktoś wie co może być przyczyną zawieszenia się programu?
    Warto zwrócić uwagę, że zawieszenie odbywa się w różnych miejscach.
    SS:SP zachowuje stabilność.
  • REKLAMA
  • #2 10187397
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    a w przypadku 3Dh jak ustawione jest AL? A jak operujesz na pliku? bezpośrednio na nim, czy wczytujesz do pamięci?

    Te różne miejsca zawieszenia są bezpośrednio związane z operacjami na pliku, czy nie?
  • #3 10187422
    AJOT74
    Poziom 10  
    Posty: 116
    Pomógł: 1
    Ocena: 25
    AX=3D80h
    Otwieram plik, czytam 2x po 32 KB do pamięci.
    Tworzę nowy plik i zapisuję 2x po 32 KB, zamykam utworzony plik.
    Zamykam otwarty plik do odczytu.
    Oczywiście cały czas pełna kontrola BX, DS:DX i SS:SP.
    Zawieszanie następuje zawsze na operacjach na tym właśnie pliku.
  • REKLAMA
  • REKLAMA
  • #5 10194914
    AJOT74
    Poziom 10  
    Posty: 116
    Pomógł: 1
    Ocena: 25
    Nie działa a wręcz gdy przy al=80h wieszał w granicach 75% do 90% to teraz pasek postępu poszedł mi tylko jakieś 10%.
    Mam jeszcze jeden problem związany z tymi plikami w momencie gdy je kasuję to też mi zawiesza system, ale w przypadku kiedy wykonuję komendę kasowania plików nie istniejących (korzysta z funkcji 41h dla 21h).
  • REKLAMA
  • #7 10198224
    AJOT74
    Poziom 10  
    Posty: 116
    Pomógł: 1
    Ocena: 25
    Dokładnie to botuje ten mój system z dyskietki startowej Win98 przy czym system umieszczony jest na dysku C z FAT32.
    Jednak zauważyłem ciekawostkę: w domu system używam na stacjonarce a do pracy biorę sobie system na fleszce i botujuę go z niej na laptopie (do botowania używam oczywiście zawartości dyskietki Win98) i na tym laptopie nie zawiesza mi się (przynajmniej przy kasowaniu tych plików bo przy otwarciu nie mam możliwości sprawdzić).
  • #8 10198338
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Cóż - pozostaje sprawdzić na innym komputerze... Niestety moja wiedza jest zbyt mała na dalszą pomoc :( Problem raczej dość dziwny i trudny - przynajmniej dla mnie - do zdiagnozowania.
  • #9 10198372
    AJOT74
    Poziom 10  
    Posty: 116
    Pomógł: 1
    Ocena: 25
    Jak pisałem, program sprawdzałem na mojej stacjonarce i laptopie, wykonywałem test pracy systemu na innych komputerach, ale niestety nie ten program.
    Dziękuję za zainteresowanie...

Podsumowanie tematu

✨ Użytkownik rozwija własny system operacyjny w asemblerze na bazie DOS, napotykając problem zawieszania się programu podczas otwierania i edytowania dużych plików HEX. Operacje te są realizowane za pomocą przerwań INT 21h z funkcjami 3Ch i 3Dh. Zawieszenia występują w różnych miejscach, a użytkownik kontroluje rejestry BX, DS:DX oraz SS:SP. Po próbach z różnymi ustawieniami AL, problem nadal występuje, a dodatkowo system zawiesza się podczas kasowania plików. Użytkownik zauważa, że na laptopie z systemem uruchamianym z dyskietki Win98 problem nie występuje, co sugeruje, że może to być związane z różnicami w sprzęcie lub konfiguracji. Inni uczestnicy dyskusji sugerują sprawdzenie ustawień AL oraz testowanie na różnych komputerach.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA