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 :

Petit programme pour débutant


Sujet :

x86 16-bits Assembleur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Petit programme pour débutant
    Bonjour,
    je viens de commencer tout juste l'assembleur et on me demande d'écrire le programme suivant;

    1.Chargement de l'octet 0x10h dans la case mémoire DS:BX en mettant BX au préalable à 0x200h;
    2.Chargement du nombre 0x2F0h dans le registre AX ;
    3.Division du contenu du registre AX par celui de la case mémoire DS:BX en utilisant la fonction DIV ;
    4.Multiplication du contenu du registre AX par celui de la case mémoire DS:BX en utilisant la fonction MUL ;
    5.Recopie du résultat dans la case mémoire située après celle(s) qui stocke le nombre de départ.

    Je ne comprends absolument rien, je suis désespérée...
    Pourriez-vous m'aider s'il vous plait?
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonjour,

    Merci de prendre connaissance des règles du forum assembleur. Contrairement aux autres langages, chaque famille de micro-processeurs a un assembleur qui lui est propre, et il est donc impératif de connaître la machine sur laquelle tu travailles. En l'occurrence, il semblerait que tu travailles sur PC, sur 8086, en mode réel 16 bits (cas le plus courant).

    1.Chargement de l'octet 0x10h dans la case mémoire DS:BX en mettant BX au préalable à 0x200h;
    Vois du côté de mov.

    2.Chargement du nombre 0x2F0h dans le registre AX ;
    Même chose.

    3.Division du contenu du registre AX par celui de la case mémoire DS:BX en utilisant la fonction DIV ;
    4.Multiplication du contenu du registre AX par celui de la case mémoire DS:BX en utilisant la fonction MUL ;
    La réponse est dans la question.

    5.Recopie du résultat dans la case mémoire située après celle(s) qui stocke le nombre de départ.
    Encore « mov ».

    Tu peux télécharger le manuel officiel ici :
    http://www.intel.com/design/intarch/manuals/243191.htm

    Sinon, dis-nous exactement où tu es et ce que tu as déjà écrit jusqu'ici.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,
    Merci pour vos pistes.
    Je vais travailler ça.
    Bonne soirée

  4. #4
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    trop facile ma petite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mov bx,200h
    mov byte[bx],10h
    mov ax,2f0h
    div [bx]
    mul [bx]
    mov [bx+1],ax
    mais franchement, ce programme ne sert strictement à rien.
    pas etonnant que l'assembleur fasse aussi peur aux etudiants.

    la division par 10h, peut etre faite par un decalage à droite de 4 bits

    SHR ax,4

    la multiplication par 10h, c'est un decalage à gauche

    SHL ax,4

    mais faire ces deux choses à l'affilée, ça revient à ne rien faire.

  5. #5
    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 : 48
    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 : 1 905
    Points
    1 905
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    shr ax,4
    shl ax,4
    bien si, ça peut servir, ça remet à 0 les 4 bits de poids faible
    comme un
    Oui, je sais... je fais rien qu'à embrouiller le débutant qui a posé sa question

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    SHR permet de diviser par une puissance de deux les entiers non signés et par conséquent les entiers signés positifs. En effet, après le décalage, les bits de gauche sont remplacés par des zéros. Or les entiers négatifs doivent être précédés de uns.
    Il est de ce fait plus prudent d'utiliser l'instruction SAR (décalage arithmétique vers la droite) lorsqu'on manipule des entiers signés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            mov     ax,-123         ; AX = FF85h = 65.413
            shr     ax,1            ; AX = 7FC2h = 32.706
     
            mov     ax,-123         ; AX = FF85h = -123
            sar     ax,1            ; AX = FFC2h = -62
    Quant au décalage de plus d'un bit, un processeur 8086 ou 8088 nécessite le registre CL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    .8086
            mov     cl,4
            shr     ax,cl
    ; au lieu de l'instruction pour 80188, 80186, 80286 et suivants :
    .286C
            shr     ax,4

Discussions similaires

  1. Petit programme pour débutant
    Par Invité dans le forum Contribuez
    Réponses: 4
    Dernier message: 22/09/2017, 08h04
  2. Réponses: 1
    Dernier message: 09/06/2009, 14h49
  3. Nouveau programme pour débutant
    Par gregouz59 dans le forum Débuter
    Réponses: 4
    Dernier message: 02/06/2008, 17h45
  4. Petite aide pour débutant
    Par akrogames dans le forum Zend Framework
    Réponses: 4
    Dernier message: 23/01/2008, 15h49
  5. aide petit programme pour débutant
    Par kartp0rqx dans le forum C
    Réponses: 16
    Dernier message: 14/10/2005, 19h31

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