begin process at 2010 02 09 20:44:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Général

 > 

modification d'interruption au boot


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

modification d'interruption au boot

jeudi 1 novembre 2007 à 18:25:05 | modification d'interruption au boot

Yoha

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. Exemple de programme (fait sous Windows XP): 0CCE:0100 8CC8 MOV AX,CS 0CCE:0102 BB0000 MOV BX,0000 0CCE:0105 8EDB MOV DS,BX 0CCE:0107 A30202 MOV [0202],AX 0CCE:010A BB1501 MOV BX,0115 0CCE:010D 891E0002 MOV [0200],BX 0CCE:0111 CD80 INT 80 0CCE:0113 CD20 INT 20 0CCE:0115 B84109 MOV AX,0941 0CCE:0118 BB0F00 MOV BX,000F 0CCE:011B B90100 MOV CX,0001 0CCE:011E CD10 INT 10 0CCE:0120 B400 MOV AH,00 0CCE:0122 CD16 INT 16 0CCE:0124 CF IRET --> A Fin normale du programme Donc, pourriez-vous m'aider à gérer les interruptions au boot. Merci d'avance pour votre aide. Au bon artisan, l'outil importe peu, Yoha,
vendredi 2 novembre 2007 à 16:20:25 | Re : modification d'interruption au boot

Guilou34


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.

Amicalement.

vendredi 2 novembre 2007 à 17:29:52 | Re : modification d'interruption au boot

Yoha

Pour l'interruption 20h, effectivement, je l'ai laissé pour les tests sous debug. En principe, je la remplace par un saut sur lui-même. Le fait de faire: 0CCE:0100 8CC8 MOV AX,CS puis: 0CCE:0107 A30202 MOV [0202],AX ne me permet-il pas justement de donner le segment du code (7C00h) ? J'essaierais tout de même en remplaçant cette méthode générale par 7C00h.
vendredi 2 novembre 2007 à 18:09:08 | Re : modification d'interruption au boot

Guilou34

Réponse acceptée !

7C00h est une adresse pas un segment !
C'est à 0000:7C00 que ton module sera chargé et exécuté par le BIOS avec CS=0
Donc ton code sera:


0000:7C00 8CC8           MOV     AX,CS
0000:7C02 BB0000         MOV     BX,0000
0000:7C05 8EDB           MOV     DS,BX
0000:7C07 A30202         MOV     [0202],AX
0000:7C0A BB1501         MOV     BX,115
0000:7C0D 891E0002       MOV     [0200],BX
0000:7C11 CD80           INT     80
0000:7C13 CD20           INT     20
0000:7C15 B84109         MOV     AX,0941
0000:7C18 BB0F00         MOV     BX,000F
0000:7C1B B90100         MOV     CX,0001
0000:7C1E CD10           INT     10
0000:7C20 B400           MOV     AH,00
0000:7C22 CD16           INT     16
0000:7C24 CF             IRET

Le nouveau vecteur de l'int 80 sera  0:115 alors qu'il doit être 0000:7C15 (et pas 7D15 comme je l'ai écrit par erreur.

 

 

vendredi 2 novembre 2007 à 18:58:17 | Re : modification d'interruption au boot

Yoha

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 !
samedi 3 novembre 2007 à 11:06:53 | Re : modification d'interruption au boot

Yoha

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 ^^.


Cette discussion est classée dans : mov, interruption, bx, boot, 0cce


Répondre à ce message

Sujets en rapport avec ce message

probleme avec l interruption affichage de chaine [ par M0NTOYA ] bon voila mon probleme ,qd j utilse cette procedure(presentation) pour afficher une chaine de caractere presentation PROC PUSHA MOV AH,09h INT 21h POP probleme avec l interruption affichage de chaine [ par M0NTOYA ] bon voila mon probleme ,qd j utilse cette procedure(presentation) pour afficher une chaine de caractere presentation PROC PUSHA MOV AH,09h INT 21h POP petit probleme de debutant [ par freekc ] j'essaie de faire un ptit prog que lorsque l'on rentre son nom prenom etc . Il y est un recapitulatif qui se mette en dessous ms lorsque que le recapi pb d'affichage :s [ par rana ] bjrje voudrais savoir, comment faire pour afficher une chaine de caractère en faisant une boucle (en utilisant repne scasb) jusqu a arrive a une lett Ennoncés à corriger svp :-) [ par did2604 ] Bonjour à tous,Mon professeur m'a demandé de convertir les énoncés (en langage C) suivants en assembleur, quelqu'un aurait-il la gentilesse de me les Probleme de boot [ par DbD ] Bonjour,Alors je fais mon OS et j'ai des problème de boot a partir d'un disquette, sur certain pc ou quand le noyau depasse 40 secteurs ca boot plus rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa Aide affighage chiffre asm 8086 [ par MayouMX ] Bonjour a tous, je dois programmer un pong en assembleur et la je butte pour l'affichage des scores.J'ai créer un segment qui ressemble a ca :exemple pb affichage ligne [ par mat74 ] salut a ts voila j'ai fait une fonction pr faire des lignes , j'ai deciner un carre a 100,100 jusqu'a 200,200 et sa marche nickel mais ia un ptit pb q afficher bitmap 256 couleurs [ par mat74 ] salut,voila j'aimerai afficher un bitmap de 256 a l'ecran en mode 320*200*256 ( fonction 12h de l'interruption 10h )j'ai fais un prog qui d'abord ouvr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales