cs_Yoha
Messages postés10Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention 3 novembre 2007
-
1 nov. 2007 à 18:25
cs_Yoha
Messages postés10Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention 3 novembre 2007
-
3 nov. 2007 à 11:06
Bonjour, je me suis remis à l'assembleur (sous debug pour éviter les compilations) et j'ai modifié l'interruption 80h. Cela fonctionne très bien sous DOS lorsque mon programme est chargée à une adresse en 100h mais, après avoir fait "w cs:100 0 0 1" pour faire une disquette de boot, mon programme ne fonctionne pas. Après un peu de débogage, j'ai vu que l'erreur se produisait bien lors de l'appel à l'interruption. J'ai essayé avec 144h et 44h mais rien n'y fait.
Guilou34
Messages postés142Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention29 janvier 20161 2 nov. 2007 à 18:09
7C00h est une adresse pas un segment !
C’est à 0000:7C00 que ton module sera chargé et exécuté par le BIOS avec CS=0Donc ton code sera:<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Guilou34
Messages postés142Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention29 janvier 20161 2 nov. 2007 à 16:20
Pour Debug le secteur 0 est le premier secteur du DOS et ne permet pas d'accéder au premier secteur physique d'un disque ou disquette
Il faut utiliser l'int 13h pour ce faire.
De plus le bios lit le secteur 0 (physique) de la disquette de boot en 0:7C00 et saute à cette adresse. Dans ton cas, l'int 80h va pointer sur 0:115 et c'est le contenu de cette adresse qui va être exécuter c'est à dire n'importe quoi.
Il faudra donc au moins remplacer 115 par 7d15 pour que ton programme fonctionne tel quel.
A ceci près que l'int 20h étant une interruption Msdos et celui-ci n'étant pas encore chargé c'est aussi n'importe quoi qui sera effectué après IRET.
cs_Yoha
Messages postés10Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention 3 novembre 2007 2 nov. 2007 à 18:58
Mince, c'est sans doute ce qui me manquait... Dire que je n'avais pas vu ça ^^. Bon, je le teste et je dirais si cela fonctionne bel et bien. Merci en tout cas !
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Yoha
Messages postés10Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention 3 novembre 2007 3 nov. 2007 à 11:06
Oui, c'était bien cela. Après quelques essais j'ai réussit à faire un programme qui affiche les lettres A, B puis C, B l'étant par une interruption. Merci beaucoup de m'avoir aidé ! Il faudra que je lise plus attentivement désormais ^^.