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

x86 16-bits Assembleur Discussion :

[8086] DB pour insérer une chaîne de caractères


Sujet :

x86 16-bits Assembleur

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [8086] DB pour insérer une chaîne de caractères
    Bonsoir à tous,

    Je voulais savoir si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d2 DB  48,'exemple de données',4CH
    voulait dire créer un tableau dont la première case contient la valeur 48 (en hexa?), la 2e contiendra toute la chaîne (ce qui me semble absurde) et la 3e contiendra la valeur 4C .
    De plus, tout au début de mon programme il est écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ASSUME DS:sdonnee,CS:scode
    Puis l'instruction
    Quelqu'un pourrait-il s'il vous plaît m'expliquer cette instruction ?

    Merci!

  2. #2
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2005
    Messages : 702
    Points : 2 019
    Points
    2 019
    Par défaut
    tu as tout compris pour le "tableau" défini par DB (c'est quoi qui te semble absurde ?)

    la commande ASSUME indique au compilateur que la valeur du registre segment correspond à sdonnee, ce n'est pas du code compilable.

    plus loin (en début de programme principal) les lignes
    mov ax, sdonnee ; place la valeur du segment sdonnee dans ax
    et tu dois avoir juste en dessous
    mov ds,ax ; qui initialise la valeur du registre segment de données à celle calculée par le compilateur

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    merci @Forthman pour ta réponse,
    Alors je t'explique; c'est la première fois de ma vie que je vois un programme assembleur(je débute)
    c'est quoi la valeur de sdonnee ça n'a pas été déclaré
    et pourquoi juste après MOV AX,sdonnee on fait MOV DS,AX je croyais qu'en faisant ASSUME DS:sdonnee c’était pour initialiser DS
    et puis en mettant toute une chaîne de caractères dans une case de tableau est ce qu'on met la chaîne elle même ou bien le code ASCII correspondant a chaque caractère ?

  4. #4
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2005
    Messages : 702
    Points : 2 019
    Points
    2 019
    Par défaut
    sdonnee et scode est défini quelque part dans ton programme (ça dépend du compilateur) (édit : et pas avec des valeurs, mais des définitions de segments)
    il faut différencier ce qui sert à la compilation et ce qui sert à l'exécution.
    Comme il y a plusieurs segments utilisables par le processeur (CS,DS,ES,SS...),
    ces directives permettent au compilateur de contrôler que le code pioche les données aux bons endroits

    pour la définition de "tableaux", si tu as l'habitude d'utiliser d'autres langages de programmation où il existe une
    multitude de type de données, en assembleur, tu as... des octets et c'est tout.
    c'est à toi de savoir combien d'octets prend une donnée de ton tableau.
    d'ailleurs, un tableau avec une seule valeur c'est une variable...

    les définitions ci-dessous sont identiques en mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    db "AB"
    db "A","B"
    db 65,66 ; oui, c'est de l'ASCII de base
    db "A",66
    dw 16961

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    je vois,merci!
    derniere question :
    dw 16961 correspond a db "AB" ?
    si oui, comment l'as tu calculé ?

  6. #6
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2005
    Messages : 702
    Points : 2 019
    Points
    2 019
    Par défaut
    oui, 16961 en décimal = 4241h
    42h = code ASCII de "B"
    41h = code ASCII de "A"
    comme cette valeur est sur 2 octets et que Ies processeurs intel placent le poids fort dans les adresses hautes (voir little endian : https://fr.wikipedia.org/wiki/Endianness )
    les octets semblent "inversés" par rapport à la lecture de la valeur 16 bits
    deux autres manières d'écrire ces deux octets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    db  41h,42h
    dw 4241h

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/04/2014, 23h00
  2. Réponses: 3
    Dernier message: 22/09/2012, 13h38
  3. Réponses: 3
    Dernier message: 17/08/2011, 14h40
  4. Créer un tableau à 2D et insérer une chaîne de caractères
    Par javamateur dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 18/03/2008, 10h16
  5. Problème pour exécuter une chaîne de caractères
    Par Pongo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 10h34

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