Que devrais-je savoir lors du passage de MIPS à l'assemblage x86?
À l'école, nous avons été la programmation en langage assembleur MIPS pour un certain temps. Je suis intéressé dans de plonger dans la x86 assemblée et j'ai entendu qui est un peu plus difficile (même mes MIPS manuel dit cela).
Ce que des informations de base dois-je le sais MIPS programmeur avant de faire de la plongée dans le x86 monde?
source d'informationauteur mmcdole
Vous devez vous connecter pour publier un commentaire.
Choses les plus importantes à garder à l'esprit sont:
Autre que cela, x86 est assez simple. Lorsque vous apprenez à l'abus des instructions comme " lea " et "test", vous apprenez à l'aimer. Aussi, protip: Intel va vous envoyer des copies du jeu d'instructions, manuels gratuit, n'ont même pas à payer pour l'expédition. Regardez autour de leur site pour la réalisation de courriel et demander les livres de SKU.
x86 a un ensemble très limité de registres disponibles par rapport à la plupart des autres architectures. Ce n'est pas vraiment de faire de l'assemblage de la langue plus difficile à apprendre, mais parfois il est plus difficile de mettre en œuvre le code dans la pratique.
Aussi, parce que du x86 histoire de solides raisons de compatibilité ascendante, le jeu d'instruction n'est pas très symétrique (certainement pré-RISC) et il peut y avoir beaucoup d'exceptions à la règle et le coin des affaires de prêter attention à.
x86 ont plus complexe instructions de MIPS. Donc il y a probablement une seule instruction pour la commune de séquences en MIPS (notamment adressage de mémoire). Manque de nombreux registres sont certainement un inconvénient, mais dans les deux architectures, il y a des conventions qui assez bien restreint le nombre de ce que vous pouvez utiliser librement en bas à 4-5. Juste plus prononcée dans les x86. x86 ont plus d'exceptions pour enregistrer l'utilisation de MIPS que vous devez garder à l'esprit, mais rien ne vaut la peine de pleurnicher sur constamment.
Parlant d'expérience, soit de la langue a à peu près la même difficulté à apprendre, conventions inclus. Peut-être x86 est un peu plus facile, compte tenu d'abondantes ressources en ligne et de sa popularité.
La partie la plus difficile sur x86 est la production de binaire, en raison de sa longueur variable instructions et plusieurs modes d'adressage. Le plus souvent, vous n'avez pas toujours besoin de le faire de toute façon.
Je peux certainement vous recommander d'apprentissage de plus en plus complexes, l'instruction de l'architecture que de MIPS.
Et, ce qui est important c'est de ne pas être une partie de la guerre de religion entre RISC c. s. CDCI...
J'ai été en apprentissage x86 et x86_64 pour écrire un assembleur moi-même. Si vous n'allez pas écrire un assembleur-vous certains de ce que je vais dire est à peu près inutile. Je ne sais pas à propos de MIPS moi-même bien que.
x86 adressage indirect est une chose complexe. En une seule instruction, vous pouvez faire ces:
Leur codage d'instruction est complexe à cause de cela, mais c'est cohérent pour chaque instruction de code de cette façon. Vous avez peut être envie de lire ce de sandpile.org. Si vous voulez en savoir plus sur l'encodage, vous pouvez toujours demander à propos de moi. Un autre codage d'instruction liés ennuyeux détail sont les préfixes. Ils changent le sens de l'instruction beaucoup. Par exemple, 0x66 (si je me souviens bien) à l'avant et des instructions pour devenir 16bit GPRs au lieu de 32 bits.
32bit GPRs(dans l'ordre): eax, ecx, edx, ebx, esp, ebp, esi, edi
64bit GPRs: rax, rcx, rdx, rbx, rer, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15
Notez le peu de registres il y a, ce sera la force de la plupart des logiciels de l'utiliser plus ou moins dans une pile-machine maniéré. Un douloureux détail. rsp est utilisé pour la pile (pop, push -instructions), et rbp tend à être réservé. x86_64 a plus de registres, mais ça va prendre du temps, quand les gens vont l'adopter, même si tous les consommateurs avaient un processeur capable.
Il y a deux différents ensembles d'instructions pour l'arithmétique à virgule flottante. XMM étant le plus récent. En x86_64 il y a 16 128 registres disponibles et en x86 il y a seulement 8 d'entre eux. Le plus vieux jeu d'instructions poignées de registres comme une pile. Vous n'avez tout simplement pas de swap, de pin ou de pourriture, de sorte que travailler avec lui est l'esprit de flexion.
Dans l'utilisation x86 tend à réduire dans une machine RISC. Certains de ces instructions complexes ne donnent pas d'avantages ou sont même plus lent sur les nouvelles machines. Vous pourrez faire avec la compréhension au sujet de 30-150 instructions en fonction de ce que vous êtes la lecture ou l'écriture. Vous pouvez également ignorer complètement quelques vieux instructions et AL/HL -stuff. Gardez à l'esprit ce tout le fouillis origine de 1978, ce qui est assez étonnant c'est pas pire, 31 ans et 24 ans à partir de la première introduction de IA-32. Beaucoup de choses changent leur pertinence en ce moment.
Direct sauts et appels semblent être parent de la prochaine instruction en x86. Donc:
Finit codé 'JMP imm:0, NOP'. Le registre indirect jmp qui ne font absolue sauts. Il est également bon de remarquer il n'y a pas de registre indirect conditionnelle sauts, il me gênait trop.
Ici n'est pas tout ce qui est possible, vous devriez le savoir, mais les premières choses qui vient à mon esprit de ta question. Mais peut-être que vous pouvez obtenir avec ces pour l'instant.