Przerwania procesora a plik .exe

0

Mam pewien problem przerwania procesora działają normalnie jak kompiluje sobie program napisany w asmie do dosowego pliku .com jak kompiluje do pliku .exe to program się wysypuje jak ma wywołać się przerwanie. Napisałem sobie pewną procedurę w assemblerze z przerwaniami procesora i połączyłem ją z programem napisanym w C++ noi też się kraszuje. Jak wywale te przerwanie i skompiluje to wszystko działa OK. tzn funkcja napisana w asmie prawidłowo wywołuje się w programie napisanym w C++. Co jest nie tak?? Istnieje w ogóle możliwość wywołania przerwania procesora jak mamy plik .exe? czy tylko jak mamy dosowy format pliku executowalnego .com

0

Program uruchamiasz oczywiście na DOS'ie, tak?
Windows nie pozwala na wykonywanie przerwań przez aplikację (kiedyś bodajże było NTVDM, ale od Visty tego nie ma).

0

Programy uruchamiam przez DosBoxa bo na 64 bitowym systemie 16 bitowe aplikacje nie działają(na xp 32 bit 16 bitowe aplikacje działają normalnie). MI chodzi o to żebym kliknął z poziomu windowsa na plik .exe który zawiera przerwania i się one wykonały ale nie wiem czy tak się da. Można to jakoś obejść??

0

Nie.

0

(Chyba?) da sie uzywac przerwan w Ring0.. ale to juz nie bedzie .exe, tylko .sys(sterownik) wiec ta odpowiedzi pewnei tez Cie nie satysfakcjonuje.

1

Wywoływanie przerwań w programach windowsowych jest zablokowane od Visty począwszy.
Programy DOS-owe to inna bajka.

Funkcje jądra systemu przeniesione zostały z INT 21/2F do instrukcji SYSENTER, więc w przerwaniach tak naprawdę nie ma już za bardzo czego szukać.

Lepiej powiedz, do czego ci te przerwania potrzebne..

0

Mhm dzieki Azarienowi dowiedzialem sie ze nie moge uzywac breakpointow na Windowsie...
(int 3 jakby ktos nie wiedzial)

0

Plik z rozszerzeniem *.exe może być zarówno dosowy jak i 32b - to dwa odmienne formaty.
Exec windowsowy to standardowy format PE z podziałem na sekcje.
Exec "dosowy" 16bitowy to plik wykonalny z podziałem na tzw segmenty ograniczone rozmiarem do 64KB.
Bez problemu plik typu EXE 16bitowy powinieneś uruchomić na 32b windowsie ( a takowy posiadasz ponieważ plik *.COM uruchomiłeś).
Szukaj błędu w kodzie. Słabo pamiętam 16b ale dawaj kod (ten w asmie) może coś zaradzimy.

0

w tak rozumianej 16bitowości nie ma mowy aby program DOSowy był 32b.

Było mnóstwo 32-bitowych programów i gier pod DOS-a (w sensie 32-bitowych rejestrow i 32-bitowego adresowania).
Odpowiedni kompilator (GCC, i to w najnowszej wersji 4.7.2 !) możesz ściągnąć tutaj: http://www.delorie.com/djgpp/
W czasach świetności DOS-a popularny był Watcom C++, i w nim powstawało większość gier pod DOS-a.

windowsowy program 16b ... o co chodzi ?

16-bitowy Windows to był 3.x i starsze. Takie programy pod 32-bitowym Windows 7 wciąż chodzą.

0

Azarien faktem jest, że w czasach królowania dosa nie wiedziałem co to jest program :) ale w punkcie co "pójdzie a co nie na windows 7" proszę bardzo tutaj masz kod który szybko teraz napisałem jest to programik który ... no wiadomo co ma robić wyświetla "x" i czeka na keyboard a następnie kończy załączam binarkę skompilowaną już i wcześniej odpaloną na windows 7 32b- bez problemu sobie idzie oto kod:

org 100h

        mov     ax, 03
        int     10

        mov     ah, 0Eh
        mov     al, 'X'
        xor     bx, bx
        int     10h

        xor     ax, ax
        int     16h

        mov     ax, 4c00h
        int     21h   

uruchom proszę na windows 7 32b.
Co do adresowania adrespace powyżej DOSowego 1MB to faktycznie nie robiłem tego nigdy i w tym punkcie to ja mogłem się mylić więc jeżeli tak jest jak piszesz - zwracam honor :)

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