Tp d'assembleur (avec emu8086)

Bonjour,

J'ai un exercice d'assembleur a faire mais je suis vraiment nul dans ce langage...
Voici l'énoncé :

Ecrire un programme assembleur qui realise la somme de deux matrices A et B de taille N entrées par l'utilisateur et sauvegarde le resultat dans une matrice C qui est affichée a l'utilisateur.

Est-ce que quelqu'un aurait quelques pistes pour m'aider a realiser ce programme ?

Merci d'avance :)
Configuration: Windows Vista
Internet Explorer 7.0

5 réponses

  1. Modérateur
    Alors d'abord comment on représente une matrice à une dimension.
    En voici une:
    [0, 1, 2, 5]

    Sous 8086 les entiers sont codés sur 16 bits puisque les registres ont cette taille.
    Chacun de ces nombres sera codé sur deux octets donc. Si le premier élément est à l'adresse 0, alors le second est à l'adresse 0 + 2 (car 16 bits ça fait deux octets). Le troisième élément est à 0 + 4 etc...

    adresse i + 6 |  5  |
    adresse i + 4 |  2  |
    adresse i + 2 |  1  |
    adresse i     |  0  |

    Donc mettons que l'adresse de la matrice (donc l'adresse du premier élément soit dans bx), si tu veux mettre la valeur du deuxième élément dans ax, tu fais comme ça:
    mov ax, [bx + 2]

    En gros là règle c'est: pour accéder à l'élément i, je prends son adresse de base et j'y ajoute i * 2, sachant que l'indice de la matrice i commence à 0 dans cet exemple:
    adresse_element[i] = adresse_base + (i * 2)

    Maintenant prenont une matrice à 3 dimensions:
    [0, 1]
    [2, 3]
    [4, 5]

    Impossible de représenter ça réellement en mémoire, puisqu'elle se présente comme une longue ligne de case à un seul étage.
    Alors du coup on transforme notre matrice 3 dimensions en une matrice 1 dimension. Comment me diras-tu? Eh bien on fait comme si les lignes qui suivent la première étaient mises à sa suite.
    Tout bonnement ça donne ça:
    [0, 1, 2, 3, 4, 5]

    Donc si l'indice de la ligne est i, que l'indice de la colonne est j, et que ces indices commencent à 0, et que le nombre d'éléments dans une ligne est de N, alors l'adresse d'un élement de ta matrice est:
    adresse_element[i][j] = adresse_base + (i * N * 2) + (j * 2)

    Valà!
    2
    1. Hum...ok je comprend le principe...

      Bon je sais pas encore comment je vais coder (je sais je suis assez désespérante lol) mais c'est deja un peu plus clair...

      Par contre, comment on fais pour demander que l'utilisateur entre les valeurs des tableaux ? (faut bien le faire, non ?)
      0
    2. Modérateur
      @AlundraBen par contre faut voir ça avec emu8086, j'ai jamais manipulé. Ca doit utiliser des interruptions clavier spécifiques...

      Sinon ya toujours moyen de déclarer des constantes, deux longs tableaux...
      0
    3. @kilianOk...je vais chercher un peu mais bon vu le peu de temps qu'il me reste je crois que c foutu pour cet exo.

      Enfin bon tant pis, l'assembleur c pas mon truc

      Merci beaucoup a toi au moins j'aurais compris quelque chose :)
      0
    4. Modérateur
      0
  2. Je ne comprends pas la base de la question Qu'est-ce que chaque tâche
    0
    1. sniff jdois rendre ca dans 40 minutes !!!
      J'aime vraiment pas l'assembleur lol

      Quelqu'un peu pas m'aider un peu ??

      Merci d'avance
      1
      1. Modérateur
        Ce sont des matrices à une dimension?
        0
        1. Euh je ne sais pas du tout...j'ai juste l'énnoncé et jsuis censé savoir faire ca (grr c'est pas gagné lol)
          0
        2. Modérateur
          @Alundraroooh :-)

          Bon à priori de taille N entrée, ça signifie une matrice à une dimension...
          0
        3. @kilianAlors selon les explications que jai pu soutiré au prof c a deux dimensions que l'on doit transformer en une dimension....en francais je sais pas ce que ca veut dire lol
          0
        4. Modérateur
          @AlundraOui oui je vois très bien ce qu'il veut dire. Je vais manger et t'explique le truc.
          0
        5. @kilianok merci :)
          0
      2. Modérateur
        T'as pas une petite idée pour commencer? ;-)
        Par exemple qu'est ce qui te fait coincer? La représentation des matrices? L'affichage ou..?
        0
        1. L'affichage ca ira mais c'est pour les matrices que je ne sais pas du tout comment on fais (en fait je comprend pas du tout comment est strucuré l'assembleur malgré les cours -_-)
          0