Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : charger n octets en mémoire [ Processeurs / X86 ] (faresas)

lundi 16 avril 2007 à 23:45:52 | charger n octets en mémoire

faresas

Bonjour;
je veux savoir comment lire n octets depuis un flash disque puis les charger en mémoire en utilisant les intérruptions bios en mode réel (16 bit)?



mercredi 18 avril 2007 à 16:32:28 | Re : charger n octets en mémoire

Guilou34

Salut

Comme, à priori, on ne connaît pas la géométrie du disque, il faut utiliser la fonction 42h de l'int 13h

Cette fonction demande le numéro du disque sous la forme 128 +n  (n=0 pour le disque C ,1 pour D etc.

Le numéro du premier secteur qui va de 0 à nombre total de secteurs moins 1   

Le nombre de secteurs consécutifs à lire et l'adresse où ranger leur contenu

Ces informations sont transmises au bios à l'aide des registres et d'une table de la manière suivante:

AH=42h (numéro de la fonction)

DL=128+numéro du disque

SI= Adresse de la table

Cette table a la structure suivante :

Table db 16 ; taille de la table

 Db 0 ; réservé

   Db ? ;( nombre de secteurs à lire)

 Db 0 ; réservé

 Dw ? ;(offset du buffer)

Dw ? ;(segment du buffer

Dd ? ; Numéro du premier secteur
Est-ce suffisant?


mardi 24 avril 2007 à 14:10:44 | Re : charger n octets en mémoire

faresas

Salut
Merci avant tout pour votre réponse, mais j'ai une petite interrogation consernant le continue de registre DL?
Explication:
le registre DL doit contenir le numéro de lecteur en question(C: D: ...etc), mais le problème ici que je travail avec une flash disque USB et pas un disque dur, et les valeur 80h et 81h  ...etc disigne les partitions c: d: ...etc de disque dur et non pas du flash disque usb?

voila les conditions que je travail sous les quels pour vous donner une meilleur idée sur mon problème:

- j'ai un disque dur qui est dévisé en deux partitions C: et D:
- je veux modifier le programme de MBR (qui se trouve sur le secteur 1 de disque dur) pour qu'il puisse démarrer sur le flash disque USB.
- pour faire ça, il faut donc créer un programme puis l'installer sur le MBR.
- ce programme doit faire les étapes suivantes:
             - lire les premier 1024 octets qui contient le programme de       démarrage sur le flash disque usb.
             - les charger en mémoire dans une adresse bien définie
             - faire un jump vers l'adresse pour continuer l'exécution.

Problématique:
lors de démarrage, le BIOS détecte la présence de la clé usb, lui affecte une adresse unique(générallement entre FF80-FF9F ) et récupère tous les informations qu'il à besoin dans une zone mémoire que je ne sais pas son adresse ni sa structure.

je veux savoir s'il y a une interruption qui me permet de lire 1024 octet à partir de flash disque usb ou s'il est possible à travers les fonctions IN et OUT de l'assmbleur en utilisant les adresses du port usb(FF80-FF9F)?

merci.



mercredi 25 avril 2007 à 10:02:07 | Re : charger n octets en mémoire

Guilou34

Salut.
Il s'agit donc de charger un système à partir d'une clef Usb. C'est selon les cas d'une simplicité enfantine mais le plus souvent laborieux et parfois même carrément impossible.
 1. La clef doit être du type "bootable". Il en existe, par exemple chez Cruser   dont les "premiers "secteurs"  sont placés d'office en lecture seul. Un test avec diskedit de chez Borland montre que ces clefs non seulement négligent l'ordre d'écriture mais ne se donnent même pas  la peine de le signaler par un message d'erreur.
2. Le Bios doit "connaître" le  port USB. Mais cette connaissance est souvent très limitée: il accepte (événtuellement) les clefs de type floppy ou Omega Zip. Mission impossible si la clef a été formatée avec Windows donc avec un MBR dans le secteur 0  alors que le bios veut le traiter comme le boot d'une disquette. 
 3. Un premier pas qui me parait essentiel c'est de pouvoir utiliser dans Msdos,  à l'aisde d'un pilote  *.sys approprié  une clef  recconue par Windows. Par exemple avec   device=usbaspi.sys. Mais il arrive que ce pilote détecte la clef, parfois en y mettant le temps,  lui attribue une lettre et que cependant la commande " dir n: " échoue totalement.
4. Une explication des problèmes rencontrés se trouve peut-être dans le fait que l'USB se défini par un empilement de couches . marérilles et logicielles.  Si les connecteurs et cables, niveaux et formes des signaux  sont parfaitement définis il faut encore que le PC et la Clef utilisent le même protocole.
5. Personnellement j'ai fini par adopter  la solution la plus simple: changer de carte mère pour une plus récente dont le bios permet de choisir n'importe quel périphérique et utiliser une clef accompagnée d'un mini CD contenant les utilitaires nécessaires (JetFlash par exemple). Pour des raisons de copyright il faudra lui signaler où trouver le système à utiliser.
Je serais heureux que les différents points donnent lieu à discussion ou approfondissement. 

Amicalement

mercredi 25 avril 2007 à 12:23:35 | Re : charger n octets en mémoire

Guilou34

Un  point que j' ai oublié: la clef doit être directement connecté au PC  ou alors il faut que le bios puisse géré le Hub.       



Cette discussion est classé dans : octets, mémoire, charger


Répondre à ce message

Sujets en rapport avec ce message

faire un dump mémoire en asm [ par olly60 ] comment peut on faire un dump mémoire en assembleur?? je bloque dessus étant débutant dans ce language!! j'ai seulement besoin de l'algo svpmerci Adresse mémoire d'une chaine [ par moffer ] Bonjour,Je veux pointer sur le premier caractère de ma chaine. Lorsque je compile le code suivant :SEGMENT DATAchaine db 'Hello$'SEGMENT TEX Erreur bizzar [ par Vermifuge ] J'ai programmé une DLL de gestion mémoire sous windows, et j'ai un problème vraiment étrange. Lorsque j'allou de la mémoire ça marche, sauf à un momen [NEWB] allocation de mémoire ? [ par Cow_B ] Salut à tous !Je commence tout juste l'assembleur, je n'ai pas encore écrit dix ligne que je me retrouve coincé.... Je voudrais faire une réservation Décaler les octets d'un registre [ par Kephuro2 ] Bonjour à tous !Je m'adresse à vous car j'ai un petit souci !Je vous explique vite fait. Donc j'ai un registre (eax) qui a pour valeur : 0000825C, j'a Charger un noyau [ par Stormy ] Je voudrais charger le deuxième segment d'une disquette pour lancer un noyau OS rudimentaire. Sur le premier segment, j'inscris donc le code de charge Noyau d'OS supérieur à 512 octets -> plantage :( [ par Bub325 ] Bonjour,J'ai un problème avec logiciel que j'essaye de faire, j'ai un bootloader qui se lance au boot du PC (sur une disquette), qui charge en mémoire Problème lecture adresse mémoire [ par xmaz57000 ] Voilà je viens de recevoir un ordinateur industriel qui dispose en standard de 8 entrées TOR.Malheureusement, il n'y a aucun driver qui permet de récu ecriture en mémoire [ par TRAX44 ] Bonjour, c'est un truc tout bete. Je cherche a écrire 1Ko de data en mémoire à une adresse précise (000:000).   Parmi les nombreuses méthodes existant Charger un programme en sachant son secteur [ par bloom1 ] Bonjour, moi j'essaie de charger une ligne de commande (pour un OS que je fais) et là j'essaie de charger une ligne de commande qui se situe sur le 3e


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,187 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.