IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

[Tutoriel] Découverte de l'assembleur Intel avec NASM


Sujet :

Assembleur

  1. #61
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    J'ai des difficultés avec la ligne de code suivante : times 510-($-$$) db 0

    Alors j'ai compris ce que fait times, c'est à dire assembler l'octet 0 le nombre de fois indiqué.

    Ce que je n'ai pas compris c'est le signe $ et $$

    Alors je sais que lorsqu'on soustrait $$ à $ ça donne la taille de notre programme assemblé en octet, mais je me demande pourquoi et qu'est ce que ces signes séparément sont, j'ai regardé un peu la documentation mais ça m'a l'air trop abstrait pour que je puisse comprendre

    Le tutoriel dit ceci :

    $ : -l'adresse du dernier octet de code
    -l'adresse du début de la ligne de code courante


    $$ : -l'adresse du premier octet de la section
    -l'adresse de la première instruction de la section

    Mais c'est quoi l'adresse du dernier octet de code, à quoi ça correspondant concrètement

    Pareil pour l'adresse du premier octet de la section

  2. #62
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut Int 13H AH=00h est inutile ?
    Bonjour,

    Int 13H AH=00h est-il inutile sur une machine virtuelle comme VirtualBox comme le dit cette documentation ? lien-invalide
    Comme il ne s'agit pas d'une documentation officielle j'avais des doutes, mais constatant l'absence d'exemple pratique sur google, stackoverflow, chatgpt je peux affirmer que c'est vrai

    J'ai compris la théorie : Int 13H AH=00hRESET DISK SYSTEM Force le contrôleur à recalibrer les têtes d'entraînement (chercher la piste 0)

    Puis-je avoir une confirmation que Int 13H AH=00h est inutile sur machine virtuelle ou avoir un exemple concret et utile de Int 13H AH=00h. Un exemple codé en nasm sur un processeur fonctionnant en mode 16 BITS pour que je puisse comprendre en pratique, Int 13H AH=00h doit avoir une influence sur le code, si je le supprime cela provoque une erreur ou un changement

    Ce tutoriel lien-invalide utilise Int 13H AH=00h mais il n'a aucun impact sur le code, il ne sert à rien, au contraire j'ai besoin d'un exemple pratique avec une réelle utilité et impact pour Int 13H AH=00h

  3. #63
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 685
    Points : 43 745
    Points
    43 745
    Par défaut
    Tes liens sont invalides.

    int 0x13 ah=0 n'aura effectivement aucune utilité dans une VM. Si par contre ton code sera utilisé hors VM ultérieurement, c'est pertinent de le laisser.

    D'autre part, avec l'avènement des disques SSD, la fonction n'a plus vraiment d'utilité, et d'autant plus que l'int 0x13 n'est plus utilisée dans un OS moderne utilisant l'UEFI ou les fonctions BIOS en mode réel restent présentes pour rétrocompatibilité.

    Int 13H AH=00h doit avoir une influence sur le code, si je le supprime cela provoque une erreur ou un changement
    Je pense que le prob est ailleurs. Mais sans voir le code ....

  4. #64
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Merci de ta réponse chrtophe, tu viens de me débloquer

    Pour les liens :

    https://www.ic.unicamp.br/~celio/mc4...pts#int13h_00h
    https://esauvage.developpez.com/tuto...asm/amorce.asm

  5. #65
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Pourquoi il parle de 1GO ici pour la mémoire en mode réel : "Néanmoins, il fallait obligatoirement dépasser cette limite de 1 Go de mémoire, et quitter cette méchante façon d'adresser les octets."

    La limite pour le mode réel est de 1 MO non ?

    Dans le tutoriel il le dit : "Cette architecture permet d'accéder à 2**20 octets de mémoire vive, plus ou moins un. Ca fait 1 mégaoctet."

    Alors d'où sort ce 1 GO ?

    Tutoriel : https://esauvage.developpez.com/tuto...m/?page=page_8

    Partie : VIII-1-b. Le piège d'IBM

  6. #66
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 685
    Points : 43 745
    Points
    43 745
    Par défaut
    La limite pour le mode réel est de 1 MO non ?
    Ce n'est pas le mode réel qui limite la RAM accessible mais la taille des bus d'adresses du CPU.

    Sur le 8086, c'était bien le cas. Mais c'était dépassé avec l'EMS, les bribes de la pagination sans MMU.

    Tous les processeurs x86 supérieurs au 8086 démarrent en mode réel. Seul le mode protégé te permet de dépasser les 1 Mo et d'utiliser des registres de plus de 16 bits : ils correspondent au 16 bits de poids faible du registre correspondant exemple : ax correspond aux 16 bits de poids faible du registres eax 32 bits, les bits de poids fort n'étant accessible qu'une fois le mode protégé activé. Et c'est le même principe pour le 64 bits : eax correspond aux 32 bits de poids faible du registre rax, les bits de poids fort étant accessible qu'une fois le long mode activé.

  7. #67
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2018
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Ce n'est pas le mode réel qui limite la RAM accessible mais la taille des bus d'adresses du CPU.

    Sur le 8086, c'était bien le cas. Mais c'était dépassé avec l'EMS, les bribes de la pagination sans MMU.

    Tous les processeurs x86 supérieurs au 8086 démarrent en mode réel. Seul le mode protégé te permet de dépasser les 1 Mo et d'utiliser des registres de plus de 16 bits : ils correspondent au 16 bits de poids faible du registre correspondant exemple : ax correspond aux 16 bits de poids faible du registres eax 32 bits, les bits de poids fort n'étant accessible qu'une fois le mode protégé activé. Et c'est le même principe pour le 64 bits : eax correspond aux 32 bits de poids faible du registre rax, les bits de poids fort étant accessible qu'une fois le long mode activé.
    Du coup d'où sort le 1GO indiqué dans le tutoriel ?

    Seul le mode protégé te permet de dépasser les 1 Mo
    Alors pourquoi indiquer 1GO à la place de 1MO lorsqu'il parle de passer en mode protégé pour dépasser cette limite ? Simple erreur ou je passe à côté de quelque chose ?

    Ce n'est pas le mode réel qui limite la RAM accessible mais la taille des bus d'adresses du CPU.
    Je n'ai pas affirmé que c'était le mode réel qui limite la RAM accessible mais que la limite pour le mode réel est de 1 MO

  8. #68
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 685
    Points : 43 745
    Points
    43 745
    Par défaut
    Alors pourquoi indiquer 1GO à la place de 1MO lorsqu'il parle de passer en mode protégé pour dépasser cette limite ? Simple erreur ou je passe à côté de quelque chose ?
    C'est une erreur. De toute façon à l'époque 1 Go de RAM était inenvisageable, je suis même pas sûr qu'on trouvait des disques dur de 1 Go.

    Le mode protégé n"existe qu'à partir du 80286 qui avait un bus de 24 bits donc 16 Mo adressables. Par contre, il était peut-être possible d'ajouter une MMU sous forme de circuit annexe permettant donc de dépasser la limite de 16 Mo via la mémoire virtuelle. Il me semble que le 386 est le 1er CPU Intel à embarquer une MMU sur son die, mais à vérifier (si le sujet t’intéresse).

  9. #69
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 963
    Points : 59 656
    Points
    59 656
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Citation Envoyé par Akainu_2018 Voir le message
    Pourquoi il parle de 1GO ici pour la mémoire en mode réel : "Néanmoins, il fallait obligatoirement dépasser cette limite de 1 Go de mémoire, et quitter cette méchante façon d'adresser les octets."

    La limite pour le mode réel est de 1 MO non ?
    Cette erreur est à présent rectifiée dans l'article. Merci de l'avoir signalée.

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/05/2008, 12h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo