Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

programmation assembleur



  1. #1
    mayabe

    programmation assembleur


    ------

    bonjour

    je n'arrive pas a comprendre s'il y a un lien entre le jeu d'instruction risc/cisc et la syntaxe assembleur

    merci a vous

    -----

  2. Publicité
  3. #2
    Jack
    Modérateur

    Re : programmation assembleur

    Bin en fait il y a plus qu'un lien puisque c'est un peu la même chose.

  4. #3
    Jack
    Modérateur

    Re : programmation assembleur

    Disons que le jeu d'instruction utilisé par l'assembleur est un sous-ensemble de la syntaxe de l'assembleur qui utilise également des pseudo instructions afin d'initialiser la mémoire, ou de définir des labels, etc.
    Dernière modification par Jack ; 19/05/2014 à 23h36.

  5. #4
    mayabe

    Re : programmation assembleur

    est ce que je peux programmer en RISC/CISC?
    y a t il un print pour afficher par exemple
    enfin je vois a quoi ressemble une ALU et regitres mais a quoi ressemble en terme de circuit integré l'unité de ccommande

  6. A voir en vidéo sur Futura
  7. #5
    Jack
    Modérateur

    Re : programmation assembleur

    Je ne comprends rien à ce que dis. Pourrais-tu énoncer clairement ce que tu cherches au lieu de tourner autour du pot?

  8. #6
    PA5CAL

    Re : programmation assembleur

    Citation Envoyé par mayabe Voir le message
    y a t il un print pour afficher par exemple
    enfin je vois a quoi ressemble une ALU et regitres mais a quoi ressemble en terme de circuit integré l'unité de ccommande
    L'assembleur est un langage de bas niveau, qui permet d'écrire des programmes contrôlant dans le détail les éléments matériels du système.

    Contrairement aux langages de haut niveau qui, a priori, ne proposent pas ce niveau de détail, il n'offre pas directement les mécanismes permettant de manipuler sous une forme conceptualisée des sous-systèmes complexes de l'ordinateur sans en connaître le fonctionnement sous-jacent (console, fichiers, communications...).

    Pour afficher un texte sur un écran, il faudra écrire la suite d'instructions pilotant le circuit qui le contrôle, lequel peut être très différent d'un type de machine à l'autre (en effet, on ne fait pas fonctionner de la même manière une carte VGA, un terminal VT100 ou un afficheur LCD 16x2 caractères en mode 4 bits), ou bien faire appel à des routines du système d'exploitation si l'on a affaire à un ordinateur qui en dispose (PC sous Windows, par exemple).

    Ces instructions peuvent déjà être disponibles sous forme de librairies logicielles lorsque la plateforme matérielle est parfaitement connue.
    Dernière modification par PA5CAL ; 20/05/2014 à 21h17.

  9. Publicité
  10. #7
    mayabe

    Re : programmation assembleur

    merci PA5CAL pour ces explications

    ce que je voulais dire pour tenter d 'etre plus clair parce que c'est vrai que c'est tres embrouillé ,c'est que programmer en assembleur ,c'est utiliser le jeu d'instruction RISC/CISC pour effectuer une action
    mais je ne vois pas a quoi ressemblle un jeu d'instruction en terme de portes logiques dans le cas ou un jeu d'instruction est un ensemble de portes logiques

  11. #8
    Jack
    Modérateur

    Re : programmation assembleur

    Mais pourquoi veux-tu ramener le jeu d'instructions à des portes logiques? Certes, certaines instructions arithmétiques et logiques sont comparables à des portes logiques, mais que dire des instructions de saut par exemple?

    C'est de la logique séquentielle avant tout.

    Les articles traitant du fonctionnement d'un µprocesseur ne manquent pas. Tu devrais en lire quelques-uns et tout devrait s'éclaircir.

  12. #9
    Cyrille999

    Lightbulb Re : programmation assembleur

    Citation Envoyé par mayabe Voir le message
    merci PA5CAL pour ces explications

    ce que je voulais dire pour tenter d 'etre plus clair parce que c'est vrai que c'est tres embrouillé ,c'est que programmer en assembleur ,c'est utiliser le jeu d'instruction RISC/CISC pour effectuer une action
    mais je ne vois pas a quoi ressemblle un jeu d'instruction en terme de portes logiques dans le cas ou un jeu d'instruction est un ensemble de portes logiques
    Bonjour à toi,

    C'est embrouillé parce que tu ne connais pas. C'est à ceux qui connaissent de t'expliquer.

    D'abord, tu ne choisis pas de programmer en RISC ou CISC ainsi. Ce n'est pas un choix. Tu peux effectivement programmer en assembleur: Ca, c'est un choix. Souvent un choix de performance (même si un langage comme le C est peut être mieux adapté aujourd'hui).

    Quand tu choisis de programmer en assembleur, c'est sur une machine précise: Par exemple, un PC avec un Pentium/4. Ou un Intel i5. Ou un RISC/6000. ou un SPARC VIII.

    Initialement, les processeurs étaient CISC: C'est à dire qu'ils disposaient d'un tas d'instructions pour faire des opérations élémentaires. Un jour, des constructeurs se sont dits "Si nous améliorons ceci. Il y a un tas d'instructions que nous n'utilisons pas ou peu. De plus, il y a un jeu d'instruction INDISPENSABLE"; Alors, ils ont construits des processeurs RISC, c'est à dire des processeurs avec une centaine d'instructions et quelques instructions optimisées (c'est à dire qui travaille en 1 cycle d'horloge au lieu de plusieurs cycles ou plusieurs dizaines de cycles".

    Pour répondre à ta question concrète du "print", non, il n'existe pas d'équivalents, que ça soit en RISC et CISC. Tu dois oublier ce que tu sais dans d'autres langages pour te mettre à l'assembleur, que ça soit un processeur CISC ou RISC. Les instructions, ce sont des mouvements, des stockages dans des registres (des petites zones mémoires du processeur), des compare, des sauts.

    Ensuite le "print", il dépend de ton architecture; Quand tu programmais en assembleur sur x86 (x définit un processeur quelconque de la famille 86, comme x64 définit un processeur quelconque de la famille 64 bits), si tu étais sous MS/DOS, tu pouvais faire, de mémoire:
    Tu définissais un message =>
    Code:
    mess db 'Une chaine à afficher!$'
    Puis tu écrivais ce genre de code:
    Code:
    debut:
    
    mov dx, offset mess
    mov ah, 9
    int 21h
    Ca, c'est l'équivalent du code print; De fait, ce sont des macro-instructions que comprenaient le langage assembleur, puis le transformait ensuite en programme COM ou EXE compréhensible directement par le système d'exploitation MS/DOS

    Ca veut dire:
    Déplace dans le registre dx, l'offset (ou l'adresse si tu préfères)
    Déplace dans le registre ah la valeur 9
    Déclenche l'interruption 21h

    C'est un exemple de code: Tu pouvais faire autrement en passant par le "BIOS" de l'époque et son interruption 13h. L'interruption 21h utilisé par MS/DOS ne supportait pas l'affichage couleur ! (ou le graphique comme le CGA, puis l'EGA, puis le VGA, qui lui était attaquable par le 13h).

    Ceci est un processeur dit CISC. Mais dans un processeur du type RISC, tu aurais un peu l'équivalent dans cet exemple.

    Ca serait plutôt dans des instructions peu usités en x86, que celles-ci n'existeraient pas en RISC.

    Ou des instructions comme le MULT qui doit utiliser environ 70 cycles d'horloge en CISC plutôt que 3 ou 4 en RISC.

    Tiens un document universitaire qui explique pas mal de choses: http://web.univ-pau.fr/~ecariou/cour...ours-7-cpu.pdf

    Donc il existe des processeurs CISC (par exemple, tous les Intel x86 et x64), les Motorola 68000, le s390, les ZX, etc.... C'est la famille majoritaire, celle qui couvre le plus gros marché.

    Et quelques rares processeurs RISC: Par exemple, chez Intel, l'Itanium64 ou le Xenon. La famille des SPARC (SUN), des PowerPC (apple and co), les POWER (IBM)

    Voilà, j'espère que j'ai un peu éclairé ton esprit sur CISC/RISC.

    Cyrille
    La connaissance est la matière première de l'Intelligence.

  13. #10
    Jack
    Modérateur

    Re : programmation assembleur

    Et quelques rares processeurs RISC: Par exemple, chez Intel, l'Itanium64 ou le Xenon. La famille des SPARC (SUN), des PowerPC (apple and co), les POWER (IBM)
    C'est de moins en moins vrai.
    Sur les petits microcontrôleurs les pic et avr sont de RISC et sur les plus gros les ARM est sont aussi. J'aurais donc tendance à dire que les CISC sont devenus minoritaires (Si quelqu'un connait les chiffres...)

    A+

  14. #11
    PA5CAL

    Re : programmation assembleur

    Il me semble que faire la distinction entre CISC et RISC n'a qu'un intérêt assez limité, surtout quand on ne choisir pas la plateforme matérielle sur laquelle on développe.

    Cette distinction n'est apparue qu'assez tardivement. Les premiers processeurs n'étaient pas suffisamment complexes pour que la question d'une simplification de leur jeu d'instructions puisse se poser, et si aujourd'hui on les qualifie de CISC, c'est à cause détails finalement assez peu significatifs. Par exemple, un 6502 est éminemment plus proche d'un AVR que d'un Dual Core.

    Pour le programmeur en assembleur, les grandes différences entre les familles et modèles de processeurs auront finalement plus d'importance que cette distinction.

    Citation Envoyé par mayabe Voir le message
    je ne vois pas a quoi ressemblle un jeu d'instruction en terme de portes logiques dans le cas ou un jeu d'instruction est un ensemble de portes logiques
    Comme l'a rappelé Jack, un microprocesseur c'est essentiellement de la logique séquentielle (bascules, mémoires). La logique combinatoire (portes logiques simples) est bien évidemment présente, mais en tant que telle, elle n'apparaît que partiellement dans le fonctionnement.

    Le cœur d'un processeur est un séquenceur, dont le rôle est de commander la succession des opérations nécessaires. Chacune de ces opérations consiste à mettre en communication différents éléments du processeur (registres, bus, unités de traitement). Une séquence élémentaire d'opérations est déterminée par le code d'une instruction préalablement chargée depuis la mémoire de programme, ou bien répond à un fonctionnement prédéfini (comme par exemple le chargement du code d'une instruction depuis la mémoire de programme).

    Dans leur grande majorité, les instructions assembleur représentent des codes d'instruction machine, et correspondent donc à une succession d'opérations.

    Par exemple, sur un microcontrôleur AVR8, l'instruction assembleur « ADD R0,R1 » (= ajouter R1 à R0) se traduit par un code d'instruction machine de valeur 0C01 (en hexadécimal). Lorsque le microcontrôleur exécute ce code, la séquence d'opérations réalisée consiste à présenter d'abord les sorties des registres R0 et R1 sur les entrées de l'unité réalisant l'addition (ALU : unité arithmétique et logique), puis à présenter le résultat (R0+R1) apparaissant à la sortie de cette unité sur l'entrée du registre R0 (via le bus interne) afin de l'y mémoriser, et de la même manière à positionner le registre d'état en fonction de la valeur du résultat (par exemple mettre le bit Z à 1 si la somme est égale à zéro, ou le bit C à 1 si l'addition a généré une retenue). Parallèlement, le compteur de programme est incrémenté afin de pointer sur l'adresse suivante dans la mémoire de programme, puis le code de l'instruction suivante est chargé afin d'être exécuté au cycle suivant.


    Le langage assembleur permet de décrire le programme sous la forme de mnémoniques (mots abrégés) décrivant directement les instructions machines, mais sans avoir à déterminer le code d'instruction (valeur numérique) correspond, ni à connaître tout le détail des opérations internes sous-jacentes.

    Le langage assembleur introduit également les notions de variables et de fonctions (« macros »), élevant ainsi le niveau de conceptualisation afin de faciliter l'écriture des programmes.
    Dernière modification par PA5CAL ; 25/05/2014 à 15h04.

  15. #12
    mayabe

    Re : programmation assembleur

    bonjour

    je comprend mieux merci pour vos explications


    envoyé par PA5CAL

    Le langage assembleur permet de décrire le programme sous la forme de mnémoniques (mots abrégés) décrivant directement les instructions machines, mais sans avoir à déterminer le code d'instruction (valeur numérique)
    est ce que ces mnemonique correspondent au jeu d'instruction , c'est cela que je ne comprend pas

    pour etre concret , je souhaite par exemple faire un systeme de calculatrice basique
    qui additionne ou soustrait deux nombres
    je peux faire les operation moi meme :
    ecrire nombre1
    ercrire nombre2
    ensuite selectionner l'operation a effectuer
    et lire resultat
    cela a l'aide de portes logiques comme un additionneur ,on est dans la logique combinatoire


    mais si je veux que ce soit un progamme executable alors je ferai
    ecrire nombre1 dans registre1
    ecrire nombre2 dans registre2
    lire nombre1
    lire nombre2
    selectionner operation addition a l'aide d'un decodeur

    et pour effectuer ces operation les unes apres les autre je devrai utiliser un compteur/horloge
    est ce que un compteur et un decodeur dans ce cas la forme un debut de processeur ou un sequenceur
    Dernière modification par mayabe ; 25/05/2014 à 18h41.

  16. Publicité
  17. #13
    PA5CAL

    Re : programmation assembleur

    Les mnémoniques correspondent au jeu d'instruction du microprocesseur, ou bien à un mot réservé du langage assembleur (la déclaration d'une variable, d'une constante ou d'une macro, par exemple).

    Un programme de calculatrice basique écrit en assembleur s'approche assez de ce qu'on réaliserait dans des langages de haut niveau (BASIC, C, Fortran, Pascal, Java, etc.), à ceci près que les fonctions qui sont disponibles par défaut avec ces derniers pour communiquer avec les périphériques (lecture du clavier, affichage à l'écran) et pour effectuer les calculs (analyse syntaxique des expressions arithmétiques, conversion décimale/binaire, etc.) doivent être expressément fournies ou bien réécrites de façon détaillée jusqu'au niveau de l'utilisation des registres.

    Hormis la taille des registres utilisés (8 bits, 16 bits, etc.) et les opérateurs effectivement disponibles au travers du langage assembleur (car tous les microprocesseurs ne proposent pas la multiplication ou la division de nombres entiers, les opérations sur des nombres à virgule flottante ou les calculs sur des valeurs entières codées en décimal), la structure électronique sous-jacente (horloge, séquenceur, etc.) n'apparaît absolument pas dans le programme.
    Dernière modification par PA5CAL ; 25/05/2014 à 20h06.

  18. #14
    Jack
    Modérateur

    Re : programmation assembleur

    cela a l'aide de portes logiques comme un additionneur ,on est dans la logique combinatoire
    Non, car les actions que tu demandent doivent être exécutées dans une SEQUENCE donnée, c'est donc de la logique séquentielle, même si dans certaines des lignes de cette séquence se glissent des ordre relevant de la logique combinatoire (l'addition par exemple).

    Mais si tu tiens tant à utiliser un langage et des fonctions de l'électronique, du devrais te diriger vers des langages comme VHDL, langages pour lesquels la différence entre logique combinatoire et séquentielle est flagrante puisque l'implémentation de ces 2 logiques est différente.

    Enfin bon, pourquoi t'obstines-tu à penser électronique en faisant de l'assembleur. Quel est ton but finalement?

    A+

Discussions similaires

  1. Programmation en assembleur 68HC11
    Par zeb68 dans le forum Électronique
    Réponses: 5
    Dernier message: 15/02/2010, 21h43
  2. exercices sur programmation assembleur?
    Par achernar dans le forum Électronique
    Réponses: 5
    Dernier message: 05/12/2009, 20h11
  3. aide pour programmation en assembleur
    Par costarimes dans le forum Électronique
    Réponses: 5
    Dernier message: 30/03/2009, 19h34
  4. Programmation assembleur sur PIC
    Par Makim dans le forum Électronique
    Réponses: 0
    Dernier message: 19/03/2007, 09h38
  5. Programmation Assembleur
    Par JuL164 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 28/12/2005, 10h26