Pb d'interruptions

sollda Messages postés 2 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 13 octobre 2003 - 10 oct. 2003 à 23:13
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 13 oct. 2003 à 09:58
Bonjour à tous,

j'ai écrit un petit prog de test en asm (compilé avec ML.EXE), dont voici le code :

-------------------
include winapi.inc

.data
mess db "Bonjour, comment allez-vous?",0

.code
start:
mov edx, offset mess
push eax
mov ax, 0900h
int 21h
pop eax
int 20h
end start

-------------------

Lorsque je l'execute sous wondows xp, windows affiche une messagebox avec le message suivant:

---------------------
affiche.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru.
---------------------

et il me demande aussi si je veux le debugger (visual studio), si je repond oui, le dasm s'ouvre et affiche le message suivant:

---------------------
Unhandled exception in affiche.exe: 0xC0000005: Access Violation.
---------------------

Les interruptions ne fonctionnent pas, j'en ai testé d'autres comme la 3Ch (creation de fichier), la 3Eh (fermeture de fichier), 40h (écriture dans un fichier) et elles me donnent le meme message d'erreur, pourquoi ?

Merci et A+

Sollda

4 réponses

Chrishka Messages postés 21 Date d'inscription dimanche 17 août 2003 Statut Membre Dernière intervention 27 mars 2004
10 oct. 2003 à 23:45
C'est comme ça, les fonctions de bases ne sont plus implémentées sous forme d'interruptions sous windows, mais sous forme d'un ensemble de fonctions, l'API win32. Essaye ça, tu verras ça marchera bcp mieux.

-------------------
include windows.inc
include kernel32.inc
include user32.inc

includelib kernel32.lib
includelib user32.lib

.data
mess db "Bonjour, comment allez-vous?",0

.code
start:
invoke MessageBox,NULL,addr mess,addr mess,MB_OK
invoke ExitProcess,0

-------------------

J'ai pas mis les path dans les includes, à toi d'adapter
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 oct. 2003 à 11:33
Pour la precision elles sont toutes implémentées mais NON accessibles car 'detournees' et comme le dit Chrishka il faut se servir de l'API win32 qui lui seul est autorise a se servir des interruptions car il est en ring0. Voila qui garantit la stabilite du systeme.
BruNews, ciao...
0
sollda Messages postés 2 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 13 octobre 2003
13 oct. 2003 à 09:38
Salut BruNews et merci pour ta réponse.

je sais que cela fonctionne avec les APIs. Mais, elles n'utilisent pas les interruptions, en arrière plan ? Et, windows doit interdire l'acces direct aux interruptions du dos et du bios ?

Sollda, A+
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 oct. 2003 à 09:58
Windows utilise bien entendu les interruptions bios ou autres mais au chargement elles sont detournees et il les intercepte.
Moralite: se servir de son api.
BruNews, ciao...
0
Rejoignez-nous