Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1346 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  Afficher une chaine de caractere au boot

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Afficher une chaine de caractere au boot

n°1431460
ganply
Posté le 25-08-2006 à 15:12:26  profilanswer
 

Bonjour à tous.
Je suis tout nouveau dans le monde de la programmation en asm, et je commence déjà à rencontrer quelque probleme :
j'ai codé un petit programme qui affiche un message et attend ensuite l'appuie sur une touche du clavier pour effectuer une action.
 
Mon but est qu'il soit autonome, donc j'utilise exclusivement des interruptions du BIOS.
 
Une fois compilé (j'utilise TASM) et linké, il s'execute trés bien sous windows.
 
Je l'ai copié sur le premier secteur d'une disquette pour qu'il se lance au boot, mais une fois lancé, il affiche des caracteres bizarre au lieu de mes phrases.
 
Je pense qu'il s'agit d'un probleme de segment ou d'offset mais je seche.
 
Quelqu'un peut m'aider ?
 
Mon code (je compile en .COM) :

Code :
  1. code segment use16
  2. assume cs:code
  3. org 100h
  4. debut:
  5. mov ax, cs   ;initialisation
  6. mov ds, ax
  7. mov es, ax
  8. ecrit macro text, long   ;macro pour récupérer la position du curseur et écrire à la suite
  9. mov ah, 03h
  10. mov bh, 0
  11. int 10h
  12. mov ah, 13h
  13. mov al, 1
  14. mov bx, 14
  15. mov cx, long
  16. lea bp, text
  17. int 10h
  18. endm
  19. ecrit message, 49
  20. boucle:
  21. mov ah, 00h   ;boucle pour tester la touche du clavier enfoncée
  22. int 16h
  23. cmp al, ' '
  24. jz fin   ;si on appuie sur ESPACE, le programme va à la fin, sinon il affiche "Fonction inconnu"
  25. ecrit erreur, 19
  26. jmp boucle
  27. fin:
  28. ecrit fini, 36
  29. mov ah, 00h
  30. int 16h
  31. int 19h
  32. message db "Bonjour",10,10,13,"Que faire ?",10,13,"- SPACE pour redemarrer",10,10,13
  33. erreur db "Fonction inconnue",10,13
  34. fini db "Merci d'avoir utilise ce programme",10,13
  35. code ends
  36. end debut


 
Merci.


Message édité par ganply le 25-08-2006 à 18:02:30
mood
Publicité
Posté le 25-08-2006 à 15:12:26  profilanswer
 

n°1432059
ganply
Posté le 27-08-2006 à 11:23:02  profilanswer
 

C'est bon j'ai trouvé, pour les intéressés : http://www.developpez.net/forums/s [...] p?t=201652

n°1432105
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2006 à 14:04:31  profilanswer
 

tu sais, la programmation 16 bits avec interruptions DOS, segments, et tout, c'est dépassé depuis un bon moment.... :sarcastic:


---------------
J'ai un string dans l'array (Paris Hilton)
n°1432157
ganply
Posté le 27-08-2006 à 17:54:35  profilanswer
 

Je sais, mais c'est toujours intéressant de l'apprendre.

n°1432158
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-08-2006 à 18:06:54  profilanswer
 

ah ? si tu le dis... je vois pas ce qu'il y a d'intéressant à apprendre un truc qui ne te serviras jamais, mais bon...


---------------
J'ai un string dans l'array (Paris Hilton)
n°1436198
db__
spécialiste de l'à peu près
Posté le 04-09-2006 à 12:18:39  profilanswer
 

Bonjour
Sur le 386, au démarrage, le processeur est en mode réel 16 bits. Il est donc nécessaire d'écrire un bout de code pour déclarer la GDT et l'IDT voir autre choses et passer ensuite en mode 32 bits.
Il se peut que depuis la méthode ait changé.
Si on n'a pas de changement de contexte à faire et que l'on soit déjà sous un système d'exploitation, la programmation 16 bits n'a pas grand intéret sauf pour les masochistes, d'autant plus qu'il est possible d'utiliser l'adressage vers du transfert 8 ou 16 bits si on veut en mode protégé.

n°1436214
bjone
Insert booze to continue
Posté le 04-09-2006 à 13:12:05  profilanswer
 

Harkonnen a écrit :

ah ? si tu le dis... je vois pas ce qu'il y a d'intéressant à apprendre un truc qui ne te serviras jamais, mais bon...


 
faire un tweaker intégré au bios :D

n°1452070
sociopath_​epitech
dont ask me why
Posté le 04-10-2006 à 13:23:18  profilanswer
 

si tu veut que ton programme s'execute au boot d'une machine, tu dois reasembler ton programme
avec une origine a 0
il marche sous dos car dos cree 100h octet avant de charger ton programme (contenant diverse choses... pour plus de doc, c'est la zone PSP, c'est le pourquoi du org 100h au debut des .COM)
et ton assembleur ajoute 100h a DS, ce qui fausse l'acces a tes donnees lorsqu'il est charger par le BIOS(le BOIS connait pas le PSP!! :-p)
si tu veux avoir une compatibiliter boot-dos tu pourrais par exemble inserer un caractere de signature dans ton programme et le comparer en dur dans ton programme, ainsi si la signature n'est pas verifier (donc si DS est decaler de 100h) tu pourras ratraper l'erreur par simple soustraction de DS.
 
m'enfin ce n'est qu'une suggestion personnel dans le cas ou ton programme n'est pas trop gros.
car un bootsecteur ne fait QUE 512 octets


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  Afficher une chaine de caractere au boot

 

Sujets relatifs
[VBA-E] Fonction rechercher et afficher le résultat dans l'UF[RESOLU] Afficher popup, variable php
ne pas afficher la barreConvertir un buffer recu par socket pour afficher un entier
centrer le text sur une edit+ un seul caractère sur l'editquelle expression régulière pour trouver un caractère précis ?
Afficher des infos dans un form à partir d'une BDAfficher une video (html/javascript)
affichage du caractere <Afficher le résultat de ma requete VBA (noob)
Plus de sujets relatifs à : Afficher une chaine de caractere au boot


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR