Pourquoi l'instruction mov ont la hache d'utilisation au lieu de deux segments registres directement?

StackOverflow https://stackoverflow.com/questions/928082

Question

Je vois code comme:

mov ax, cs
mov ds, ax
mov es, ax

Pourquoi ne puis-je compresser tout cela:

mov ds, cs
mov es, cs

La première façon plus rapide depuis son utilisation de l'accumulateur registre? Mais cela ne semble pas intuitif et ds depuis cs sont segments registres . Ou est-il une restriction que je ne suis pas au courant de?

J'utilise nasm par la manière.

Était-ce utile?

La solution

Vous ne pouvez pas segment mov registre à registre de segment -. Il n'y a pas d'instruction pour cela

Autres conseils

Il n'y a donc beaucoup de place dans un processeur pour le microcode pour toutes ses instructions. Donc, une instruction générale est souvent préférée sur plusieurs ones spéciaux pour les registres du lac des opérations rarement uused de changement de segment. En outre, pour certains processeurs le nombre d'instructions est tout à fait limité par l'architecture -. Par exemple, le processeur 8080 d'origine a été limité à 256 instructions qu'ils devaient tous avoir le code op codé dans un seul octet

Il est pas le langage assembleur vraiment mais le langage machine sous-jacente qui empêche ces opérations.

Alors que l'assemblage est composé de facile à lire des mots ou des mnémoniques, ils représentent en fait assez directement les 1 et 0 du code de la machine. Sur les CPU x86 chaque instruction est généralement constitué d'une séquence d'octets avec des octets individuels ou même bits dans les octets ayant une signification. Certains bits représentent l'instruction, les autres représentent la mode d'adressage . Dans les modes d'adressage des registres tels que vos exemples certains bits représentent des registres spécifiques qui doivent être utilisés comme source et la destination de l'instruction mov.

Maintenant la famille x86 de processeurs Retournons un long chemin jusqu'aux années 1970 où l'architecture du processeur était plus simple. Dans ces jours, le concept de accumulateur était d'une importance capitale - ax est le 16 accumulateur x86 bits. Tous les calculs ont été construits ou « accumulés » dans ce registre il était à la disposition de toutes les instructions. D'autres registres généraux avaient une portée plus restreinte d'utilisation.

Parce que les instructions étaient basées sur des octets que vous vouliez que quelques octets pour représenter une instruction que possible de maintenir le décodage rapide instruction. Pour garder autant de instructions aussi courte que possible l'utilisation de l'accumulateur est fait central.

Sur les processeurs plus modernes tels que le Motorola 680x0 registres plus généralistes ont plus de capacités qui étaient auparavant le domaine de l'accumulateur. Sur les CPU RISC tous les registres sont aussi flexibles que les accumulateurs. Je l'ai entendu dire que en mode 64 bits l'ensemble actuel d'instructions x86 / amd64 est maintenant beaucoup moins restreint.

Regardez le Intel Manuel Volume 2 Instruction Set de référence - Septembre 325383-056US ici à 2015" MOV Déplacer » colonne "Instruction".

La seule mov 16 bits est codée dans les registres:

mov r/m16, Sreg

"3.1.1.3 Instruction colonne dans le tableau récapitulatif Opcode", explique:

  • r / m16 - Un mot registre à usage général ou opérande mémoire utilisée pour les instructions dont opérande de taille attribut est de 16 bits. Le mot registres à usage général sont:. AX, CX, DX, BX, SP, BP, SI, DI
  • SREG -. Un registre de segment

Ainsi mov ds, cs est codable pas, car il n'y a pas de version mov Sreg, Sreg.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top