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
-----
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
Bin en fait il y a plus qu'un lien puisque c'est un peu la même chose.
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 ; 20/05/2014 à 00h36.
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
Je ne comprends rien à ce que dis. Pourrais-tu énoncer clairement ce que tu cherches au lieu de tourner autour du pot?
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.
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
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.
Bonjour à toi,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
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 =>
Puis tu écrivais ce genre de code:Code:mess db 'Une chaine à afficher!$'
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/DOSCode:debut: mov dx, offset mess mov ah, 9 int 21h
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
C'est de moins en moins vrai.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)
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+
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.
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.
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
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.
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).cela a l'aide de portes logiques comme un additionneur ,on est dans la logique combinatoire
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+