Assembleur / Hexadécimal

Dedel_209 Messages postés 37 Statut Membre -  
 loupius -
Bonjour,

Voici un exercice que je dois réaliser et j'aurais besoin de votre aide parce que je ne comprend pas.

1. Donner la valeur de CX en hexadécimal après chaque instruction :

mov cx, 11001110011100b
and ch, 010101b
rol ch, 1
add ch, 1fh
or cl, 101b
mov ax,2
and cx,ax


MERCI D'AVANCE POUR VOTRE AIDE
Configuration: Windows Vista
Firefox 3.0.5

20 réponses

  1. Dedel_209 Messages postés 37 Statut Membre 3
     
    Ok je vais essayer
    1
  2. xav3601 Messages postés 3390 Statut Membre 312
     
    il faudrait dire ce que tu ne comprend pas!
    0
  3. Dedel_209 Messages postés 37 Statut Membre 3
     
    Je ne comprend pas comment réaliser cet exercice, merci d'avance si toi tu y arrives :P
    0
  4. xav3601 Messages postés 3390 Statut Membre 312
     
    Ben il faut que tu prenne ligne par ligne et que tu ecrive en "francais" a cote ce que ca donne.
    exemple:
    mov cx, 11001110011100b -> cx = 11001110011100 en binaire!
    0
    1. Dedel_209 Messages postés 37 Statut Membre 3
       
      Oui mais les lignes après il n'y a plus de CX alors que c'est CX qu'il faut trouvé la valeur et la mettre en hexadécimal
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Dedel_209 Messages postés 37 Statut Membre 3
     
    Oui mais après? Parce que CX n'est plus présent dans la ligne après c'est à ce moment là que je ne comprend pas
    0
    1. loupius
       
      As-tu au moins lu le cours?
      Pas de CX, certes, mais CH ou CX , il n'y a qu'une lettre de différence... !!!
      0
      1. loupius > loupius
         
        Pardon, je voulais dire:
        Pas de CX, certes, mais CH ou CL , il n'y a qu'une lettre de différence... !!!
        0
  7. Dedel_209 Messages postés 37 Statut Membre 3
     
    Haaa, ok d'accord. Petit problème de compréhension
    0
  8. Dedel_209 Messages postés 37 Statut Membre 3
     
    Merci du conseil je peux enfin dormir en paix
    0
    1. loupius
       
      Même si j'ai répondu avec une pointe d'humour ou de dérision, j'étais sérieux en disant:
      Pas de CX, certes, mais CH ou CL , il n'y a qu'une lettre de différence... !!!
      En effet, je voulais te mettre sur la voie.
      Indice supplémentaire: CX = 100000000b * CH + CL.
      OK ? ;=)
      0
  9. Dedel_209 Messages postés 37 Statut Membre 3
     
    Lol j'ai compris...Enfaite en voyant CX g cru qu'il fallait trouver uniquement CX alors que enfaite le X représente une lettre quelconque.

    Comme je vois que vous aimez les devinettes en voici une autre...LOL

    Donner le code en assembleur correspondant au programme:

    if (bVar < 5 && wVar >=325)
    {
    ax = cx * 3;
    }
    else
    {
    bx = cx * 4;
    }
    0
    1. loupius
       
      Non pas du tout, tu n'as pas lu ton cours!
      X n'est pas une lettre au hasard:
      CX est un registre 16 bits qui est la concaténation des registres CH et CL.
      CH signifie: registre 'C byte high', c'est à dire octet haut; c'est un registre 8 bits,
      CL signifie: registre 'C byte low', c'est à dire octet bas; c'est un registre 8 bits.
      Donc au final: CX = 256h * CH + CX.
      Ai-je été assez clair ?
      0
  10. Dedel_209 Messages postés 37 Statut Membre 3
     
    Oui je viens de voir le tableau avec les 8 bits supérieurs et les 8 bits inférieurs.

    Mais alors l'exercice que j'ai mis au tout début du POST ça donne quoi?
    0
    1. loupius
       
      Et bien c'est simple, toute modification de CH ou CL modifie CX, et c'est à toi de trouver les valeurs de CX.
      Bon courage.
      0
  11. Dedel_209 Messages postés 37 Statut Membre 3
     
    Ok merci quand même. Le problème c'est que ça risque de prendre du temps et que je n'en ai plus.

    Merci quand même...
    0
  12. Dedel_209 Messages postés 37 Statut Membre 3
     
    pour le première ligne je trouve 339C h

    pour la deuxième ligne je ne comprends pas cause de ce CH

    CH vaut 33 h???
    0
    1. loupius
       
      Merci toto,
      Mais la 2ème ligne ne dit pas que CH = 033h, mais de faire un AND entre CH (byte high) et 015h.
      Pigé? Je n'ai pas envie de faire ton exercice, je veux que tu comprennes.
      0
  13. toto
     
    Bonjour

    loupius te l'a déjà dit et tu aurais déjà dû le savoir : CH ce sont les 8 bits de poids fort de CX, de même que CL sont les 8 bits de poids faible.
    Qu'est-ce que tu ne comprends pas ? Ce que sont les poids forts ? Ce que fait l'instruction AND ?
    0
  14. Dedel_209 Messages postés 37 Statut Membre 3
     
    Peut être que en me donnant la réponse de mon POST je pourrais plus facilement comprendre parce que je suis en train de me prendre la tête avec ça...

    Merci d'avance pour votre réponse
    0
  15. Dedel_209 Messages postés 37 Statut Membre 3
     
    C'est pas ça...

    C'est que j'ai mon examen demain à 8h30 et que j'ai encore pas mal de truc à faire.

    Merci quand même
    0
  16. Dedel_209 Messages postés 37 Statut Membre 3
     
    CH fait partie des 8 bits supérieur donc il prend la valeur 33 h

    Ensuite que faire avec le and et 010101b ???
    0
    1. loupius
       
      Après la 1ère ligne:
      CX = 11001110011100b
      La 2ème ligne
      and CH, 010101b
      est équivalente à: and CX, 00010101 00000000b
      Si tu as compris, tu peux faire la suite.
      0
  17. Dedel_209 Messages postés 37 Statut Membre 3
     
    Je comprends toujours pas.

    Moi pour la deuxième ligne j'avais remplacer ch par 033h et comme 010101b = 15h

    j'avais fait :
    0 0 1 1 0 0 1 1
    0 0 0 1 0 1 0 1
    0 0 0 1 0 0 0 1

    donc j'ai pensé que pour la ligne deux la valeur de CX était égal 11h en hexadécimal
    0
    1. loupius
       
      Non, CX est un registre 16 bits, donc:
      CX = 339Ch AND 1500h (soit CH tansformé en 16 bits)
      soit en binaire:
      00110011 10011100 and 00010101 00000000
      00110011 10011100
      00010101 00000000
      -------- --------
      00010001 00000000 ce résultat va dans CX
      
      idem pour les autres instructions.
      0
  18. Dedel_209 Messages postés 37 Statut Membre 3
     
    Merci j'ai enfin compris...Désole pour le temps qu'il a fallu

    Maintenant j'ai un autre soucis! J'ai mis dans le POST un programme en C et il faut le traduire en assembleur je n'ai aucune idée comment faire

    Alors si quelqu'un est insomniaque et qu'il peut m'aider ça m'arrangerai
    0
  19. Dedel_209 Messages postés 37 Statut Membre 3
     
    donc pour la ligne trois de mon 1er POST ça fait : 001000100000000 ou bien je dois refaire à nouveau la même manipulation qu'au dessus??
    0
    1. loupius
       
      Excuse-moi Delel mais j'ai fais une erreur; il faut dire que la programmation en assembleur, je n'en fais plus tous les jours.
      En gros j'ai dit que dans une opération le registre 8bits était étendu en 16bits, c'est faux en fait c'est l'inverse; je vais donc m'expliquer:
      L'opération 'and CH, 010101b ', signifie qu'on fait un AND entre 0001 0101 b et CH (c'est-à-dire la partie haute de CX).
      Soit:
      CX = 339Ch AND 15FFh (soit CH tansformé en 16 bits et FF pour ne pas modifier les poids faibles)
      soit en binaire:
      00110011 10011100 and 00010101 111111111
      00110011 10011100
      00010101 11111111
      -------- --------
      00010001 10011100 ---> ce résultat va dans CX


      idem pour les autres instructions.
      0
  20. asmx86 Messages postés 22 Statut Membre 15
     
    mov cx, 11001110011100b CX=339C h
    and ch, 010101b CX=119C h
    rol ch, 1 CX=229C h
    add ch, 1fh CX=419C h
    or cl, 101b CX=419D h
    mov ax,2 CX=419D h
    and cx,ax CX=0000 h
    0