7
votes

Quelle architecture de processeur 32 bits / 64 bits a le jeu d'instructions plus faciles?

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?


0 commentaires

9 Réponses :


3
votes

Je suppose que vous devriez définir ce que "facile" signifie pour vous.

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)

  • commande (Ajouter, Sub, Mul, DIV)

  • paramètres (registre, mémoire, littéral)

  • Taille du paramètre (octet, mot, long, flotteur)

  • ordre cohérent des paramètres (source x source -> DEST ou DEST <- SOURCE X SOURCE)

    et capacité / complexité des instructions

    • Nombre de registres disponibles

    • Adresse indexée

    • paramètres implicites / explicites

      et autres.

      Vous devriez probablement donner des exemples de quelles parties de x86 que vous jugeez "pas facile" par rapport aux autres architectures et pourquoi.


0 commentaires

3
votes

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.

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.


4 commentaires

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.



4
votes

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.

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.

  • pas orthogonal, tous les registres ne sont pas égaux dans la fonctionnalité.
  • Petit nombre limité de registres spécialisés - entraîne une trop grande opérations de pile.
  • Opérateurs de préfixes méchants.
  • ...

1 commentaires

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).



3
votes

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 trouver une fonctionnalité architecturale (MIS) que vous n'aviez jamais vue auparavant.

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.


0 commentaires

3
votes

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.

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.

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.

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.


0 commentaires

2
votes

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.


0 commentaires

3
votes

L'avocat du diable défend x86 architecture

Je ne vais pas défendre le Assembleur MS x86, mais voir ici 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 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?

En ce qui concerne la difficulté d'apprentissage, je pense que c'est amusant é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 , 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.

retour à la défense:

sur l'absence de registres : cela n'a pas d'importance à la fin. Même les architectures RISC ont finalement été allés à Enregistrer le renommage , malgré leur charge de bateau de registres architecturaux, ils avaient encore besoin de plus pour la performance. Donc, X86 est peut-être meilleure, car tout le monde obtient des zillions de produits renommés automatiques mais X86 n'a besoin que de sauvegarder un petit nombre de registres d'arc.

sur complexe ISA : 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 micro-ops comme ils sont lus dans le cache, isolant ainsi le noyau de la CPU de X86! Aujourd'hui, X86 est une sorte de schéma "compression d'instructions", juste un codage qui est découragé, car le code de programme est lu par la CPU. Quelque chose, ils ont divisé les instructions, parfois ils combinent des consécutifs, et parfois ils les traduisent simplement.


0 commentaires

11
votes

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.

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:

  • Adresse de la mémoire segmentée - Tous ces DS, CS, ES registres: Que veulent-ils dire, comment sont-ils combinés avec un registre d'index pour faire une adresse de mémoire entièrement résolue? Il y a en fait trois différentes manières qui se passe, alors vous apprenez un tas de modes différents.
  • Ensemble d'instructions non orthogonales - Certaines instructions fonctionnent uniquement avec certains registres, d'autres instructions ont des significations qui se chevauchent, certaines choses ressemblent à elles devraient être rapides mais sont vraiment lentes, etc.
  • Enregistrer-Memory Architecture - Le X86 est conçu pour avoir peu de registres (nommés), de sorte que chaque opcode a généralement un argument qui est un registre et un autre argument qui est une adresse mémoire. Ceci est différent de la voûte de charge de la PPC, où les opérations de mémoire sont explicites. Étant donné que le pointeur de pile a tendance à rebondir beaucoup, cela peut rendre difficile à comprendre quelle variable est vraiment utilisée!
  • Pointeur de pile spastique - où la plupart des conventions d'appel PPC vous ont déplacé le pointeur de la pile juste une fois lors de la saisie d'une fonction, puis une fois lorsque vous retournez, généralement le code X86 sera poussez ing et pop 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.

    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.


4 commentaires

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 , entrez , laissez , etc.) que Assumez implicitement en déplaçant le pointeur de pile autour. Et chaque compilateur que j'ai vu utilise des utilisations pousser et pop 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 / RET 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 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.



1
votes

Il pourrait être intéressant d'être consulté RISC-V .

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.

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.

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.

Voici le Specs .

Il y a aussi un support logiciel décent. Linux, GCC, QEMU par exemple.

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.

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.


0 commentaires