Bonjour,
dans les processeurs 8086, en assembleur quand je fais l'intruction sub a,b :
le compilateur va remplacer cette instruction par un not b + inc b + ADD a,b soit 3 cycles d'horloge pour réaliser la soustraction?
De nos jours avec les processeurs actuels, il y a j'imagine pour optimiser la place dans la RAM une seul instruction pour réaliser une soustraction, mais prend elle toujours 3 cycle d'horloge ?
Merci d'avance pour vos éclaircissements.
# Source ?
Posté par chimrod (site web personnel) . Évalué à 3.
Tu es sûr de toi ? La famille 8x86 est une architecture CISC ça m'étonnerai donc que le compilateur ait besoin de convertir l'opérande comme tu le décris…
# Cycles ?
Posté par AncalagonTotof . Évalué à 1.
Est-tu certain déjà qu'un sub, un not, ou autre, s'exécute en un seul cycle ?
Ça fait longtemps que je n'ai pas mis le nez là-dedans, mais j'en été resté à une instruction = plusieurs cycles.
Par contre, il existe tout un tas d'optimisations (pipeline, etc) qui permettent de paralléliser plus ou moins, genre, commencer l'exécution de l'instruction suivante alors que celle en cours n'est pas terminée.
NB: le 8086 est très loin aussi, mais est-ce que l'instruction sub existe vraiment ?… Sinon, c'est normal qu'il traduise par un négation puis une addition.
# je n'y connais pas grand chose en assembleur
Posté par viviNeutron . Évalué à 1. Dernière modification le 29 juillet 2019 à 14:33.
@chimrod, non je n'en suis pas sur du tout. il me semblait que la soustraction d'un nombre binaire se faisait via le complément A2, donc j'imagine que la procédure pour un sub est not + inc + add.
Justement j'aimerai savoir combien de cycle d'horloge dure un sub, mais je ne connais aucun moyen expérimental pour savoir le nombre de cycle d'horloge pour réaliser une opérande particuliere
[^] # Re: je n'y connais pas grand chose en assembleur
Posté par chimrod (site web personnel) . Évalué à 3.
Voilà par exemple la conversion d'un petit programme C :
qui devient :
par contre, pour calculer la longueur en cycle d'horloge, c'est beaucoup plus compliqué. Avec la gestion des pipelines, le temps pris pour exécuter une seule instruction n'a plus beaucoup de sens… Tu pourras trouver quelques informations sur la durée de l'opérande en fonction des paramètres passés ici.
[^] # Re: je n'y connais pas grand chose en assembleur
Posté par David Marec . Évalué à 3. Dernière modification le 29 juillet 2019 à 20:32.
Oui, mais c'est l'ALU qui le fait, via un jeu de portes logiques. Il n'est pas question là, stricto sensu, de cycles d'horloge.
D'après la page wikipedia 8086, cela prend trois cycles à l'ALU pour manipuler des registres.
Le plus compliqué, ça va être de trouver une carte avec un 8086 en état de marche pour mesurer ça …
[^] # Re: je n'y connais pas grand chose en assembleur
Posté par Kerro . Évalué à 2.
Il est plus efficace de se procurer un « manuel de référence du programmeur ».
Par exemple avec celui-là : https://edge.edx.org/c4x/.../8086_family_Users_Manual_1_.pdf (premier lien d'une recherche Google avec « intel 8086 programmer's reference manual pdf ») en page 82, il est indiqué qu'une soustraction entre 2 registres prends 3 cycles et que l'instruction occupe 2 octets (la même chose qu'un ADD).
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.