Je me sens extrêmement confortable avec le code de l'Assemblée de PowerPC 32 bits, mais je suis complètement perdu lors de la tentative de sens du code X86. Faites l'une des autres architectures communes telles que le bras, les mips, SPARC, etc. ont une instruction plus facile que X86? P>
9 Réponses :
Je suppose que vous devriez définir ce que "facile" signifie pour vous. P>
Je préfère juger des langues de la machine en termes d'orthogonalité (signification: une partie d'une instruction peut être remplacée par des alternatives et donner une instruction valide) p>
commande (Ajouter, Sub, Mul, DIV) P> LI>
paramètres (registre, mémoire, littéral) p> li>
Taille du paramètre (octet, mot, long, flotteur) p> li>
ordre cohérent des paramètres (source x source -> DEST ou DEST <- SOURCE X SOURCE) P> LI> ul>
et capacité / complexité des instructions p>
Nombre de registres disponibles p> li>
Adresse indexée P> LI>
paramètres implicites / explicites p> li> ul>
et autres. P>
Vous devriez probablement donner des exemples de quelles parties de x86 que vous jugeez "pas facile" par rapport aux autres architectures et pourquoi. P>
bras, et cela parle du point de vue de quelqu'un au milieu d'écrire les dernières étapes d'un assembleur. Voici le Manuel de référence de l'architecture pour vous aider à démarrer. P>
Edit: Pour une raison quelconque, j'ai supposé que vous vouliez dire format de code de machine. L'assemblage X86 est facile - l'assemblage au code de la machine ... pas tellement. P>
Je trouve personnellement le bras assez confus et difficile à lire; Le mode thumb est plus facile que 32 bits. Par exemple, ces opérations de poussoir multi-enregistrements, avec des pointeurs d'empilement arbitraires, ou l'ajout d'une opération qui se déplace également - elles sont assez déroutantes.
@Martin: Comme je l'ai dit, le bras est plus facile pour le code de la machine, mais X86 est facile pour la langue d'assemblage. :)
Juste hors de curiosité, pourquoi analyse / assemblage x86 assemblée si difficile?
@Drjokepu: Les instructions ne sont pas une taille fixe - instructions de formulaire abrégées Enregistrer la place lorsque vous pouvez les utiliser. Beaucoup de modes d'adressage utilisent des compensations dans le code et les décalages changent lorsque les instructions modifient la taille - à l'activation des compensations mis à jour peuvent autoriser ou empêcher de nouvelles instructions d'utiliser le formulaire court.
Sans définition de "facile" Je suis sûr que la plupart des gens conviendront que l'ensemble d'instructions X86 est facilement le plus horrible pour un processeur populaire grand public. p>
Si on devait écrire une liste de bonnes pratiques ou meilleures, il faut suivre lors de la conception d'un ensemble d'instructions, le X86 serait un bon exemple de tous les opposés. P>
Je pense que ces propriétés décrivent principalement la simplicité de la mise en œuvre (c'est-à-dire de la conception des puces à microprocesseur). Je ne pense pas qu'ils affectent une facilité d'apprentissage de manière significative (mais contribuent sûrement à la douleur).
Je pense que le phénomène que vous ressentez est que la deuxième langue d'assembleur est (encore) difficile à apprendre (je suppose que l'apprentissage de PPC était également difficile lorsque vous avez commencé, à l'époque). Il devient plus facile des nouvelles architectures que vous vous familiarisez - à un moment donné, vous allez profiter em> trouver une fonctionnalité architecturale (MIS) que vous n'aviez jamais vue auparavant. P>
Le problème avec la deuxième architecture est que vous n'êtes pas encore clair sur ce qui est une pratique courante et ce qui est spécifique à la première architecture. Vous vous attendez donc à certaines choses à faire sur x86 de la même manière qu'ils ont été faites sur PPC, quand en fait x86 a sa propre façon (éventuellement plus élégante) de faire des choses. P>
J'ai appris l'assemblée du bras et j'ai trouvé cela assez facile et puissant. Je ne pense pas que les opérandes de broste et de telles choses déroulent. Au moins parce que j'ai appris au bras ASM d'abord, puis j'ai lu quelque chose à propos de X86 ASM. P>
Je trouve que la plupart des fonctionnalités manquantes sur X86 sont des points de force sur le bras, par exemple plusieurs registres de registre / lecture et exécution conditionnelle. Pl.us, je trouve très utile d'avoir tant de registres. P>
Je pense que c'est la "guerre de la religion" habituelle RISC vs CIVC, ARM VS X86. IMHO est trop subjectif pour être un principe universel. Par exemple, Martin v. Löwis trouve bras sans vue, alors que je le trouve tellement plus élégant que X86. P>
J'ai également donné un tir à un microcontrôleur ASM (Texas Instruments, vous ne pouvez pas rappeler le nom de modèle exact) et l'a trouvé tout autour sans surgation, tandis que de nombreuses autres personnes peuvent le trouver le "parfait" ASM. P>
aller avec bras. Après 20 ans d'années en tant qu'ingénieur logiciel, j'écris l'assembleur tous les jours pour diverses plateformes mais jamais besoin d'écrire un assembleur X86. En partie parce qu'il est horrible, en partie parce que je n'offrirais jamais un x86, je ne jette donc que des ordinateurs de bureau / des ordinateurs portables avec X86 et C ou tout ce que vous voulez exécuter sur Linux / Windows est suffisamment bas. P>
Je ne vais pas défendre le Assembleur MS x86, mais voir ici A > Pour mes commentaires sur elle. (Vous voudrez peut-être aller avec le GNU One, éventuellement via Cygwin .) Et certainement le manque de registres, le spécial -purez-vous la nature de la plupart d'entre eux, et l'organisation orthogonale impair, tordue et non orthogonale de tout cela semblait représenter un classique ne le fais pas de cette façon em> exemple. Oh, attendez-vous, que diriez-vous des caractéristiques extrêmement élaborées de la juste complexité épique que personne n'a jamais voulu ou jamais vraiment utilisé? Vous savez, l'unité de segmentation? P>
En ce qui concerne la difficulté d'apprentissage, je pense que c'est amusant em> écrire une assemblée X86, bien que je ne puisse pas vraiment mettre mon doigt pourquoi c'est. Aucune architecture de jeu d'instructions n'est vraiment tout ce complexe, alors je pense que vous pourrez comprendre x86 avec un niveau d'effort raisonnablement petit, même si je suis d'accord, il a certainement eu plus d'éléments qu'un ISA de RISC. Mais c'est amusant em>, quelques registres inhabituellement subdivisés, quelques autres formats d'instructions et un certain nombre de formats d'instructions, mais utilisent principalement le même format d'adresse 1.5. P>
retour à la défense: p>
sur l'absence de registres em> strong>: cela n'a pas d'importance à la fin. Même les architectures code> RISC CODE> ont finalement été allés à sur complexe ISA em> strong>: Intel toujours géré cela, au début avec la technologie de traitement supérieure de la force brute (le 286 était assez rapide dans sa journée) et aujourd'hui par traduction: le X86 opcodes dans la RAM sont transcodés dans
Eh bien, la plupart des RISC sont très semblables, donc si vous connaissez bien le PPC, puis en transition au bras, au MIPS ou à SPARCT sera tout un jeu. En fait j'ai appris Sparc d'abord, puis a pu ramasser un MIPS et le PPC dans quelques heures. P>
La chose qui rend le x86 si déroutant n'est pas vraiment sa langue de montage, mais la conception du processeur. Les gens ont tendance à se faire raccrocher: p>
poussez code> ing et pop code> ping partout sur la place. Vous finissez par compter les pousses et apparaîtres pour déterminer où votre pointeur de pile est devenu, ce qui me fait mal à la tête. Li>
ul>
Donc, pour vous mettre à l'aise avec le X86, la division et la conquérir: choisissez un de ces points, apprenez comment cela fonctionne, puis passez à la suivante. Cela peut aider à commencer par apprendre d'abord les conventions d'appel, car cela apportera toutes les autres instructions qui font référence au pointeur de la pile gagnent plus de sens. P>
Le "pointeur de pile spastique" est-il dicté par le matériel ou est-ce une chose abi?
C'est quelque part entre abi et matériel. Vous pouvez utiliser théoriquement une pile comme une puce RISC, mais il existe une bande d'instructions de contrôle de flux ( ret code>,
entrez code>,
laissez code>, etc.) que Assumez implicitement en déplaçant le pointeur de pile autour. Et chaque compilateur que j'ai vu utilise des utilisations
pousser code> et
pop code> de cette manière, ce qui rend les possibilités théoriques d'un point de sujet pour moi depuis mon usage principal de l'assemblage X86 consiste à déboguer ou à interfacer avec code qu'un compilateur a généré.
X86-64 Code a tendance à être plus sain d'esprit. Avec plus de registres et une convention appelante de registre-argens, le pointeur de la pile ne se déplace généralement pas dans une fonction. Call CODE> /
RET CODE> Toujours PUSH / POP L'adresse de retour, au lieu de la mettre dans un registre de lien que les fonctions non-feuilles doivent pousser / se faire pousser eux-mêmes.
En outre, la plupart des opcodes ont une ARG qui peut être REG ou MEMORY, et non que a i> de mémoire. Bon code X86 utilise parfois beaucoup d'opérandes de la source de mémoire, mais les opérandes de destination de mémoire sont plus rares pour des raisons de performance. En interne, les processeurs modernes X86 sont des machines à chargement, mais avec un ensemble d'instructions qui vous permet de plier une charge en une opération arithmétique.
Il pourrait être intéressant d'être consulté RISC-V . P>
C'est un ensemble d'instructions open source conçu pour être facile à mettre en œuvre et d'être utile pour le matériel mondial réel. P>
Il est conçu pour être modulaire et extensible, le jeu d'instructions «Core» s'occupe des entiers avec des éléments tels que des fluctuations d'extensions. P>
Il prend en charge des instructions 32 bits, 64 bits et même une instruction 128 bits. Il existe également une variante de "compressée" 16 bits (bien que sous le développement actuellement). Vous obtenez 32 registres par défaut. P>
Voici le Specs . P>
Il y a aussi un support logiciel décent. Linux, GCC, QEMU par exemple. P>
Il existe plusieurs implémentations actuellement en cours de divers fournisseurs et consiste à voir le support de Google, HP et oracle . Il existe des conceptions open source pour les puces et les FPGA. P>
Bien sûr, si vous le regardez du point d'une carrière, RISC-V est assez tôt à ce stade. Mais comme il est ouvert, cela pourrait devenir assez rapidement. P>