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

Jak użyć przerwań DOS w C++ do pobrania aktualnego czasu?

adasb 12 Wrz 2006 19:47 4173 7
REKLAMA
  • #1 3013409
    adasb
    Poziom 14  
    Posty: 150
    Pomógł: 2
    Ocena: 4
    Jak można wykorzystać przerwania dosa pisząc program w c++.
    Chodzi mi o pobranie np. aktualnego czasu komputera który bedzie wykorzystywany gdzieś w programie.
    Z góry dzieki za pomoc.
    Pozdrawiam
  • REKLAMA
  • #2 3014541
    vibrasphere
    Poziom 15  
    Posty: 134
    Pomógł: 11
    Ocena: 1
    Musiałbyś się uciec do wstawek asemblerowych, ale pod windowsem XP takich cudów jak instrukcja "int x" już się nie da zrobić.
  • REKLAMA
  • #3 3015184
    JanuszPulit
    Poziom 17  
    Posty: 175
    Pomógł: 14
    Ocena: 4
    adasb napisał:
    Jak można wykorzystać przerwania dosa pisząc program w c++.
    Chodzi mi o pobranie np. aktualnego czasu komputera który bedzie wykorzystywany gdzieś w programie.


    A po co ci takie dziwne rzeczy?? Era msdos minęła a do pobrania czasu nie potrzebujesz przerwań . Każda bibiloteka standardowa dla większości języków posiada funkcje zwracającą czas.
  • #4 3016006
    x3r
    Poziom 18  
    Posty: 126
    Pomógł: 32
    Ocena: 2
    Jeżeli już koniecznie musisz to tak robić to podpowiem, że dawniej korzystało się z funkcji oferowanych przez bios.h. Masz tu mały opis reszte znajdziesz sam na google

    http://rudy.mif.pg.gda.pl/~bogdro/dos/a_kurs10.htm

    Ale jeśli piszesz w przestrzeni użytkownika to, tak jak napisał poprzednik, lepiej uzyć nowszych metod.

    pozdrawiam
  • REKLAMA
  • #5 3016146
    adasb
    Poziom 14  
    Posty: 150
    Pomógł: 2
    Ocena: 4
    Bardzo dzieki za pomoc.
    Jestem początkujący w językach wyższego poziomu nie licząc Pascala.
    Aktualnie pisze programy na mikrokontrolery używając do tego asemblera i dlatego zastanawiałem się jak mogę wykorzystać przerwania wiekszego mikroprocesora jaki znajduje sie w komputerze. Uważam (może sie myle- poprawcie mnie) że wykorzystując przerwania możemy mieć kontrole nad samym procesorem i sterować wszystkimi parametrami sprzętowymi jakie on oferuje. Tzn. mieć kontrole nad wszystkimi peryferiami które są podłączone do procesora. Nie wiem czy dobrze kalkuluje ale myśle że tylko z poziomu asemblera można to osiągnąć. Mam więc pytanie czy takie mozliwości oferuje któryś z języków wysokiego poziomu np. C++, Delphi, Pascal itd.
  • #6 3016393
    MirekCz
    Poziom 35  
    Posty: 2220
    Pomógł: 330
    Ocena: 62
    Teoretycznie programy napisane w języku wysokiego poziomu oferują te same możliwości co programy w assemblerze, ale w praktyce pomiędzy Twoim programem a procesorem stoi jeszcze system operacyjny.
    Dobry system operacyjny nie może dopuścić Ciebie do sprzętu, ponieważ mógłbyś tym zakłócić pracę innych programów/całego komputera. Dlatego w nowszych systemach wszystko jest robione przez zbiór funkcji systemowych, które są dla Ciebie pewnym ograniczeniem
  • REKLAMA
  • #7 3016492
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    ...chyba żę sam sobie napiszesz system operacyjny najlepiej od poziomu samego bootloadera i będziesz korzystał jedynie z przerwań biosu - pełno o tym materiałó w sieci jest. Ale to tak tylko, na marginesie. :-)
  • #8 3018883
    x3r
    Poziom 18  
    Posty: 126
    Pomógł: 32
    Ocena: 2
    W zasadzie to dla chcącego system nie stanowi większego oporu. Pod win spod ring0 masz dużą kontrole, w linuksach (i innych systemach uniksowych) pisząc w kernel mode też w zasadzie mozesz wszystko a do tego masz zrobione konkretne api z którego mniej lub bardziej umiejętie możesz korzystać. Pomijam fakt, że trzeba uważać wtedy na wszystko co robisz ale to napewno doskonale wiesz. Plusami asemblera będą tu napewno totalna kontrola oraz mały rozmiar pliku wykonywalnego. Jednak jeśli chciałbyś napisać cos większego prostota składni oferowana przez wyżej wspomniane języki okaże się kluczowa.

    pozdrawiam

Podsumowanie tematu

✨ Dyskusja dotyczy wykorzystania przerwań DOS w programach C++ do pobrania aktualnego czasu systemowego. Wspomniano, że bezpośrednie wywoływanie przerwań DOS (np. instrukcji "int x") jest niemożliwe w nowoczesnych systemach operacyjnych, takich jak Windows XP, ze względu na ochronę sprzętu przez system operacyjny. Zamiast tego zaleca się korzystanie z funkcji standardowych bibliotek językowych, które udostępniają dostęp do czasu systemowego. Historycznie, w środowisku DOS można było używać funkcji z biblioteki bios.h do pobierania czasu. Programowanie na poziomie asemblera umożliwia pełną kontrolę nad sprzętem i przerwaniami, jednak w systemach wielozadaniowych dostęp do sprzętu jest ograniczony przez system operacyjny. W trybie jądra (kernel mode) systemów uniksowych lub w trybie ring0 Windows można uzyskać większą kontrolę nad sprzętem, ale wymaga to specjalistycznej wiedzy i ostrożności. Autor rozważał możliwość wykorzystania przerwań do kontroli peryferiów i procesora, jednak w praktyce języki wysokiego poziomu oferują ograniczony dostęp do sprzętu ze względu na warstwę systemu operacyjnego. Alternatywą jest napisanie własnego systemu operacyjnego lub korzystanie z asemblera w środowisku bezpośredniego dostępu do sprzętu.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA